`
LJ你是唯一LT
  • 浏览: 238713 次
社区版块
存档分类
最新评论

mongodb移除分片

阅读更多
MongoDB的Shard集群来说,添加一个分片很简单,AddShard就可以了。
但是缩减集群(删除分片)这种一般很少用到。由于曙光的某服务器又挂了,所以我们送修之前必须把它上面的数据自动迁移到其他Shard上。

1、执行RemoveShard命令
1 db.runCommand( { removeshard: "your_shard_name" } )
2
3 { msg : "draining started successfully" , state: "started" , shard :"mongodb0" , ok : 1 }
上面这句会立即返回,实际在后台执行。
2、查看迁移状态
我们可以反复执行上面语句,查看执行结果。
1 db.runCommand( { removeshard: "your_shard_name" } )
2
3 { msg: "draining ongoing" , state: "ongoing" , remaining: { chunks: 42, dbs : 1 }, ok: 1 }
从上面可以看到,正在迁移,还剩下42块没迁移完。
当remain为0之后,这一步就结束了。
3、移出非Shard数据

1 db.runCommand( { movePrimary: "myapp", to: "mongodb1" })
这次就不是立即返回了,需要很久,然后会返回如下:
1 { "primary" : "mongodb1", "ok" : 1 }
4、最后的清理
上面步骤都完成后,还需要再执行一次RemoveShard,清理残余数据。
1 db.runCommand( { removeshard: "mongodb0" } )
执行成功后,会如下结果:
1 { msg: "remove shard completed succesfully" , stage: "completed", host: "mongodb0", ok : 1 }
显示completed后,就可以安心的关闭mongod的进程了。


--如果要移除的分片正好是某一个表的primary,就会报错无法移除,那么就先进行如下操作:
mongos> use admin
switched to db admin
mongos> db.runCommand({moveprimary:"testdb",to:"shard0001"})  --将主移动到另一个分片上
{ "primary " : "shard0001:192.168.12.104:27019", "ok" : 1 }

mongos> db.runCommand({moveprimary:"test",to:"shard0001"})
{ "primary " : "shard0001:192.168.12.104:27019", "ok" : 1 }


mongos> db.runCommand({removeshard:"192.168.12.104:27017"})   --这样就可以成功移除
{
"msg" : "removeshard completed successfully",
"state" : "completed",
"shard" : "shard0000",
"ok" : 1
}
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics