【问题标题】:How to find primary host of MongoDB replica and access in Python如何在 Python 中查找 MongoDB 副本的主要主机和访问
【发布时间】:2019-04-30 08:19:34
【问题描述】:

我有一个主要主机为mongo1.ppshein.net,辅助主机为mongo1.ppshein.net,仲裁器为mongo3.ppshein.net,并按照AWS EC2 中所示配置了MongoDB 副本。而在每个 MongoDB 配置文件中,bindIP 是它的主机名和 App Server 主机。

要从 python 访问该 MongoDB 副本,我想我可以使用以下 code-sn-p,

>>> from pymongo import MongoClient
>>> db = MongoClient('mongodb://serverA:27017, serverB:27017, serverC:27017/?replicaSet=foo').db_name

但问题是如果serverA 出现故障/不健康,我不确定上面的 code-sn-p 是否可以正常工作。这就是为什么我很想知道如何获取 MongoDB 的主主机而不是在连接字符串中添加多个主机?

【问题讨论】:

    标签: mongodb amazon-ec2 mongodb-replica-set


    【解决方案1】:

    一旦您连接到副本集,驱动程序将始终将您重新连接到主节点(如果可以选择一个)(即您有一个法定节点)。您在参数中提供节点列表的唯一原因是防止您尝试连接到已关闭节点的情况。如果该节点已关闭,您将获得服务器超时。

    服务器发现和监控协议的完整规范是here

    【讨论】:

    • 在我的代码 sn-p 上方,例如如果 serverA:27017 关闭,MongoDB 将选择 serverB:27017 作为主要主机。到时候serverA:27017在连接字符串中就没有用了,我需要把serverA:27017从连接字符串中去掉吗?
    • 期望所有服务器最终都会重新加入副本集。例如,如果您的程序每分钟运行一次,并且您只指定了 1 个服务器,那么随着时间的推移,当程序运行导致服务器超时时,该服务器很可能会关闭。指定副本集的多个成员只是额外的冗余。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2022-01-19
    • 2016-10-03
    • 1970-01-01
    • 2018-05-31
    • 1970-01-01
    • 2020-09-25
    • 2021-10-10
    相关资源
    最近更新 更多