MongoDB:两个节点和主要选举

MongoDB:两个节点和主要选举

根据 Mongo 文档,为了安全地部署复制集,您至少需要两个活动服务器和一个仲裁服务器,因为主服务器的选举需要多数票。

假设我有三台机器,因此部署三个功能齐全的 mongo 实例,没有仲裁器。

如果选举出的主节点失败,我最终会得到两个节点,它们都具有相同的“权力”级别:对我来说,这似乎是部署时必须避免的情况。

有人可以解释一下为什么如果初始设置相同,在这种情况下选举初选就没有问题吗?

答案1

只要两个节点都可用,在双节点集中选举主节点就不是问题。规则是,集合中的大多数节点需要处于可用状态才能成功选举主节点。

在双节点集中:

  • 如果两个节点都启动了,它可以选举一个主节点
  • 如果只有一个节点处于启动状态,则它无法看到大多数节点,并且将保持只读状态

在三节点集中:

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

双节点 + 仲裁器集的行为与三节点集类似,因此如果任何一个节点(包括仲裁器)发生故障,它都可以选出一个主节点。

重要的是要意识到,只有两个投票节点的集合运行时没有写入冗余。您不会想创建一个总是这样运行的集合(因此需要仲裁器),并且您还希望在发生中断时尽快恢复第三个节点。

答案2

在这种情况下,你最好设置优先事项在您的节点上。

在测试中,似乎还有其他不那么透明的因素,我测试了 3 个节点复制集,并且在降级(并关闭节点)时,节点往往会轮流,首先是 1,然后是 2,然后是 3。

答案3

MongoDB 副本集使用基本的领导者选举算法。如果您有 3 个节点,并且至少有两个功能节点,那么您就拥有“法定人数”,并且集群继续正常运行。如果您丢失了两个节点,那么您就没有“法定人数”,领导者选举无法进行,并且幸存的副本处于只读状态。

相关内容