python操作mongodb副本集(mongodb高可用)

发布时间 2023-07-17 12:06:37作者: 蕝戀

https://pymongo.readthedocs.io/en/stable/examples/high_availability.html#

pymongo比较”智能“,只要你连接的时候指定副本集中的任意一个或者多个成员都可以连接到整个副本集中的成员。

# 下面这几种方式,都可以!!
# 传递给 MongoClient() 的地址称为种子。
# 只要至少有一个种子在线,**MongoClient 就会发现副本集中的所有成员,并确定哪个是当前的主节点,哪些是辅助节点或仲裁节点**。
# 每个种子必须是单个 mongod 的地址。**不支持多宿主和循环 DNS 地址,这点一定要注意,别傻乎乎自己搞个DNS轮询什么的。**
>>>MongoClient('localhost')
MongoClient(host=['localhost:27017'], ...)

>>>MongoClient('localhost', replicaset='myrs')
MongoClient(host=['localhost:27017'], replicaset='myrs', ...)

>>>MongoClient('localhost:27018', replicaset='myrs')
MongoClient(['localhost:27018'], replicaset='myrs', ...)

>>>MongoClient('localhost', 27019, replicaset='myrs')
MongoClient(['localhost:27019'], replicaset='myrs', ...)

>>>MongoClient('mongodb://localhost:27017,localhost:27018/')
MongoClient(['localhost:27017', 'localhost:27018'], ...)

>>>MongoClient('mongodb://localhost:27017,localhost:27018/?replicaSet=myrs')
MongoClient(['localhost:27017', 'localhost:27018'], replicaset='myrso', ...)

实例: 连接到副本集

import time

import pymongo

if __name__ == '__main__':
    # 初始化客户端
    # 只指定任意一个节点的
    mongo_client = pymongo.MongoClient(
        host="127.0.0.1",
        port=27017,
    )
    
    # 只指定其中2个节点的IP
    mongo_client = pymongo.MongoClient(
        host=['127.0.0.1:27017', '127.0.0.1:27018'],
    )
    
    # 只指定其中2个节点的IP,并且指定副本集的名称
    mongo_client = pymongo.MongoClient(
        host=['127.0.0.1:27017', '127.0.0.1:27018'],
        replicaset='myrs'
    )

    # 延迟一下,因为MongoClient 构造函数是非阻塞的:
    # 当客户端使用后台线程连接到副本集时,构造函数立即返回。
    # 请注意,如果您创建客户端并立即打印其 nodes 属性的字符串表示形式,则列表最初可能为空。
    # 如果稍等一下,MongoClient 会发现整个副本集:
    time.sleep(1)

    # 打印所有节点
    print(mongo_client.nodes)
    
    # 关闭连接
    mongo_client.close()