(交叉发布https://github.com/Automattic/mongoose/issues/4834)
这是mongodb - 3.4.0
的最新版本(mongo:来自docker的最新版本),我在谷歌计算引擎上安装了一个mongo集群。每个mongo服务器都有external
和internal
IP address
。
我可以使用相同的nodejs代码连接到各个mongo节点。但当我同时收集IP地址(mongodb:// IP-ADDR1,IP-ADDR2)时,我发现'没有发现主要错误'。
从日志看起来,mongodb连接到URL中的每个服务器并获取拓扑相关的数据结构(ismaster),如下所示,
ismaster [{“hosts”:[“10.60.4.5:27017”,“10。 60.4.6:27017 “],” 的setName “:” RS0" , “setVersion”:4 “ismaster”:假, “次要”:真, “主”: “10.60.4.5:27017","me”: “10。 60.4.6:27017" , “lastWrite”:{ “OPTIME”:{ “TS”: “6367309576328445953”, “T”:1}, “lastWriteDate”: “2016-12-23T14:53:07.000Z”}, “米 axBsonObjectSize “:16777216,” maxMessageSizeBytes “:48000000,” maxWriteBatchSize “:1000,” LOCALTIME “:” 2016-12-23T14:53:13.7 21Z”, “maxWireVersion”:5 “minWireVersion”:0, “readOnly的”:假, “OK”:1}]
这里看到ismaster.me
与用于调用connect命令的IP-ADDR
不同(ismaster.me是内部IP地址)。之后,mongo从种子列表中删除原始IP地址,如下所示:
[WARN-ReplSet:9532] 1482504793904种子列表服务器已删除到期 其地址104.197.115.7:27017与其ismaster.me不匹配 地址10.60.4.6:27017 {type:'warn'
最后,这会导致'no primary found in replicaset
'
更长的日志详细信息发布在链接 - https://github.com/Automattic/mongoose/issues/4834
TIA。
如果我的分析正确并且我们了解问题的解决方法,请告诉我。
答案 0 :(得分:2)
收到Mongodb nodejs原生驱动团队的回复(来自Christian Amor Kvalheim)。
这是预期的行为,replicaset配置是replicaset的规范源,并且是驱动程序用于连接,监视和发现新成员的行为。如果您不进行可解析,则需要修改主机文件以包含它们以进行本地DNS解析。
http://mongodb.github.io/node-mongodb-native/2.2/reference/faq/