AutoReconnectexception“主已改变”
在这里理解正确的方法有些麻烦。
我有一个与三个成员(标准的主从奴隶)mongodb副本集的连接。 当主人保持一致时,一切工作正常。
pymongo.Connection(['host1:27017','host2:27018','host3:27019']).database_test
出于某种原因,当副本设置主要步骤closures时,这会开始抛出一个autoreconnectexception, 即使在select了新的主节点后也不会消失。
现在我意识到,这个例外需要被抓住和处理,很可能等待新的小学被选举。 我所遇到的问题似乎是,一旦select了新的小学,它根本就不在乎。 这个“主人已经改变”的例外不断涌现。
用__dict__
打印连接显示所有三个主机。
我试过把replicaset
kwarg传递给连接,但是这是一个意外的论点。
这种联系是不是有理由不开始质疑新的小学呢?
编辑:
显然现在在部署服务器上也出现了同样的问题。 如果主服务器发生更改,autoreconnectexception将被抛出,即使在select了新的主服务器之后也不会消失。
Pymongo是2.2版本和mongodb版本2.0.2。 改变在pymongo代码(mongouri与主机列表)中定义连接的方式不起作用。 恢复服务的唯一方法是rs.stepDown()
其他主机,直到原始主服务器再次成为主服务器。
你描述的行为是一个错误。 最好的行动方式是确保有一个logging的错误,并从你的问题链接到它。 由于问题已经有一年多的时间了,我预计这个bug会被closures(查看jira.mongodb.org/browse/SERVER-4405看看是否适用)。
如果升级到MongoDB 2.2或更高版本,问题应该消失。
- 自动压缩mongodb中删除的空间?
- 用Node.js和MongoDB存储密码
- 为什么错误mongod死了,但子系统locking和Linux上的日记文件的可用空间不足?
- DynamoDB相对于其他NoSQL数据库有哪些优缺点?
- 如何在Node.js中最好地创build一个RESTful API
- 找不到模块'../build/Release/bson'] code:'MODULE_NOT_FOUND'} js-bson:无法加载c ++ bson扩展,使用纯JS版本
- 将数据库从mysql转换到mongoDb
- MongoDB stats()函数是否返回位或字节?
- 在谈论MongoDB vs Cassandra时,“面向文档”与“键值”是什么意思?