MongoError:在replicaset中找不到主要内容(Mongoose使用内部地址替换gcloud上的外部IP地址)

时间:2016-12-23 19:46:58

标签: mongoose google-compute-engine node-mongodb-native

(交叉发布https://github.com/Automattic/mongoose/issues/4834

这是mongodb - 3.4.0的最新版本(mongo:来自docker的最新版本),我在谷歌计算引擎上安装了一个mongo集群。每个mongo服务器都有externalinternal 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。

如果我的分析正确并且我们了解问题的解决方法,请告诉我。

1 个答案:

答案 0 :(得分:2)

收到Mongodb nodejs原生驱动团队的回复(来自Christian Amor Kvalheim)。

这是预期的行为,replicaset配置是replicaset的规范源,并且是驱动程序用于连接,监视和发现新成员的行为。如果您不进行可解析,则需要修改主机文件以包含它们以进行本地DNS解析。

http://mongodb.github.io/node-mongodb-native/2.2/reference/faq/