1

分布式系统建议使用奇数个主节点,如3个主节点或5个主节点以避免脑裂问题。奇数如何解决分布式系统中的裂脑问题?

但是它是如何解决这个问题的?

如果有2个节点(A和B),1个主持人,如果A和B告诉主持人说:“我是大师”,那么大脑发生分裂。主持人不能决定哪一个是主人。

如果有3个节点(A,B和C),那么,如果2个节点说Master是A,则主持人可以决定A是母版。

但如果死了,然后主持人不得不从B和C中选择一个主会发生什么,如果B和C分不清什么是主持人“我是大师”?大脑分裂再次出现。

回答

1

分布式系统通常不建议奇数节点是防止裂脑的原因。相反,它是大多数法定人数,避免分裂大脑。如果协议选择以大多数选票作为领导者的节点,并且协议可以确保节点将只选择一个领导者,则逻辑上只能有一个,因为只能有一个多数。通常,仅使用奇数节点,因为它们提供最大程度的容错能力,例如, 2的绝大多数是2,但3的大多数也是2.这给了你容忍一次失败的空间,同时仍然能够获得领导者的多数票。

当然,避免脑裂并不完全只是一个从大多数节点的集群中收集选票,并从选举的领导者的问题。在异步分布式系统中,还是有机会的两个节点相信自己是,即使他们不是领导者,你需要创建裂脑是两个不同的客户有两个不同的节点传达相信自己成为领导者,无论他们是否。请参阅凯尔金斯伯里的Jepsen blog了解这方面的众多示例。

此外,请参阅Raft paper用于基于大多数仲裁协议,其避免脑裂的一个例子。

+1

另外值得一提的是,像Flexible Paxos这样的东西存在,这使得在领导者选举期间交易更高的法定人数要求成为可能,以便在复制期间降低法定人数要求。 – GManNickG