我们生产的mongodb集群是一个分片集群,有3个副本集,每个集合3个服务器,当然还有3个配置服务器。
我们还有14个直接连接到mongoDb的Web服务器抛出在每个Web服务器(客户端)中运行的mongos进程。
整个群集每分钟接收5000次插入。
有时,当我们想要对mongoDb执行操作时,我们开始从java应用程序中获取异常。
这是stackTrace:
caused by com.mongodb.MongoException: writeback
com.mongodb.CommandResult.getException(CommandResult.java:100)
com.mongodb.CommandResult.throwOnError(CommandResult.java:134)
com.mongodb.DBTCPConnector._checkWriteError(DBTCPConnector.java:142)
com.mongodb.DBTCPConnector.say(DBTCPConnector.java:183)
com.mongodb.DBTCPConnector.say(DBTCPConnector.java:155)
com.mongodb.DBApiLayer$MyCollection.insert(DBApiLayer.java:270)
com.mongodb.DBApiLayer$MyCollection.insert(DBApiLayer.java:226)
com.mongodb.DBCollection.insert(DBCollection.java:147)
com.mongodb.DBCollection.insert(DBCollection.java:90)
com.mongodb.DBCollection$insert$0.call(Unknown Source)
如果我检查mongos进程抛出它提供的rest _status命令,则返回200OK。我们可以解决重新启动我们正在使用的tomcat并重新启动mongos进程的问题,但我想找到这个问题的最终解决方案。在半夜重启所有东西并不是一个快乐的解决方案。
当发生此错误时,可能有2或3个其他Web服务器同时出现相同的错误,因此我认为整个mongoDb集群中存在问题,单个隔离的Web服务器中没有问题。
有谁知道为什么mongo会返回写回错误?以及如何解决它?
我正在使用mongoDb 2.2.0。
提前致谢。
费尔
答案 0 :(得分:0)
我相信你看到Writeback错误“泄漏”到getLastError输出中,然后继续报告,即使有问题的操作没有错误。这是早期版本的MongoDB 2.2中的一个问题,并且已经修复,请参阅:
https://jira.mongodb.org/browse/SERVER-7958 https://jira.mongodb.org/browse/SERVER-7369 https://jira.mongodb.org/browse/SERVER-4532
在撰写此答案时,我建议使用2.2.4,但基本上是最新的2.2分支,以解决您的问题。