分布式系统建议使用奇数个主节点,如3个主节点或5个主节点,以避免裂脑问题。
但它是如何解决问题的?
如果有2个节点(A和B),1个主持人,如果A和B告诉主持人"我是主人",则会发生大脑分裂。主持人无法决定哪一个是Master。
如果有3个节点(A,B和C),那么如果2个节点说Master是A,那么主持人可以判断A是Master。
但是如果A死了会发生什么,那么主持人必须从B和C中选择一个Master,如果B和C告诉主持人"我是Master&#34 ;?脑裂开再次出现。
答案 0 :(得分:2)
分布式系统通常不会建议奇数个节点阻止裂脑。相反,它是大多数 quorums ,可以避免分裂大脑。如果协议选择具有大多数投票的节点作为领导者,并且协议可以确保节点将只选择一个领导者,那么逻辑上只有一个领导者,因为只能有一个多数。通常,仅使用奇数个节点,因为它们提供最高级别的容错,例如, 2的大多数是2,但3的大部分也是2.这使你有空间容忍一次失败,同时仍能获得领导者的多数票。
当然,避免分裂大脑并不仅仅是从群集中的大多数节点收集投票并从中选出一个领导者的问题。在异步分布式系统中,两个节点相信自己仍然有可能成为领导者,即使他们不是,并且你需要为两个不同的客户创建裂脑与相信自己成为领导者的两个不同节点进行通信,无论他们是否是。有关这方面的大量例子,请参阅Kyle Kingsbury的Jepsen blog。
此外,请参阅Raft paper以获取避免分裂大脑的基于仲裁的多数协议的示例。