Node.js Mongo复制集可以';找不到主要的

Node.js Mongo复制集可以';找不到主要的,node.js,mongodb,mongoose,database-replication,mongodb-replica-set,Node.js,Mongodb,Mongoose,Database Replication,Mongodb Replica Set,我找到了一个教程来设置,我的命令是 创建网络群集 sudo docker network create curator-cluster 创建一个名为mongo1的特定容器,将27018映射到27017内部,并将名称设置为rs0 sudo docker run \ -p 27018:27017 \ --name mongo1 \ --net curator-cluster \ mongo mongod --replSet rs0 我的配置 config = { "_id" : "rs0", "

我找到了一个教程来设置,我的命令是

创建网络群集

sudo docker network create curator-cluster
创建一个名为
mongo1
的特定容器,将27018映射到27017内部,并将名称设置为
rs0

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

config = {
"_id" : "rs0",
"members" : [{"_id" : 0, "host" : "mongo1:27017"},
{"_id" : 1, "host" : "mongo2:27017"},
{"_id" : 2, "host" : "mongo3:27017"}]
}
最后,我创建了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)

我的结果是

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:replicaset中找不到主节点


我认为问题在于
getaddrinfo(“mongo2”)失败:名称或服务未知
,所以我的问题是如何修复这个问题。谢谢你

很抱歉回复太晚,但是我遇到了这个问题,因为有不同的vnet和丢失的主机名。我的印象是,如果我使用ips进行连接,那么集群将使用ips进行响应。我错了。即使您使用IP连接,主机名也必须可用

但是,如果您愿意,可以将实现从主机名更改为ips(但这适用于所有客户端)

1) 连接到mongo cli

2)
cfg=rs.conf()

您将看到
cfg.members[0].host
as
“hostname:27017”

3) 对于每个条目,请执行
cfg.members[i].host=“ip(i):27017”

示例:
cfg.members[0].host=“10.0.0.1:27017”

4)
rs.reconfig(cfg)
您应该得到以下答复:
{“确定”:1}


现在你应该可以连接了。这是有警告的,所以一定要考虑后果(如果ips发生变化等)

你检查过教程中的第一条评论了吗?“…它失败,因为它无法解析主机上的主机名mongo1-3”。解决方案也很详细,对您有效吗?我指的是这个网站:谢谢,我错过了这个评论谢谢。这有帮助。
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