12

An odd number set is recommended. My doubt is as one goes down from an odd set, we have an even number set. The number of members fluctuate between even and odd when they go down one by one. We always don’t have odd member scenario. Can some one explain how MongoDB voting works?

4

1 回答 1

44

投票由多数投票成员进行。

想象一个具有三个(投票)成员的副本集。假设节点 A 是主节点,节点 B+C 是辅助节点。节点 A 宕机,因此节点 B+C 进行选举。他们仍然占多数(三分之二)。选举首先由优先级决定。如果两个节点 B 和 C 具有相同的优先级,那么与失败的主节点 (oplog) 相关的最新节点将获胜。假设它是节点 B。

一旦节点 A 重新活跃起来,就没有新的选举。节点 B 仍然是主节点,而 C+A 现在是从节点。

另一方面,如果两个节点出现故障,您没有多数,因此副本集不能再接受更新(应用写入),直到两个故障服务器中的至少一个变为活动状态(并由单个连接幸存节点)再次。

现在想象一个有四个(投票)成员的副本集。假设节点 A 是主节点,节点 B+C+D 是辅助节点。节点 A 宕机,因此节点 B+C+D 进行选举。他们当然占多数(四分之三)

但是,如果两个节点出现故障,则您没有多数(四分之二),因此副本集再次处于只读模式。

这就是为什么建议使用奇数的原因;如果你在 3 个成员的副本集中失去了一个成员,这与在 4 个成员的副本集中失去一个成员是一样的:你仍然获得仲裁多数并且可以选举一个新的主节点(RS 仍然可以通过以下方式选举一个新的主节点)多数)。另一方面,如果您在 3 个成员副本集或 4 个成员副本集(或 n 个成员副本集的 n/2 个成员)中失去两个成员 - 再次 - 影响是相同的:没有新的领导者可以被投票通过选举。

因此,长话短说,在副本集中拥有偶数个成员并没有冗余增益。

有关更多信息,请参阅选举内部

于 2013-03-24T12:06:03.280 回答