2013-03-24 78 views
3

建议使用奇数组。我的疑问是一个人从一个奇怪的集合下来,我们有一个偶数集。成员人数逐渐下降时,会出现偶数和奇数之间的波动。我们始终没有奇怪的成员情况。有人可以解释一下MongoDB投票的工作原理吗?在MongoDB中投票

+0

通常解决这个的一个好方法是输入一个abrtitar到应用服务器专为投票 – Sammaye 2013-03-24 12:09:16

回答

18

投票是由多数投票成员完成。

想象一下包含三个(投票)成员的副本集。 假设节点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/2副成员副本集)中松散了两个成员 - 再次 - 影响是相同的:没有新的领导者可以被投票通过选举。

因此,简而言之,通过在副本集中包含偶数个成员,不会有冗余收益。

更多

+1

的关键是有没有冗余增益出来的,甚至成立。我现在明白了。非常感谢:) – Srik 2013-03-24 12:40:40

+0

现在有一件事让我想起了。在Mongo DB中使用投票系统的好处也是提高可用性。例如:在5个成员的设置中,只有剩下两个成员时才会到达只读模式。而在一个11人中,其5人(> 2人)。我对吗? – Srik 2013-03-24 12:50:54

+0

是的,你知道了:) – 2013-03-24 13:08:15