mongodb - 自动重新连接异常 "master has changed"

在这里理解正确的方法有些困难。

我有一个连接到具有三个成员(标准主-从-从)的 mongodb 副本集。当主节点保持一致时,连接一切正常。

pymongo.Connection(['host1:27017','host2:27018','host3:27019']).database_test

由于某种原因,当副本集主节点关闭时,这会开始引发自动重新连接异常,该异常即使在选出新的主节点后也不会消失。

现在我知道这个异常需要被捕获和处理,很可能是通过等待新的主节点被选举出来。我遇到的问题似乎是,一旦选择了新的主节点,它就根本不在乎。这个“主人已经改变”的异常不断出现。

使用 __dict__ 打印连接会显示所有三个主机。

我尝试将 replicaset kwarg 传递给连接,但这是一个意外的参数。

这种连接不只是开始查询新的主节点有什么原因吗?

编辑:

同样的问题现在显然出现在部署服务器上。如果主节点发生变化并且即使在新的主节点被选举后也永远不会消失,则会引发自动重新连接异常。

Pymongo 是 2.2 版,而 mongodb 是 2.0.2 版。更改在 pymongo 代码中定义连接的方式(mongouri 与主机列表)没有效果。恢复服务的唯一方法是 rs.stepDown() 其他主机,直到原来的主机再次成为主主机。

最佳答案

您描述的行为是一个错误。最好的做法是确保记录了一个错误并从您的问题链接到它。由于这个问题已经将近一年了,我希望这个 bug 会被关闭(检查 jira.mongodb.org/browse/SERVER-4405 看看它是否适用)。

如果您升级到 MongoDB 2.2 或更高版本,问题应该会消失。

关于mongodb - 自动重新连接异常 "master has changed",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8506753/

相关文章:

python - 从字符串中删除每个非 utf-8 符号

c# - 使用官方 C# 驱动程序在 Mongo DB 中进行更新插入

mongodb - 如何从 MongoDB 中删除 system.profile 集合?

arrays - 查询 MongoDB 以匹配数组中的第一项

node.js - Mongoose 密码哈希

mongodb - 如何停止在 mongodb 集合中插入重复文档

mongodb - 插入后如何在 PyMongo 中获取对象 ID?

c# - 如何使用 MongoDB 的 C# 驱动程序指定 Order 或 Sort?

session - node.js + express.js : session handling

mongodb - 尝试连接到 mongodb 服务器时无法识别 mongo 命令