fsfss21 发表于 2017-3-6 13:17:45

docker-swarm集群管理详解

因为swarm使用的是raft集群管理方式所以集群内节点分为三种角色:头目(leader),被选举者(Reachable),小弟(worker)。头目和被选举者其实都是manager,根据下图可以看出swarn集群中至少得有2个可用的被选举节点才能选举主节点出来,否则集群将无法执行操作。         这里有个raft的幻灯片讲解【传送门】         在docker里面有两个手动操作promote和demote分别代表提权和降权。promote用户将变为备用主,demote将变为worker。不能直接变为leader。    集群中每个节点又可分为俩个状态:active(活跃),Drain(排空)。
下图是一个集群简单示意图。



[*]管理节点和worker节点的比例

    看完上图大家可能更关心你的manager节点可以损坏几个而不影响你,简单的说你至少有两个manager节点才可以进行选举

   为了利用群模式的容错功能,Docker建议您根据组织的高可用性要求实现奇数个节点。当有多个manager时,您可以manager节点的故障中恢复,而无需停机。

[*]三个manager容忍一个manager的最大损失。

[*]五manager容忍两个manager节点的最大同时丢失。

[*]N个manager集群将容忍最多(N-1)/ 2个manager的丢失。

[*]Docker建议一个群集最多有七个manager节点。

重要说明:添加更多manager并不意味着增加可伸缩性或更高的性能。一般来说,情况恰恰相反。
下面是节点数,选举数,可损坏节点数。


    如果有的确实想要从swarm集群中删除,你应该先把这个节点容器排空,然后再把节点从集群中去掉。
如何删除一个swarm节点

删除节点后恢复到集群
   之前节点在集群内,如果节点自身主动退出集群,manager也需要从集群删除节点,否则在进入时重复加入集群报错,如下#docker swarm join \>   --tokenSWMTKN-1-4gempr5ydp6d332n5ygsmnf0c25u46mp78aptbl9gda5fw8l71-1oso860e7n5yn3fs9sya17u9m\>   192.168.198.117:2377Error response fromdaemon: Timeout was reached before node was joined. The attempt to join theswarm will continue in the background. Use the "docker info" commandto see the current swarm status of your node.

1
2
3
4
5
6
7
8
9
# docker node ls
ID                           HOSTNAME    STATUSAVAILABILITYMANAGER STATUS
0jopsrt8eygko1jlfmbjr4uax    salt-node1Ready   Active      Reachable
0jz3o2avbbugyoejzs1ed3djz    data-node3Ready   Active      
2pzv4kzc2p8f7c4wqlfupp9h9    salt-node1Down    Active      Unreachable
37lpbieigtc2cz6njwqfe0c4b    compute1    Ready   Active      
3lw43iyd2m89rrmodjt2ym4bf    data-node2Ready   Active      Reachable
g36lvv23ypjd8v7ovlst2n3yt    salt-node3Ready   Active      Reachable
h14re9viizbs5yj3zunuo9zo8 *salt-node2Ready   Active      Leader






管理节点重新加入      下面报错是因为之前节点是主动离开集群的,所以集群内还有本节点信息,但是本节点已经不再主动加入集群,所以需要从集群删除本管理节点才能重新加入到集群,因为manager节点不能删除,所以需要先降级为worker才能删除。#docker node rm 2pzv4kzc2p8f7c4wqlfupp9h9Error response fromdaemon: rpc error: code = 9 desc = node 2pzv4kzc2p8f7c4wqlfupp9h9 is a clustermanager and is a member of the raft cluster. It must be demoted to workerbefore removal
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
# docker node ls
ID                           HOSTNAME    STATUSAVAILABILITYMANAGER STATUS
0jopsrt8eygko1jlfmbjr4uax    salt-node1Ready   Active      Reachable
0jz3o2avbbugyoejzs1ed3djz    data-node3Ready   Active      
2pzv4kzc2p8f7c4wqlfupp9h9    salt-node1Down    Active      Unreachable
37lpbieigtc2cz6njwqfe0c4b    compute1    Ready   Active      
3lw43iyd2m89rrmodjt2ym4bf    data-node2Ready   Active      Reachable
g36lvv23ypjd8v7ovlst2n3yt    salt-node3Ready   Active      Reachable
h14re9viizbs5yj3zunuo9zo8 *salt-node2Ready   Active      Leader

# docker node demote 2pzv4kzc2p8f7c4wqlfupp9h9
Manager 2pzv4kzc2p8f7c4wqlfupp9h9 demoted in the swarm.
# docker node rm 2pzv4kzc2p8f7c4wqlfupp9h9
2pzv4kzc2p8f7c4wqlfupp9h9
# docker node ls
ID                           HOSTNAME    STATUSAVAILABILITYMANAGER STATUS
0jopsrt8eygko1jlfmbjr4uax    salt-node1Ready   Active      Reachable
0jz3o2avbbugyoejzs1ed3djz    data-node3Ready   Active      
37lpbieigtc2cz6njwqfe0c4b    compute1    Ready   Active      
3lw43iyd2m89rrmodjt2ym4bf    data-node2Ready   Active      Reachable
g36lvv23ypjd8v7ovlst2n3yt    salt-node3Ready   Active      Reachable
h14re9viizbs5yj3zunuo9zo8 *salt-node2Ready   Active      Leader






页: [1]
查看完整版本: docker-swarm集群管理详解