Swarm 模式下的 Raft 共识
当 Docker Engine 以 Swarm 模式运行时,Manager 节点会实现 Raft 共识算法来管理全局集群状态。
Swarm 模式使用共识算法的原因是为了确保 负责管理和调度集群中任务的所有 Manager 节点 存储相同的一致状态。
在整个集群中具有相同的一致状态意味着,在发生故障时, 任何 Manager 节点都可以选取任务并将服务恢复到稳定状态。 例如,如果负责在 cluster 意外宕机,任何其他 Manager 都可以接手 scheduling 和 重新平衡任务以匹配所需状态。
使用共识算法在分布式系统中复制日志的系统 确实需要特别照顾。它们确保集群状态保持一致 在存在故障的情况下,要求大多数节点就值达成一致。
Raft 可以容忍失败,并且需要大多数成员或法定成员就向集群提议的值达成一致。这意味着在
一个由 5 个 Manager 组成的集群运行 Raft,如果 3 个节点不可用,则系统
无法再处理任何计划其他任务的请求。现有的
任务继续运行,但调度程序无法将任务重新平衡到
如果 Manager Set 运行状况不佳,请处理失败。(N-1)/2
(N/2)+1
在 Swarm 模式下实现共识算法意味着它具有 分布式系统固有的属性:
- 对容错系统中的值达成一致。(参见 FLP 不可能性定理和 Raft 共识算法论文)
- 通过领导者选举过程实现相互排斥
- 集群成员管理
- 全局一致的对象排序和 CAS(比较和交换)基元