so have cluster of 3 mongo replica sets. primary (master) @ rs1, while rs2 , rs3 secondaries. however, primary may change, example, rs2 may primary @ given time due configuration issue. therefore, need able connect appropriate replica set. let's @ rs1=10.1.1.1
, rs2=10.1.1.2
, rs3=10.1.1.3
. here's how i'm connecting 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)
however if, explained, replica set primary changes let's rs3
unable connect 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
how can specify other replica sets mongoclient
?
a connection replica set can made using mongoclient() constructor, specifying 1 or more members of set, along 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')
as long server connect online @ initially, mongoclient find members of replicaset , automatically attempt find new primary on failover.