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 模式下实现共识算法意味着它具有 分布式系统固有的属性: