Raft consensus in swarm mode 在集群模式中的Raft共识
当Docker引擎在集群模式下运行时,manager节点实现Raft 共识算法来管理全局集群状态。
Docker swarm模式使用共识算法的原因是为了确保集群中负责管理和调度任务的所有manager节点都存储相同的一致性状态。
跨集群具有相同的一致状态意味着在出现故障时,任何管理器节点都可以接收任务并将服务恢复到稳定状态。例如,如果集群中负责调度任务的Leader Manager意外死亡,那么任何其他Manager都可以继续调度任务并重新平衡任务,以匹配所需的状态。
使用共识算法在分布式系统中复制日志的系统确实需要特别注意。它们要求大多数节点对值达成一致,从而确保集群状态在出现故障时保持一致。
Raft可以容忍(N-1)/2次失败,并且需要多数或(N/2)+1个成员仲裁来就建议给集群的值达成一致。这意味着在一个由5个管理器组成的运行Raft的集群中,如果3个节点不可用,系统将无法处理更多请求来调度其他任务。现有任务继续运行,但如果管理器集不健康,调度器无法重新平衡任务以处理失败。
共识算法在群体模式下的实现意味着它具有分布式系统固有的特性:
- 在容错系统中的值的一致。(参考FLP不可能定理(FLP impossibility theorem)和Raft Consensus算法论文(Raft Consensus Algorithm paper))
- 通过*选举程序相互排斥
- 集群成员管理
- 全局一致的对象排序和CAS(比较和交换)原语