为什么我不能使用本地运行的mongod服务器的IP地址将其添加到mongodb复制集

时间:2013-06-11 06:48:05

标签: mongodb

我有3个mongod服务器在不同端口上本地运行,如下面的命令

mongod.exe --port 27017 --replSet rs0 --dbpath C:\data\db1 --smallfiles --oplogSize 128

mongod.exe --port 27018 --replSet rs0 --dbpath C:\data\db2 --smallfiles --oplogSize 128

mongod.exe --port 27019 --replSet rs0 --dbpath C:\data\db3 --smallfiles --oplogSize 128

这将在本地启动三个mongoDB服务器。

现在要配置复制集,我使用了以下命令

rsconf = { _id : rs0,
           members: [
                      {_id:1, host:"localhost:27017"}
                    ]
         }

然后开始

rs.initiate(rsconfig)

现在添加其他成员

rs.add({_id:2, host: "localhost:27018"})

可以正常工作,但以下

rs.add({_id:2, host: "10.212.71.116"})

抛出异常 -

   {
        "errmsg" : "exception: can't use localhost in repl set member names exce
pt when using it for all members",
        "code" : 13393,
        "ok" : 0
}

我是mongoDB的新手,因此对我来说使用IP地址(对于localhost)比使用localhost更合适。为什么在mongoDB中这样呢?

2 个答案:

答案 0 :(得分:3)

在浏览mongodb分片的文档时,我发现了以下语句

由于分片群集的所有组件必须通过网络相互通信,因此对使用localhost地址有一些特殊限制:

如果使用“localhost”或“127.0.0.1”作为主机标识符,则必须对集群中的任何MongoDB实例的所有主机设置使用“localhost”或“127.0.0.1”。这适用于addShard的host参数和mongos --configdb运行时选项的值。如果将localhost地址与远程主机地址混合使用,MongoDB将产生错误。

页面上的“http://docs.mongodb.org/manual/core/sharded-cluster-architectures/#sharding-requirements-infrastructure

这意味着当您在测试环境中并且不想添加localhost以外的主机时,您可以使用localhost的方法,否则更喜欢使用IP地址

答案 1 :(得分:2)

我遇到了同样的问题。在rs.initiate()查看此命令的打印结果中的me字段后。这是您的计算机的名称。对我来说是Apollo-17:27001。拥有此信息会添加其他2台服务器:> rs.add("Apollo-17:27002")等确保一切正常:在控制台中,您会看到{ "ok" : 1 }。就是这样。