【发布时间】:2017-08-09 08:59:32
【问题描述】:
使用最近的客户端库(pymongo 3.4、mongodb (nodejs) 2.2.27),我无法通过复制连接到我的 mongodb 服务器。 副本集配置包含服务器的内部 ips 或主机名。我收到以下错误:
pymongo.errors.ServerSelectionTimeoutError: mongodbdriver20151129-arbiter-1:27017: [Errno 8] nodename nor servname provided, or not known,mongodbdriver20151129-instance-1:27017: [Errno 8] nodename nor servname provided, or not known,mongodbdriver20151129-instance-2:27017: [Errno 8] nodename nor servname provided, or not known
或
pymongo.errors.ServerSelectionTimeoutError: 10.0.0.5:27017: timed out,10.0.0.6:27017: timed out,10.0.0.4:27017: timed out
我目前正在通过更改副本集配置以包含服务器的外部 ips 来解决它,但我想这会减慢服务器间的通信。如何使用原始 rsconf 从外部位置连接到我的服务器?
[update] 注意:我正在尝试连接到服务器的外部 ip,并且在使用 pymongo 2.8 或 mongodb (js) 2.1.4 时效果很好
[更新] 关注chat 了解更多详情/示例
【问题讨论】:
-
10.x.x.x是“私有 IP 范围”。我认为您的副本集成员实际上不在您的本地网络上,这可以解释超时错误。看起来你要么需要公共地址,要么需要类似于 SSH 隧道的东西 -
对于相同的副本配置,通过旧版本的库工作连接。我正在连接到外部 ip,例如
mongodb://13.85.**.***:27017/,但新库然后尝试连接到 rsconfig 中指定的主机,而不是指定的 ips。 -
这是设计使然。除非您的“客户端应用程序”和“副本集成员”实际上都能够在同一个网络上(至少在路由规则方面),否则节点之间的配置需要外部地址。情况一直如此。您在“客户端连接”中指定的只是一个种子列表。没有指定不同的内部和外部用法这样的事情。从来没有。
-
那么为什么我在为同一个副本集使用旧版本(客户端库)时没有收到错误?
-
那么这个例子在哪里呢?要么举一个例子,否则就承认你错了。这里没有任何证据表明情况会如此,我所知道的所有文档都不是这样。
标签: mongodb pymongo replicaset mongodb-replica-set