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]