簡體   English   中英

連接到 MongoDB 副本集 - pymongo

[英]Connecting to a MongoDB replica set - pymongo

所以我有一個由 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

從文檔

可以使用 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 的所有成員,並在故障轉移時自動嘗試查找新的主服務器。

在您的 MongoClient 中,您需要告訴 pymongo 您正在連接到副本集,以便它可以發現集合中的所有成員https://api.mongodb.com/python/current/examples/high_availability.html#id1

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM