您的位置:首页 > 运维架构 > Docker

运维之我的docker-swarm节点运行和服务运行详解

2017-03-04 18:09 856 查看
本次介绍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也需要从集群删除节点,否则在进入时重复加入集群报错,如下[root@data-node2
~]# docker swarm join \> --token
SWMTKN-1-4gempr5ydp6d332n5ygsmnf0c25u46mp78aptbl9gda5fw8l71-1oso860e7n5yn3fs9sya17u9m
\> 192.168.198.117:2377Error response from
daemon: Timeout was reached before node was joined. The attempt to join the
swarm will continue in the background. Use the "docker info" command
to see the current swarm status of your node.
[root@salt-node2 ~]# docker node ls
ID                           HOSTNAME    STATUS  AVAILABILITY  MANAGER STATUS
0jopsrt8eygko1jlfmbjr4uax    salt-node1  Ready   Active        Reachable
0jz3o2avbbugyoejzs1ed3djz    data-node3  Ready   Active
2pzv4kzc2p8f7c4wqlfupp9h9    salt-node1  Down    Active        Unreachable
37lpbieigtc2cz6njwqfe0c4b    compute1    Ready   Active
3lw43iyd2m89rrmodjt2ym4bf    data-node2  Ready   Active        Reachable
g36lvv23ypjd8v7ovlst2n3yt    salt-node3  Ready   Active        Reachable
h14re9viizbs5yj3zunuo9zo8 *  salt-node2  Ready   Active        Leader

管理节点重新加入 下面报错是因为之前节点是主动离开集群的,所以集群内还有本节点信息,但是本节点已经不再主动加入集群,所以需要从集群删除本管理节点才能重新加入到集群,因为manager节点不能删除,所以需要先降级为worker才能删除。[root@salt-node2 ~]#
docker node rm 2pzv4kzc2p8f7c4wqlfupp9h9Error response from
daemon: rpc error: code = 9 desc = node 2pzv4kzc2p8f7c4wqlfupp9h9 is a cluster
manager and is a member of the raft cluster. It must be demoted to worker
before removal
[root@salt-node2 ~]# docker node ls
ID                           HOSTNAME    STATUS  AVAILABILITY  MANAGER STATUS
0jopsrt8eygko1jlfmbjr4uax    salt-node1  Ready   Active        Reachable
0jz3o2avbbugyoejzs1ed3djz    data-node3  Ready   Active
2pzv4kzc2p8f7c4wqlfupp9h9    salt-node1  Down    Active        Unreachable
37lpbieigtc2cz6njwqfe0c4b    compute1    Ready   Active
3lw43iyd2m89rrmodjt2ym4bf    data-node2  Ready   Active        Reachable
g36lvv23ypjd8v7ovlst2n3yt    salt-node3  Ready   Active        Reachable
h14re9viizbs5yj3zunuo9zo8 *  salt-node2  Ready   Active        Leader

[root@salt-node2 ~]# docker node demote 2pzv4kzc2p8f7c4wqlfupp9h9
Manager 2pzv4kzc2p8f7c4wqlfupp9h9 demoted in the swarm.
[root@salt-node2 ~]# docker node rm 2pzv4kzc2p8f7c4wqlfupp9h9
2pzv4kzc2p8f7c4wqlfupp9h9
[root@salt-node2 ~]# docker node ls
ID HOSTNAME STATUS AVAILABILITY MANAGER STATUS
0jopsrt8eygko1jlfmbjr4uax salt-node1 Ready Active Reachable
0jz3o2avbbugyoejzs1ed3djz data-node3 Ready Active
37lpbieigtc2cz6njwqfe0c4b compute1 Ready Active
3lw43iyd2m89rrmodjt2ym4bf data-node2 Ready Active Reachable
g36lvv23ypjd8v7ovlst2n3yt salt-node3 Ready Active Reachable
h14re9viizbs5yj3zunuo9zo8 * salt-node2 Ready Active Leader


Swarm创建的服务运行状态
如果你创建一个service,每个节点开放指定端口提供service的服务,去访问节点内的容器即使节点当前没有容器
服务内分发请求到容器的默认方法是顺序轮询
Port 7946 TCP/UDP 容器的网络发现接口

Port 4789 UDP 容器的网络入口.

下图为例:





当我们swarm在生产中就得换成下图的方式,这样增加系统高可用。



内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  active manager docker