一些背景知识:我使用 Bitnami 在 Azure 上启动了一个 3 节点 Mongo 集群(1 个仲裁器),每个 mongod 托管在单独的虚拟机上。我已确认副本集存在,并且每个节点都能够相互连接。我已经确认,当我关闭主节点时,辅助节点就会启动。当主节点返回时,它会再次担任主节点。
我的问题是,在指定副本集时,我无法使用 MongoClient 连接到我的 MongoDB 副本集。我会收到此错误:
pymongo.errors.ServerSelectionTimeoutError: ArbiterIP:27017: [WinError 10061] No connection could be made because the target machine actively refused it,PrimaryIP:27017: [WinError 10061] No connection could be made because the target machine actively refused it,SecondaryIP:27017: timed out
使用 MongoClient,如果我这样做:
connection = MongoClient('MyIP1:27017', w=2)
,连接正常。当我这样做时
connection = MongoClient('MyIP1:27017', w=2, replicaset="repsetname")
,这就是我收到错误的时候。
是否与仲裁节点没有用户信息进行认证有关?
最佳答案
尝试一下:如果您连接 shell 并执行 db.isMaster(),您在配置中看到的主机名是否与您传递给 PyMongo 的主机名(例如“MyIP”)相同?
听起来当您传递“replicaset=”时,PyMongo 会从 isMaster 响应中获取主机名并连接到这些主机名而不是 MyIP,但是根据您的副本集的配置方式,该主机名集不可用。
有关 PyMongo 为何这样做的更多信息:
关于mongodb - PyMongo MongoClient 副本集无法连接,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41899056/