MongoDB conf 在没有 Arbiter 的情况下主持选举以选择主要的

MongoDB conf in absence of Arbiter to host election to choosing a primary

让我解释一下第一步的场景。

案例一: 我在 localhost:27017 上有一个主副本集,在端口 27018 和 27019 上有两个主副本集。所有这些都在同一个集合上。

当我关闭端口 27017 上的服务器时,端口 27018 和 27019 上的两个辅助服务器之一将成为主服务器(来自选举)。

案例二: 我在 localhost:27017 上设置了一个主副本,在 27018 和 27019 上设置了 2 个主副本,在 27020 上设置了一个仲裁器。所有这些都在同一个组中。

现在,当我关闭 arbiter(:27020) 和主要 (:27017) 节点时,我在登录时看到以下消息:27018 & :27019 消息:2016-04-03T12:26:19.035-0700 I REPL [ReplicationExecutor] 没有开始选举,因为我们不能被选

我如何让我的辅助节点自行主持选举(如案例 1)并选择其中一个作为主要节点。

用于创建这些节点的命令是: **mongod --port 27017 --dbpath F:\mongodb\replication\rs0-0 --replSet rs0 --smallfiles --oplogSize 128 --logpath F:\data\log\devr0.log --logappend

mongod --port 27018 --dbpath F:\mongodb\replication\rs0-1 --replSet rs0 --smallfiles --oplogSize 128 --logpath F:\data\log\devr1.log --logappend

mongod --port 27019 --dbpath F:\mongodb\replication\rs0-2 --replSet rs0 --smallfiles --oplogSize 128 --logpath F:\data\log\devr2.log --logappend

mongod --port 27020 --dbpath F:\mongodb\replication\arbiter --replSet rs0 --smallfiles --oplogSize 128 --logpath F:\data\log\devarb.log --logappend**

您的案例 2 存在缺陷。如图所示,您向由三个成员组成的工作副本集添加了一个仲裁器。由于在添加成员时没有进行选举,因此一切正常。然而,在关闭之后,副本集发现成员数量为偶数,因此拒绝开始选举过程,即使理论上可以找到成员的法定人数。

可以肯定地说,这是一种安全措施,可以防止选举过早过时。

你总是需要由奇数个成员组成的副本集,这样在最坏的情况下,原始成员的合格多数可以选出一个主要成员。因此,向由三个数据承载节点组成的副本集添加仲裁器没有任何价值。