mongodb - PyMongo MongoClient 副本集无法连接

标签 mongodb pymongo bitnami mongodb-replica-set

一些背景知识:我使用 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 为何这样做的更多信息:

https://github.com/mongodb/specifications/blob/master/source/server-discovery-and-monitoring/server-discovery-and-monitoring.rst#clients-use-the-hostnames-listed-in-the-replica-set-config-not-the-seed-list

关于mongodb - PyMongo MongoClient 副本集无法连接,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41899056/

相关文章:

amazon-web-services - 如何在 bitnami 和 AWS 上运行静态站点?

python - 如何使用 Python 为 Mongo 创建全局唯一的 GUID/UUID 系统?

mongodb - 在mongodb中查找具有最大值的不同文档

python - 如何在 Pymongo 中获取输入

wordpress - Google Cloud 上的每个 WordPress 实例都需要一个虚拟机实例吗?

laravel - 在 Laravel Sail 8.0 环境中安装 Jenssegers/MongoDB

node.js - mongoosejs findByIdAndUpdate 最好的方法

node.js - 语法错误 : Unexpected token U in JSON at position 0 at JSON. 在 angular8 中解析

mongodb - 在 go 中同时使用相同的 mgo session

tomcat - COPY 和 ADD 在 Dockerfile 中不起作用