连接到MongoDB副本集 - pymongo

时间:2016-06-07 01:36:07

标签: python django mongodb

所以我有一组3个mongo副本集。主要(主)位于rs1,而rs2和rs3是次级。 但是,主要可能会发生变化,例如,由于某些配置问题,rs2可能在任何给定时间都是主要的。因此,我需要能够连接到适当的副本集。 假设它们位于rs1=10.1.1.1rs2=10.1.1.2rs3=10.1.1.3。以下是我连接到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)

但是,如果像解释的那样,副本集主要更改为让我们说rs3,那么我将无法连接到Mongo:

  File "/home/ubuntu/myproject/mongodb.py", line 165, in clear_collections
    collection.remove()
  File "/usr/local/lib/python2.7/site-packages/pymongo/collection.py", line 2258, in remove
    return self._delete(sock_info, spec_or_id, multi, write_concern)
  File "/usr/local/lib/python2.7/site-packages/pymongo/collection.py", line 916, in _delete
    codec_options=self.codec_options)
  File "/usr/local/lib/python2.7/site-packages/pymongo/pool.py", line 218, in command
    self._raise_connection_failure(error)
  File "/usr/local/lib/python2.7/site-packages/pymongo/pool.py", line 346, in _raise_connection_failure
    raise error
pymongo.errors.NotMasterError: not master

如何将其他副本集指定为MongoClient

3 个答案:

答案 0 :(得分:2)

From the docs

  

可以使用MongoClient()建立与副本集的连接   构造函数,指定集合的​​一个或多个成员,以及   副本集名称。

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将找到replicaSet的所有成员并自动尝试在故障转移时查找新的主服务器。

答案 1 :(得分:1)

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

答案 2 :(得分:0)

dbconnect = MongoClient('mongodb:// mongos01:27017,mongos02:27017,mongos03:27017 /?replicaSet = seplicaSetName',username ='username',password ='password',authSource ='dbname',authMechanism = 'SCRAM-SHA1')