Cluster computing 为什么建议创建节点数为奇数的群集

Cluster computing 为什么建议创建节点数为奇数的群集,cluster-computing,distributed,leader-election,Cluster Computing,Distributed,Leader Election,有一些关于分布式系统的资源,例如建议集群中奇数个节点的资源 拥有奇数节点的好处是什么?奇数节点有助于而不是在选择集群中的领导者时所必需的。避免多位领导人当选是至关重要的,这种情况被称为大脑分裂问题。共识算法使用投票选举领导人。i、 e、选举拥有多数票的节点 考虑一个由5个节点组成的集群。所需的最低多数为3(5/2或2+2+1-交易破坏者) 重要的是要注意,即使在失败的情况下,领导人选举也需要多数分组投票 考虑5个节点中有1个失败。我们仍然可以以3票的多数票选出一位领导人。那么,如果在4个节点中,

有一些关于分布式系统的资源,例如建议集群中奇数个节点的资源


拥有奇数节点的好处是什么?

奇数节点有助于而不是在选择集群中的领导者时所必需的。避免多位领导人当选是至关重要的,这种情况被称为大脑分裂问题。共识算法使用投票选举领导人。i、 e、选举拥有多数票的节点

考虑一个由5个节点组成的集群。所需的最低多数为3(5/2或2+2+1-交易破坏者)

重要的是要注意,即使在失败的情况下,领导人选举也需要多数分组投票

考虑5个节点中有1个失败。我们仍然可以以3票的多数票选出一位领导人。那么,如果在4个节点中,两位领导人以2票相等的票数当选呢?这留给协商一致算法来解决争议(也许,只是重新启动选举)

比方说,5个节点中有2个失败。我们仍然可以以3票的多数票选举领导人,即当所有3个可用节点都投票给同一节点时

当其中一个奇数节点出现故障,导致它们的数量为偶数时,人们通常会对实现多数感到困惑。现在应该很清楚,大多数初始集群大小(最好是奇数)都需要选举领导人

我们已经看到奇数集群如何在节点故障的情况下提供帮助。 这里要补充的另一点是,这在网络分区的情况下有何帮助。 在最坏的情况下,网络分区可以将集群分成正好相等的两部分,这在奇数集群中是不可能发生的


只要集群的一部分或操作节点的数量大于或等于楼层(n/2)+1,就可以在初始集群大小的基础上达成共识,集群可以继续运行。

简短回答:在MongoDB的情况下,节点数量奇数会增加集群系统的可用性(正常运行时间)

查看您链接的MongoDB文档中的表格:

+-------------------+------------------------------------------+-----------------+
| Number of Members | Majority Required to Elect a New Primary | Fault Tolerance |
+-------------------+------------------------------------------+-----------------+
|         3         |                    2                     |        1        |
+-------------------+------------------------------------------+-----------------+
|         4         |                    3                     |        1        |
+-------------------+------------------------------------------+-----------------+
|         5         |                    3                     |        2        |
+-------------------+------------------------------------------+-----------------+
|         6         |                    4                     |        2        |
+-------------------+------------------------------------------+-----------------+
请注意,当您拥有奇数个成员并再添加一个(变为偶数)时,您的容错能力不会提高!(这意味着,您的集群不能容忍比原来更多的失败成员)

这是因为MongoDB需要大多数成员才能选择主要成员。此属性不是MongoDB特有的,而是任何需要大多数成员才能选择的群集系统(例如,另请参阅)

当节点数增加到偶数时,系统可用性实际上会下降,因为尽管容错能力保持不变,但会有更多节点发生故障,因此发生故障的概率会上升

此外,拥有偶数个成员可以降低这样的概率:如果存在网络分区,则节点的某些子集将能够继续运行。例如,如果您有一个6节点群集,则网络分区可以将您的节点划分为2个3节点分区。在这种情况下这两个分区都不能与大多数成员通信,因此您的集群变得不可用

反直觉的结论是,如果您有一个偶数成员集群,那么从高可用性的角度来看,删除其中一个成员实际上是有益的