2016-06-10 64 views
1

我尝试在健康但大型的MongoDB数据库上从mongo shell执行db.repairDatabase()命令。它运行了大约10个小时,但仍然没有完成。无论好坏,我都会按Ctrl-C来取消它。MongoDB在中止db.repairDatabase()后锁定?如何解锁?

看起来群集已经处于某种锁定状态。喜欢“秀星展”所有失败,出现“操作超时”命令:

mongos> show dbs 
2016-06-10T09:38:10.179-0400 E QUERY [thread1] Error: listDatabases failed:{ "code" : 50, "ok" : 0, "errmsg" : "Operation timed out" } : 
[email protected]/mongo/shell/utils.js:25:13 
[email protected]/mongo/shell/mongo.js:62:1 
[email protected]/mongo/shell/utils.js:760:19 
[email protected]/mongo/shell/utils.js:650:15 
@(shellhelp2):1:1 

它一直是这样了约10个多小时,现在我杀了db.repairDatabase后()。

什么是从这恢复正确的方法?

我的集群信息:我在任何地方运行MongoDB 3.2.5。我有3个配置服务器,11个分片,每个分片是由2个节点和一个仲裁器组成的副本集。我有大约40个运行mongos实例的节点。 3个配置服务器仍然是3.0样式(尚未升级到复制集)。

回答

1

那么对于它的价值我是能够使群集回如下:

  1. 重新启动的所有mongos服务。
  2. 重新启动所有mongod仲裁者。
  3. 为所有3个配置服务器重新启动mongod。
  4. 从我的11个分片的每个副本集中重新启动1个节点的mongod。
  5. 从我的11个分片的每个副本集中为其他1个节点重新启动mongod。

步骤1至4没有解决任何问题。

但是,当我运行第5步后,我能够再次使用所有的数据库。事情现在似乎恢复正常。