在这里理解正确的方法时遇到一些麻烦。
我有一个与三个成员(标准主从奴隶)的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()
其他主机,直到原始主服务器再次成为主服务器。
答案 0 :(得分:2)
您描述的行为是一个错误。最好的做法是确保记录错误并从您的问题链接到它。由于这个问题已经差不多一年了,我期待这个bug被关闭(请查看jira.mongodb.org/browse/SERVER-4405,了解它是否适用)。
如果升级到MongoDB 2.2或更高版本,问题就会消失。