【问题标题】:Does pymongo replica set client connection support auto fail over?pymongo 副本集客户端连接是否支持自动故障转移?
【发布时间】:2015-10-24 21:48:03
【问题描述】:

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

提前谢谢你。

【问题讨论】:

  • 你用的是什么版本的pymongo?
  • pymongo==3.0.3 我想我在这里犯了错误:xc = MongoClient() 应该是 xc = MongoClient(servers)。然后它工作正常。

标签: mongodb pymongo


【解决方案1】:

在 Pymongo 3.x 中,您可能需要明确说明您要连接的副本集。我知道 Pymongo 3.x 改变了它处理一系列服务器的方式。我从Pymongo API 得到了这个关于副本连接和自动故障转移的信息

【讨论】:

  • 这不是 OP 出现错误并且不回答问题的原因。您应该阅读 OP 评论。
  • 答案是肯定的,pymongo 支持自动故障转移。但是,我建议使用另一种方法来连接到他的副本集,这可能会缓解问题。服务器阵列在 Pymongo 3.x 中改变了行为。然而,由于遗漏了编码错误,OP 发现了他的问题。
【解决方案2】:

在您的代码中:

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

请添加以下行

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

【讨论】:

    猜你喜欢
    • 2011-01-14
    • 2012-02-27
    • 2012-02-02
    • 1970-01-01
    • 2014-01-09
    • 2015-10-31
    • 1970-01-01
    • 1970-01-01
    • 2016-10-10
    相关资源
    最近更新 更多