2

我们在生产中的 mongodb 集群是一个分片集群,有 3 个副本集,每个副本集有 3 个服务器,当然还有另外 3 个配置服务器。

我们还有 14 个直接连接到 mongoDb 的网络服务器抛出运行在每个网络服务器(客户端)中的 mongos 进程。

整个集群每分钟接收 5000 次插入。

有时,当我们的 java 应用程序想要对 mongoDb 执行操作时,我们会开始从我们的应用程序中获取异常。

这是堆栈跟踪:

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 进程的问题,但我想找到这个问题的最终解决方案。不得不在半夜重新启动所有东西并不是一个令人愉快的解决方案。

When this error happens, maybe 2 or 3 another webservers got the same error at the same time, so I imagine that there is a problem in the entire mongoDb cluster, no a problem in a single isolated webserver.

Does anyone know why mongo returns a writeback error? and how to fix it?

I'm using mongoDb 2.2.0.

Thanks in advance.

Fer

4

1 回答 1

0

我相信您会看到写回错误“泄漏”到 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 分支是什么,都可以解决您的问题。

于 2013-05-06T15:00:04.550 回答