3

我有 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 中会这样?

4

2 回答 2

3

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

因为分片集群的所有组件都必须通过网络相互通信,所以对使用 localhost 地址有特殊限制:

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

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

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

于 2013-06-15T13:11:58.997 回答
2

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

于 2014-06-04T19:06:29.983 回答