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

时间:2016-04-03 19:52:29

标签: windows mongodb replication

让我在第一步中解释一下情景。

案例1: 我在localhost:27017上设置了一个主副本,在端口27018上设置了两个主副本。 27019.所有这些都是在同一套。

localhost:27017 as Master

当我在端口27017上关闭服务器时,端口27018上的两个辅助服务器之一& 27019将成为法师(从选举中)。

案例2: 我在localhost上设置了一个主副本:27017,在27018上创建了两个主副本。 27019以及27020上的仲裁者。所有这些都在同一组中。

With 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 **

1 个答案:

答案 0 :(得分:2)

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

可以安全地假设这是一种防范陈旧选举的安全措施。

您始终需要由数量不均匀的成员组成的副本集,以便在最坏的情况下,大多数原始成员都可以选择主要成员。因此,将仲裁器添加到由三个数据承载节点组成的副本集中不会产生任何值。