Mongo副本集无法find主要

我find了一个使用docker设置mongo副本的教程,我的命令是

创buildnetworking集群

sudo docker network create curator-cluster 

创build一个名为mongo1的特定容器,将27018映射到27017里面,设置名称是rs0

 sudo docker run \ -p 27018:27017 \ --name mongo1 \ --net curator-cluster \ mongo mongod --replSet rs0 

我的configuration,

 config = { "_id" : "rs0", "members" : [{"_id" : 0, "host" : "mongo1:27017"}, {"_id" : 1, "host" : "mongo2:27017"}, {"_id" : 2, "host" : "mongo3:27017"}] } 

最后,我创build了3个容器

 5949826d5bb1 mongo "/entrypoint.sh mongo" 22 hours ago Up 22 hours 0.0.0.0:27020->27017/tcp mongo3 dcf37866dbb6 mongo "/entrypoint.sh mongo" 22 hours ago Up 22 hours 0.0.0.0:27019->27017/tcp mongo2 14202f76089f mongo "/entrypoint.sh mongo" 22 hours ago Up 22 hours 0.0.0.0:27018->27017/tcp mongo1 

sudo docker exec -it mongo1 mongo

 MongoDB shell version: 3.2.9 connecting to: test Server has startup warnings: 2016-09-22T10:24:29.655+0000 I CONTROL [initandlisten] 2016-09-22T10:24:29.655+0000 I CONTROL [initandlisten] ** WARNING: /sys/kernel/mm/transparent_hugepage/enabled is 'always'. 2016-09-22T10:24:29.655+0000 I CONTROL [initandlisten] ** We suggest setting it to 'never' 2016-09-22T10:24:29.655+0000 I CONTROL [initandlisten] 2016-09-22T10:24:29.655+0000 I CONTROL [initandlisten] ** WARNING: /sys/kernel/mm/transparent_hugepage/defrag is 'always'. 2016-09-22T10:24:29.655+0000 I CONTROL [initandlisten] ** We suggest setting it to 'never' 2016-09-22T10:24:29.655+0000 I CONTROL [initandlisten] rs0:PRIMARY> 

看起来我现在有一个小学,并尝试插入一些容器(如mongo1),MongoDB可以很好地同步。

现在我试图用命令连接到bryan数据库上(注意10.145.168.151是我的IP)

 mongo --host rs0/10.145.168.151:27018,10.145.168.151:27019,10.145.168.151:27020 bryan 

我的结果是

 MongoDB shell version: 2.6.9 connecting to: rs0/10.145.168.151:27018,10.145.168.151:27019,10.145.168.151:27020/bryan 2016-09-23T16:46:18.819+0800 starting new replica set monitor for replica set rs0 with seeds 10.145.168.151:27018,10.145.168.151:27019,10.145.168.151:27020 2016-09-23T16:46:18.819+0800 [ReplicaSetMonitorWatcher] starting 2016-09-23T16:46:18.819+0800 changing hosts to rs0/mongo1:27017,mongo2:27017,mongo3:27017 from rs0/10.145.168.151:27018,10.145.168.151:27019,10.145.168.151:27020 2016-09-23T16:46:18.820+0800 getaddrinfo("mongo2") failed: Name or service not known 2016-09-23T16:46:18.821+0800 getaddrinfo("mongo1") failed: Name or service not known 2016-09-23T16:46:18.822+0800 getaddrinfo("mongo3") failed: Name or service not known 2016-09-23T16:46:18.822+0800 Error: connect failed to replica set rs0/10.145.168.151:27018,10.145.168.151:27019,10.145.168.151:27020 at src/mongo/shell/mongo.js:148 exception: connect failed 

如果我使用Nodejs(mongoose),我得到MongoError: no primary found in replicaset

我认为问题是getaddrinfo("mongo2") failed: Name or service not known所以我的问题是如何解决这个问题。 谢谢

对不起,迟了答复,但我遇到了这个问题,不同的vnets和缺less的主机名。 如果我使用ips连接,那么我的印象是这样,那么集群会使用ips进行响应。 我错了。 即使连接ips,主机名也必须可用。

但是,如果你愿意的话,你可以把主机名的实现改成ips(尽pipe这是所有的客户端)

1)连接到mongo cli

2) cfg = rs.conf()

你会看到cfg.members[0].host"hostname:27017"

3)为每个条目做cfg.members[i].host = "ip(i):27017"

例如: cfg.members[0].host = "10.0.0.1:27017"

4) rs.reconfig(cfg)你应该得到响应: { "ok" : 1 }

现在你应该可以连接。 这有一些警告,所以一定要考虑后果(如果改变等等)