【问题标题】:Mongo Replica SetsMongo 副本集
【发布时间】:2013-09-08 17:49:06
【问题描述】:

我只是按照网上的说明设置了一个副本集。

我有这样的配置:

{
    "_id" : "rs0",
    "members" : [
        {
            "_id" : 0,
            "host" : "10.0.8.10:27017"
        }
    ]
}

我运行了 rs.initiate() 命令。没有问题。

好的,所以我去设置第二个节点,我做了同样的事情(当然使用不同的 IP)。 我再次运行 rs.initiate() 命令没有问题。

我运行了 rs.add 命令,提供了我的第一个实例的 IP/端口。没问题。

最后,我从另一个节点运行 rs.add 命令并引用前一个节点。 现在我明白了:

rs0:PRIMARY> rs.add("10.0.0.10:27017");
{
    "errmsg" : "exception: member 10.0.0.10:27017 has a config version >= to the new cfg version; cannot change config",
    "code" : 13341,
    "ok" : 0
}

这是什么意思?我该如何解决?两个节点都是从相同的 Mongo 版本创建的。

【问题讨论】:

  • 你没有从其他成员发起,这是问题

标签: mongodb replication


【解决方案1】:

对于任何给定的副本集,rs.initiate() 命令只能使用一次。您可以选择将集合的所有成员指定为命令的选项,如下所示:

rs.initiate({_id:'rs0', members:[{_id:0, host:'10.0.8.10:27017'},{_id:1, host:'10.0.0.10:27017'}]})

配置副本集后,您可以使用 rs.add() 添加新成员。如果您选择此方法,您将使用单个成员初始化集合,然后从 PRIMARY 执行 rs.add()。

rs.initiate({_id:'rs0', members:[{_id:0, host:'10.0.8.10:27017'}]})
rs.add('10.0.8.10:27017')

【讨论】:

    【解决方案2】:

    您不需要在另一个节点上运行rs.initiate()。将节点添加到配置后,在第一个节点上运行 rs.initiate() 将启动整个副本集。

    该错误是因为副本集已经使用您第二次运行rs.initiate()时设置的配置版本启动。

    【讨论】:

      猜你喜欢
      • 2016-06-05
      • 1970-01-01
      • 2017-02-01
      • 2021-06-12
      • 2021-03-13
      • 2018-03-18
      • 2013-03-30
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多