为什么副本集中的成员数量为奇数?

Why an odd number of members in a replica set?

我已多次阅读此内容,但正在努力理解其中的内容。所有文档都声明副本集中的成员数量为奇数。原因是因为您希望获得奇数票数以确保正确的选举结果(没有平局)。但是,在我看来,副本集中的成员数量是奇数是违反直觉的,就好像主节点不可用一样,你剩下偶数个成员来投票给新的主节点。基于此,实际上,在副本集中拥有偶数个成员不是更有意义吗?这样一来,如果主服务器不可用,您将有一个奇数来确定结果,并保证没有平局?

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

想法?

-吉姆

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

如果主节点出现故障,其中一个辅助节点将取代它作为主节点;此过程称为 故障转移

可用节点通过选举的过程决定哪个节点成为主要节点。

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


为什么会员数是奇数?

故障转移 机制意味着多数 节点必须可供选择主节点。

4(偶数)成员副本集中,多数是 34/2 + 1
5(奇数)成员副本集中,多数是 35/2 + 1

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


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

  • 优先级高的成员有机会被推翻 其他(优先级为数字,数字越大优先级越高)
  • 此外,具有最新复制数据的辅助成员具有 优先于没有最新副本的成员。因素 喜欢写关注影响哪个成员有最新副本 数据.
  • arbiter个成员只能投票不能复制 数据或 运行 进行选举。隐藏和延迟的成员不能投票 或成为小学。

也就是说,即使有偶数个可用投票节点,选举也会完成(并考虑上述因素)。 An election may result in a tie, in such a case the voting process will start again, until a member is elected as primary.请注意,选举只是系统的一个方面(或过程)——一个提供高可用性并使您的系统可操作并具有数据复制功能的系统。

另见:Factors and Conditions that Affect Elections.