奇数如何解决分布式系统中的脑裂?

Sat*_*ato 5 linux distributed-computing cluster-computing distributed-system

分布式系统建议使用奇数个 Master 节点,例如 3 个 Master 节点或 5 个 Master 节点,以避免脑裂问题。

但是它是如何解决问题的呢?

如果有2个节点(A和B),1个主持人,如果A和B告诉主持人“我是大师”,那么就会发生脑裂。主持人无法决定谁是大师。

如果有 3 个节点(A、B 和 C),那么如果有 2 个节点说 Master 是 A,那么 Moderator 可以决定 A 是 Master。

但是如果A死了,那么Moderator必须从B和C中选择一个Master,如果B和C告诉Moderator“我是Master”呢?脑裂再次出现。

kuu*_*ujo 5

分布式系统通常不会建议奇数个节点是防止脑裂的原因。相反,大多数法定人数避免了脑裂。如果协议选择拥有多数票的节点作为领导者,并且该协议可以确保节点永远只会选择一个领导者,那么逻辑上只能有一个领导者,因为只能有一个多数。通常,仅使用奇数个节点是因为它们提供了最高级别的容错能力,例如,2 的多数是 2,但 3 的多数也是 2。这为您提供了容忍一次故障的空间,同时仍然能够获得多数票投给领导者。

当然,避免脑裂不仅仅是从集群中的大多数节点收集选票并从中选出领导者的问题。在异步分布式系统中,即使不是领导者,两个节点仍然有可能相信自己是领导者,而创建裂脑所需的只是让两个不同的客户端与两个相信自己是领导者的不同节点进行通信,不管他们是不是。有关这方面的众多示例,请参阅 Kyle Kingsbury 的Jepsen 博客

此外,请参阅Raft 论文,了解基于多数仲裁的协议示例,该协议可避免脑裂。