当某些节点closures时,MongoDB副本集选举

我试图进入ReplicaSet的概念,发现在mongoDB文档中有些奇怪:

对于一个节点被选为主要的,它必须得到多数票。 这是所有选票中的大多数:如果你有一个5人组和4个成员下来,该组的大部分仍然是3个成员(地板(5/2)+1)。 每个成员收到一票,知道可用的总票数。

如果没有节点可以达到多数,那么没有主节点可以被选中,并且没有数据可以被写入副本集(尽pipe读取到副节点仍然是可能的)。

(从这里拿)

那么,如果我得到了正确的答案,在提到的五人案例中,仍然存在的一个节点将不会被选作主要节点,整个集合将不会得到任何写入? 即使这个单一节点是选举之前的最后一个主要节点?

如果这是真的,那么可能会有很多不太激进的案例,最终会出现一套退化的案例。 我们如何避免这种情况?

大多数规则旨在防止多个单独的(认为孤立的)节点同时声称是主节点。 避免这种情况的策略将取决于您的架构。

作为一些例子,你可以在每个数据中心或者区域都有仲裁者的支持,所以你可以添加它们以形成多数,你可以在发生“灾难”的情况下重新configuration集合,只包含3个节点而不是5个, 2形成大多数等。或者,您可以重新启动唯一的剩余的mongod实例(如果这样的事情存在)作为一个独立的没有副本设置选项,并以这种方式使用它,直到你恢复你的设置。

在devise跨多个区域的灾难恢复或故障切换时,重要的是在devise时遵循多数规则。