MongoDB:两个节点和初选

根据Mongo的文档,为了安全地部署一个复制集合,你至less需要两个主动和一个仲裁者,因为选举一个主要需要大部分的选票。

假设我能够拥有三台机器,因此部署了三个完整的mongo实例,而不是仲裁器。

如果当选的小学生失败,我最终会得到两个节点,他们两个具有相同的“权力”级别:对我来说,这似乎是在部署中描述的必须避免的情况。

在这种情况下,如果初始设置是相同的,是否有人可以展开为什么select小学不成问题?

只要两个节点都可用,select两个节点集合中的主节点就不是问题。 规则是,大部分的集合需要成功地选出一个小学。

在两个节点集合中:

  • 如果两个节点都启动,则可以select一个主节点
  • 如果只有一个节点启动,则不能看到多数,只能保持只读状态

在三个节点集合中:

  • 如果有三个节点,则可以成为主节点
  • 如果两个节点都启动,则可以成为主节点
  • 如果只有一个节点启动,则它是只读的

双节点+仲裁器组的行为就像一个三节点组,所以如果任何一个节点(包括仲裁器)出现故障,它可以select一个主节点。

意识到只有两个投票节点的集合在没有写冗余的情况下运行是很重要的。 您不希望创build一个总是像这样运行的集合(因此,仲裁者),并且还希望在出现中断的情况下尽快恢复第三个节点。

在这种情况下,你可能希望在你的节点上设置优先级 。

在testing中,似乎还有其他一些不那么透明的因素,我testing了一个3节点的复制集,并且在closures节点(也closures了节点)后,节点往往轮stream,先是1,然后是2 3。

MongoDB副本集使用基本的领导者选举algorithm。 如果你有3个节点,那么如果你有至less两个function节点,那么你有一个“法定人数”,集群继续正常运行。 如果你松了两个节点,那么你不会有“法定人数”和领导人选举无法继续,幸存的复制品是一个只读状态。