MongoDB中缩减Shard集群(删除一个Shard)

对MongoDB的Shard集群来说,添加一个分片很简单,AddShard就可以了。

但是缩减集群(删除分片)这种一般很少用到。由于曙光的某服务器又挂了,所以我们送修之前必须把它上面的数据自动迁移到其他Shard上。

以下内容翻译自:http://docs.mongodb.org/manual/tutorial/remove-shards-from-cluster/

1、执行RemoveShard命令

db.runCommand( { removeshard: "your_shard_name" } )

{ msg : "draining started successfully" , state: "started" , shard :"mongodb0" , ok : 1 }

上面这句会立即返回,实际在后台执行。

2、查看迁移状态

我们可以反复执行上面语句,查看执行结果。

db.runCommand( { removeshard: "your_shard_name" } )

{ msg: "draining ongoing" , state: "ongoing" , remaining: { chunks: 42, dbs : 1 }, ok: 1 }

从上面可以看到,正在迁移,还剩下42块没迁移完。

当remain为0之后,这一步就结束了。

3、移出非Shard数据

如果你要删除的Shard分片恰好是primary,那么执行这一步,否则请跳过

db.runCommand( { movePrimary: "myapp", to: "mongodb1" })

这次就不是立即返回了,需要很久,然后会返回如下:

{ "primary" : "mongodb1", "ok" : 1 }

4、最后的清理

上面步骤都完成后,还需要再执行一次RemoveShard,清理残余数据。

db.runCommand( { removeshard: "mongodb0" } )

执行成功后,会如下结果:

{ msg: "remove shard completed succesfully" , stage: "completed", host: "mongodb0", ok : 1 }

显示completed后,就可以安心的关闭mongod的进程了。

Leave a Reply

Your email address will not be published.