为什么mongodb副本集需要奇数个投票节点?

S-K*_*-K' 10 mongodb

mongodb文档表明副本集应该具有奇数个投票节点.这是什么原因?

Ser*_*sev 12

让我们假设一个副本集具有偶数个节点(例如4个).然后发生一个不幸的网络分区,将该组分成两半(2 + 2).哪个分区应该接受写入?第一?第二?都?网络恢复后会发生什么?这些都是难题.

奇数个节点完全消除了这些问题.该集合不能完全分成两半.因此,更大的部分将接受写入(确切地说,节点必须看到超过一半的节点(包括自己)被选为主要节点.所以它是1的1,2的3,3的5,4的7等等).

  • 顺便说一下,这被称为裂脑。如果您需要更多信息,请搜索它。 (3认同)
  • 让我承认我的无知并问一个幼稚的问题......如果只有一个节点在奇数副本集中出现故障,那么你就会遇到“偶数节点”问题。看起来一个节点宕机的概率会大于两个节点宕机的概率。那么为什么不想要偶数个节点来防范概率更大的事件呢? (3认同)
  • @JohnC:一个节点宕机根本不是问题。其他节点仍然占多数,并且可以执行选举等。奇数节点的要求是为了在集群分成两半时防止网络**分区**。如果它包含偶数个节点,则无法形成多数(如答案中所述)。 (2认同)