2012-07-30 40 views
0

在我的MongoDB分片集群中,我使用db.runCommand({ removeshard: "shard3" })命令删除了一个分片“shard3”,但它只是将分片置于抽取模式,这将永远不会结束,三天过去了。碎片“shard3”的所有块移动到“shard1”或“shard2”,但应用程序读取请求可以使用它来查询数据。所以我想知道分片的哪个过程现在或如何诊断这个问题?使用`removeshard`去除分片,但效果不好

回答

2

您可能有一个数据库使用shard3作为其主分片,请检查输出db.printShardingStatus()以查看每个数据库所在的位置。

一旦你弄清楚它是哪个数据库,move it to a different shardmovePrimary命令。然后再次运行removeShard,你应该是好去。

+0

确定shard3上有一个未分级的数据库测试,shard3不是主分片,然后我放下“test”数据库并重新运行removeshard命令。删除“shard3”是成功的。从文件中,“不要运行movePrimary直到完成排水碎片”。但是我们的程序也使用带有3个节点replicaset的“shard3”来查询数据。为什么不通过mongos服务器将APP请求路由到其他可用的分片? – Popgo 2012-07-30 02:04:00

+1

你需要运行movePrimary完成在DB是在主的情况下排出。如果你看看'removeshard'的结果并且看到''chunks':NumberLong(0)'但是''dbs“:NumberLong('除0之外的某个数字')'你可能有一个DB,其主分区是分片要删除,可能会得到运行movePrimary即使'removeshard'并没有说“排水完成”。查看关于[mongodb-user](https://groups.google.com/d/topic/mongodb-user/CiOAjdlMOT8/discussion)的讨论以获取更多信息: – 2012-07-30 08:00:29