我有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中这样呢?
答案 0 :(得分:3)
在浏览mongodb分片的文档时,我发现了以下语句
由于分片群集的所有组件必须通过网络相互通信,因此对使用localhost地址有一些特殊限制:
如果使用“localhost”或“127.0.0.1”作为主机标识符,则必须对集群中的任何MongoDB实例的所有主机设置使用“localhost”或“127.0.0.1”。这适用于addShard的host参数和mongos --configdb运行时选项的值。如果将localhost地址与远程主机地址混合使用,MongoDB将产生错误。
这意味着当您在测试环境中并且不想添加localhost以外的主机时,您可以使用localhost的方法,否则更喜欢使用IP地址
答案 1 :(得分:2)
我遇到了同样的问题。在rs.initiate()
查看此命令的打印结果中的me字段后。这是您的计算机的名称。对我来说是Apollo-17:27001
。拥有此信息会添加其他2台服务器:> rs.add("Apollo-17:27002")
等确保一切正常:在控制台中,您会看到{ "ok" : 1 }
。就是这样。