2

一些背景知识:我使用 Bitnami 在 Azure(1 个仲裁器)上启动了一个 3 节点的 Mongo 集群,每个 mongod 托管在单独的 VM 上。我已经确认副本集存在,并且每个节点都能够相互连接。我已经确认当我关闭我的主节点时,辅助节点会启动。当主节点返回时,它再次占据主位置。

我的问题是在指定副本集时我无法使用 MongoClient 连接到我的 MongoDB 副本集。我会收到这个错误:

pymongo.errors.ServerSelectionTimeoutError: ArbiterIP:27017: [WinError 10061] 由于目标机器主动拒绝,无法连接,PrimaryIP:27017: [WinError 10061] 由于目标机器主动拒绝,无法连接,SecondaryIP: 27017:超时

使用 MongoClient,如果我这样做:

connection = MongoClient('MyIP1:27017', w=2)

,它连接良好。当我做

connection = MongoClient('MyIP1:27017', w=2, replicaset="repsetname")

,那是我得到错误的时候。

是否与仲裁节点没有用于身份验证的用户信息有关?

4

1 回答 1

2

试一试:如果您连接 shell 并执行 db.isMaster(),您在配置中看到的主机名是否与您传递给 PyMongo 的主机名(如“MyIP”)相同?

听起来当您传递“replicaset =”时,PyMongo 从 isMaster 响应中获取主机名并连接到那些而不是 MyIP,但是您的副本集的配置方式,该组主机名不可用。

有关 PyMongo 为何如此行事的更多信息:

https://github.com/mongodb/specifications/blob/master/source/server-discovery-and-monitoring/server-discovery-and-monitoring.rst#clients-use-the-hostnames-listed-in-the-副本集配置不是种子列表

于 2017-01-27T16:57:55.950 回答