Mongodb 为什么副本集中有奇数个成员?

Mongodb 为什么副本集中有奇数个成员?,mongodb,replicaset,Mongodb,Replicaset,这篇文章我已经读了很多遍,但我正在努力理解其中的含义。所有文档都声明在副本集中有奇数个成员。原因是你想获得奇数票,以确保选举结果正确(没有平局)。然而,在我看来,在副本集中有奇数个成员是违反直觉的,因为如果主副本不可用,您将有偶数个成员投票给新的主副本。基于此,在现实中,副本集中有偶数个成员不是更有意义吗?这样,如果主设备不可用,您将有一个奇数来确定结果,并保证没有平局 例如,如果您有3个节点,其中一个节点下降,则只剩下2个节点可以投票。因为2是偶数,你可以打成平局,这是我们试图避免的。开始时有

这篇文章我已经读了很多遍,但我正在努力理解其中的含义。所有文档都声明在副本集中有奇数个成员。原因是你想获得奇数票,以确保选举结果正确(没有平局)。然而,在我看来,在副本集中有奇数个成员是违反直觉的,因为如果主副本不可用,您将有偶数个成员投票给新的主副本。基于此,在现实中,副本集中有偶数个成员不是更有意义吗?这样,如果主设备不可用,您将有一个奇数来确定结果,并保证没有平局

例如,如果您有3个节点,其中一个节点下降,则只剩下2个节点可以投票。因为2是偶数,你可以打成平局,这是我们试图避免的。开始时有两个成员并不好,因为如果有一个成员不可用,那么只剩下一个节点,在这种情况下,这意味着没有初选。基于我的上述论点,这意味着4个是好的。如果一个节点不可用,您将有3个节点可供投票(奇数个成员)。我知道这与文档所述相反,但对我来说,这是有意义的。奇数似乎唯一有意义的地方是,如果在没有节点关闭的情况下进行选举

想法


-Jim

复制的目的是,如果副本集中的服务器发生故障,您仍然可以访问数据。此概念称为可用性

如果主节点发生故障,则其中一个辅助节点将取代主节点的位置;此过程称为故障转移

可用节点通过选择过程决定哪个节点成为主节点

副本集最多可以有50个成员和7个投票成员-最多


为什么成员数为奇数?

故障转移机制意味着大多数节点必须可用,才能选择主节点

4
(偶数)成员副本集中,大多数是
3
4/2+1

5
(奇数)成员副本集中,大多数是
3
5/2+1

在5个成员的副本集中,有3个节点可供副本集运行的可能性更大。在4个成员的副本集中,必须至少有3个成员就绪,副本集才能运行。因此,对于5个成员的副本集(5个副本中的3个),存在 比4(4个成员中的3个)副本集更具操作性的可能性更高


这不仅仅是成员的数量;影响选举的因素很多

  • 具有更高优先权的成员有机会当选 其他(优先级为数字,数字越高优先级越高)
  • 此外,具有最新复制数据的辅助成员具有 优先于没有最新副本的成员。因素 如书面关注,会影响哪个成员拥有最新的 数据
  • 仲裁员成员只能投票,不能复制 收集数据或参加选举。隐藏和延迟的成员不能投票 或者成为一名小学教师
也就是说,即使可用投票节点数为偶数,选举也会完成(并考虑上述因素)。选举结果可能是平局,在这种情况下,投票过程将再次开始,直到一名成员当选为初选成员。请注意,选择只是系统的一个方面(或过程)——一个提供高可用性并使您的系统可运行和进行数据复制的系统


另请参见:。

感谢您的反馈。我想我读过文档,其中提到奇数个节点以避免“平局”(“奇数个投票成员可避免可能出现平局投票的情况”)。但是,当3个节点和一个节点关闭时,剩下2个节点,这仍然是大多数节点。但是,如果有两个节点可用,如何避免平局?这就是我困惑的地方。我想我找到了我想要的答案,但是你的解释很有帮助。关键是“多数=节点总数”而不是“选举时可用的节点总数”。我缺少的那部分(你在上面解释过)。此外,我发现“连接”组件只与网络分裂的时间有关,而与节点实际停机的时间无关。有了这两个人,我相信我的问题已经得到了回答。