Mongodb pymongo副本集客户端连接是否支持自动故障转移?
我使用mongo cli创建了以下mongo副本集:Mongodb pymongo副本集客户端连接是否支持自动故障转移?,mongodb,pymongo,Mongodb,Pymongo,我使用mongo cli创建了以下mongo副本集: > config = { _id:"repset", members:[{_id:0,host:"192.168.0.1:27017"},{_id:1,host:"192.168.0.2:27017"},{_id:2,host:"192.168.0.3:27017"}]} > rs.initiate(config); 所有mongo服务器都正常运行 >>> import pymongo >>>
> config = { _id:"repset", members:[{_id:0,host:"192.168.0.1:27017"},{_id:1,host:"192.168.0.2:27017"},{_id:2,host:"192.168.0.3:27017"}]}
> rs.initiate(config);
所有mongo服务器都正常运行
>>> import pymongo
>>> from pymongo import MongoClient
>>> servers = ["192.168.0.1:27017", "192.168.0.2:27017", "192.168.0.3:27017"]
>>> MongoClient(servers)
>>> xc = MongoClient()
>>> print xc
MongoClient('localhost', 27017)
>>> print xc.database_names()
[u'test_repsets', u'local', u'admin', u'test']
在我杀死本地mongodb服务器后,它向我显示连接超时错误:
pymongo.errors.ServerSelectionTimeoutError: localhost:27017: [Errno 111] Connection refused
虽然我定义了mongodb服务器,但似乎没有自动故障转移。
我想知道pymongo是否自动处理故障转移,或者如何正确处理这种情况
提前感谢您。在Pymongo 3.x中,您可能需要明确说明要连接到的复制集。我知道Pymongo3.x改变了它处理服务器阵列的一些方式。我从您的代码中关于副本连接和自动故障切换的部分中得到了这一点: MongoClient(服务器) 上述行未指定给任何变量。它应该分配给变量(在您的情况下,您再次创建了导致错误的实例) 请添加以下行
>>> #MongoClient(servers) # remove this line
>>> #xc = MongoClient() # remove this line
>>> xc = MongoClient(servers) # add this line
您使用的是哪个版本的pymongo?pymongo==3.0.3我想我犯了一个错误:xc=MongoClient()应该是xc=MongoClient(服务器)。这并不是为什么OP会出错,并且没有回答这个问题。您应该阅读OP注释。答案是肯定的,pymongo支持自动故障切换。不过,我建议用另一种方式连接到他的副本集,这可能会缓解问题。服务器阵列已更改Pymongo 3.x中的行为。然而,OP发现了他的问题,因为一个编码错误被遗漏了。