【问题标题】:PyMongo MongoClient replica set won't connectPyMongo MongoClient 副本集不会连接
【发布时间】:2017-06-13 10:26:33
【问题描述】:

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

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

pymongo.errors.ServerSelectionTimeoutError: ArbiterIP:27017: [WinError 10061] 无法建立连接,因为目标机器主动 拒绝它,PrimaryIP:27017: [WinError 10061] 无法连接 因为目标机器主动拒绝了,Secondary IP:27017: 超时

使用 MongoClient,如果我这样做:

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

,连接正常。当我这样做时

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

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

会不会与仲裁节点没有用户信息进行鉴权有关?

【问题讨论】:

    标签: mongodb pymongo bitnami mongodb-replica-set


    【解决方案1】:

    试一试:如果您连接 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

    【讨论】:

    • 在错误消息中,列出的 IP 是 db.isMaster() 中显示的主机 IP。在我的 python 代码中,我的“MyIP”是托管主节点的 VM 的 IP。当我尝试使用主机 IP 进行连接时,我会超时。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-01-14
    • 2013-07-25
    • 2020-10-13
    • 2016-02-05
    • 1970-01-01
    • 1970-01-01
    • 2011-12-20
    相关资源
    最近更新 更多