2016-06-07 83 views
2

所以我有一个3 mongo副本集的集群。主(主)位于rs1,而rs2和rs3是辅助。 但是,主节点可能会发生变化,例如,由于某些配置问题,rs2可能是任何给定时间的主节点。因此,我需要能够连接到适当的副本集。 假设他们在rs1=10.1.1.1,rs2=10.1.1.2rs3=10.1.1.3。下面是我如何连接到蒙戈:连接到MongoDB副本集 - pymongo

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那么我将无法连接到蒙戈:

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

回答

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的所有成员,并自动尝试找到故障转移功能的新的主。