当 Docker Engine 以 swarm 模式运行时,管理器节点实现 Raft 共识算法来管理全局集群状态。
为什么原因Docker群模式是使用一个共识算法,以确保那些负责在集群中的管理和调度任务的所有经理节点,都存储相同一致的状态。
在整个集群中具有相同的一致状态意味着在发生故障时,任何 Manager 节点都可以接收任务并将服务恢复到稳定状态。例如,如果集群中负责调度任务的Leader Manager意外终止,任何其他 Manager 都可以接手调度的任务并重新平衡任务以匹配所需的状态。
使用共识算法在分布式系统中复制日志的系统确实需要特别小心。它们通过要求大多数节点就值达成一致来确保集群状态在出现故障时保持一致。
Raft 最多可以容忍(N-1)/2失败,并且需要大多数或法定人数的 (N/2)+1成员就提议给集群的值达成一致。这意味着在运行 Raft 的 5 个 Manager 的集群中,如果 3 个节点不可用,系统将无法处理更多请求以安排额外的任务。现有任务继续运行,但如果管理器集不健康,则调度程序无法重新平衡任务以应对故障。
群体模式下共识算法的实现意味着它具有分布式系统固有的特性:
1.容错系统中的值达成一致。
2.通过领导人选举过程相互排斥
3.集群成员管理
4.全局一致的对象排序和 CAS(比较和交换)原语