Swarm模式中的Raft共识


当Docker Engine在Swarm模式下运行时,管理节点实现Raft共识算法来管理全局集群状态。

Swarm模式使用共识算法的原因是为了确保集群中负责管理和调度任务的所有管理节点都存储相同的一致状态。

在集群中保持相同的一致状态意味着在发生故障时,任何管理节点都可以接管任务并将服务恢复到稳定状态。例如,如果负责在集群中调度任务的领导者管理节点意外死亡,任何其他管理节点都可以接管调度任务并重新平衡任务以匹配所需状态。

使用共识算法在分布式系统中复制日志的系统确实需要特别小心。它们通过要求大多数节点就值达成一致来确保在出现故障时集群状态保持一致。

Raft 最多可以容忍 (N-1)/2 个故障,并且需要大多数或法定人数 (N/2)+1 个成员同意提交给集群的值。这意味着在一个运行 Raft 的 5 个管理节点的集群中,如果有 3 个节点不可用,系统将无法处理更多的请求来调度额外的任务。现有的任务将继续运行,但如果管理节点集不健康,调度器将无法重新平衡任务以应对故障。

在Swarm模式下实现共识算法意味着它具有分布式系统固有的特性:

  • 在容错系统中达成价值共识。(参考 FLP不可能定理Raft共识算法论文
  • 通过领导者选举过程实现互斥
  • 集群成员管理
  • 全局一致的对象排序和CAS(比较并交换)原语