当Docker引擎在集群模式下运行时,manager节点实现Raft 共识算法来管理全局集群状态。
Docker swarm模式使用共识算法的缘由是为了确保集群中负责管理和调度任务的全部manager节点都存储相同的一致性状态。
跨集群具备相同的一致状态意味着在出现故障时,任何管理器节点均可以接收任务并将服务恢复到稳定状态。例如,若是集群中负责调度任务的Leader Manager意外死亡,那么任何其余Manager均可以继续调度任务并从新平衡任务,以匹配所需的状态。算法
使用共识算法在分布式系统中复制日志的系统确实须要特别注意。它们要求大多数节点对值达成一致,从而确保集群状态在出现故障时保持一致。
Raft能够容忍(N-1)/2次失败,而且须要多数或(N/2)+1个成员仲裁来就建议给集群的值达成一致。这意味着在一个由5个管理器组成的运行Raft的集群中,若是3个节点不可用,系统将没法处理更多请求来调度其余任务。现有任务继续运行,但若是管理器集不健康,调度器没法从新平衡任务以处理失败。
共识算法在群体模式下的实现意味着它具备分布式系统固有的特性:分布式