我使用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是否自动处理故障转移,或者如何正确处理这种情况?
提前谢谢。
答案 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