连接到MongoDB副本集pymong

2024-06-17 09:14:44 发布

您现在位置:Python中文网/ 问答频道 /正文

所以我有一个由3个mongo副本集组成的集群。主(主)在rs1,而rs2和rs3是次要的。 但是,主服务器可能会发生变化,例如,由于某些配置问题,rs2可能在任何给定的时间成为主服务器。因此,我需要能够连接到适当的副本集。 假设它们位于rs1=10.1.1.1rs2=10.1.1.2和{}。以下是我如何连接到Mongo:

mongoserver_uri = "mongodb://{0}:{1}@{2}:{3}/admin".format(
                    username, password, host, port)
self.log.info("------- Mongo Server URI: %s --------" % mongoserver_uri)
self.client = pymongo.MongoClient(host=mongoserver_uri, ssl=True,
                                  ssl_cert_reqs=ssl.CERT_NONE)

但是,如前所述,如果副本集primary更改为rs3,那么我将无法连接到Mongo:

^{pr2}$

如何将其他副本集指定给MongoClient?在


Tags: self服务器hostsslmongo时间副本集群
2条回答

在您的MongoClient中,您需要告诉pymongo您正在连接到一个副本集,以便它能够发现集合https://api.mongodb.com/python/current/examples/high_availability.html#id1中的所有成员

From the docs

A connection to a replica set can be made using the MongoClient() constructor, specifying one or more members of the set, along with the replica set name.

mongoserver_uri = "mongodb://{0}:{1}@{2}:{3}/admin".format(
                    username, password, host, port)
self.log.info("   - Mongo Server URI: %s     " % mongoserver_uri)
self.client = pymongo.MongoClient(host=mongoserver_uri, ssl=True,
                                  ssl_cert_reqs=ssl.CERT_NONE,
                                  replicaset='name_of_set')

只要您连接到的服务器最初是联机的,MongoClient就会找到复制集的所有成员,并在故障转移时自动尝试查找新的主服务器。在

相关问题 更多 >