- 当docker运行在swarm集群模式时,管理节点通过Raft一致性算法来管理全局的集群状态。
- Docker swarm 集群模式使用raft一致性算法的原因是:
确保集群中负责管理和调度任务的所有管理节点都存储着相同的一致性状态。
- 在整个集群中保持相同的一致状态意味着在发生故障时,任何Manager节点都可以接替管理的任务,并将service恢复到稳定的状态。
- 在分布式系统中使用一致性算法来复制日志需要特别注意一点!就是,其实是通过要求大多数节点对值达成一致来确保在出现故障时集群状态保持一致的。(要十分的注意!)
Raft最多允许(N-1)/2个管理节点失败,并且需要多数,或者(N/2)+1个成员的同意向集群提出的值。
意思就是,在一个有5个管理节点运行的集群中,如果3个节点不可用,系统将不会在处理任何调度额外任务的请求!现有的任务将继续运行,但如果管理器集不正常,调度器无法重新平衡任务以应对失败。
如果出现这种情况,当执行swarm管理命令的时候,就会出现如下的报错:
[root@nccztsjb-node-01 ~]# docker node ls Error response from daemon: rpc error: code = Unknown desc = The swarm does not have a leader. It's possible that too few managers are online. Make sure more than half of the managers are online. [root@nccztsjb-node-01 ~]#
在集群模式下实现一致性算法,意味着它具有分布式系统固有的特性:
- 容错系统中值的一致性。
- 通过leader 选举过程相互排斥
- 集群成员管理
- 全局一致的对象排序和CAS(比较和交换)原语
标签:swarm,算法,集群,一致性,raft,docker,节点 From: https://www.cnblogs.com/chuanzhang053/p/16820730.html