pymongo副本设置客户端连接是否支持自动故障转移?

时间:2015-08-02 20:25:47

标签: 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
>>> 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是否自动处理故障转移,或者如何正确处理这种情况?

提前谢谢。

2 个答案:

答案 0 :(得分:0)

在Pymongo 3.x中,您可能希望明确说明要连接的副本集。我知道Pymongo 3.x开辟了处理一系列服务器的一些方法。我从关于副本和自动故障转移的连接的Pymongo API中得到了这个

答案 1 :(得分:0)

在您的代码中:

MongoClient(服务器) 上面的行未分配给任何变量。它应该分配给变量(在您的情况下,您再次创建了导致错误的实例。)

请添加以下内容

>>> #MongoClient(servers)             # remove this line
>>> #xc = MongoClient()               # remove this line
>>> xc = MongoClient(servers)         # add this line