将成员添加到MongoDb上的副本集

时间:2012-01-22 19:22:35

标签: mongodb master-slave database

我正在尝试使用MongoDb创建副本集,服务器主机名为:

主机名 主机名-1 主机名-2

其中每个都有/ etc / hosts文件中详细说明的所有相关主机名(它们都是运行Ubuntu 10.04 64位)

当我在一个节点上执行rs.initiate时,一切似乎都开始好了。运行rs.status();所示:

{
    "set" : "vega",
    "date" : ISODate("2012-01-22T19:15:55Z"),
    "myState" : 1,
    "members" : [
        {
            "_id" : 0,
            "name" : "hostname:27017",
            "health" : 1,
            "state" : 1,
            "stateStr" : "PRIMARY",
            "optime" : {
                "t" : 1327254848000,
                "i" : 1
            },
            "optimeDate" : ISODate("2012-01-22T17:54:08Z"),
            "self" : true
        }
    ],
    "ok" : 1
}

当我尝试将新成员添加到副本集时,问题出现了。我使用命令rs.add(hostname-1);我收到以下错误:

{
    "assertion" : "need most members up to reconfigure, not ok : vega-1:27017",
    "assertionCode" : 13144,
    "errmsg" : "db assertion failure",
    "ok" : 0
}

我尝试了多种使用主机名,IP地址的组合,无论是否有端口号,我总是遇到同样的问题。主机名正在解析,我已经尝试过ping hostname-1,它运行正常。

是否有人对可能导致此问题的原因有任何想法?

不幸的是,在Mongo文档中没有在真实场景中设置副本集的示例,只在同一台机器上使用三个实例,这显然是无用的。

提前感谢您的帮助!

6 个答案:

答案 0 :(得分:14)

在配置中删除它:

bind_ip = 127.0.0.1

该选项目前与mongodb副本集不兼容。

答案 1 :(得分:10)

当您添加尚未“up”的节点时,会发生该错误。听起来“主机名-1”无法访问(不在/ etc / hosts中,没有DNS),或者它可以访问,但没有运行带有replSet配置参数集的mongodb

答案 2 :(得分:3)

{
    "errmsg" : "exception: need most members up to reconfigure, not ok : server2:27017",
    "code" : 13144,
    "ok" : 0
}

我在Mongo 2.4.9中遇到了上述错误。我的错误是我没有在新副本成员的mongo配置中指定replSetrs.add("server2:27017")之后效果很好。

答案 3 :(得分:2)

  

不幸的是,在Mongo文档中没有在真实场景中设置副本集的示例,只在同一台机器上使用三个实例,这显然是无用的。

同意,这很糟糕。该示例应该从文档中完全删除。

还有另一种启动副本集的方法,即使用rs.configure()命令。您还可以一次指定所有三个节点,然后发出rs.inititiate()

See here以获取在启动之前指定所有节点的示例。

See here了解有关各种命令的详细信息。

答案 4 :(得分:2)

答案 5 :(得分:0)

在将第二个节点添加到节点1之前,您可能需要检查mongodb是否在第二个节点上运行。如果它正在运行rs.add()然后检查rs.status()。