mongoDb集群移除shard的操作
Posted Y叔的笔记
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了mongoDb集群移除shard的操作相关的知识,希望对你有一定的参考价值。
在使用mongoDB过程中,我们经常做的是向集群中添加shard,这个操作介绍的很多。但是有时候因为某些情况需要移除某个shard。下面介绍一下操作:
1,登录mongos
移除shard必须在mongos节点执行命令
我们先查一下当前的shard
2,开始移除: db.runCommand( {removeshard:"shard1"} )
看到如图的报错。原因下面说
3,做主节点切换
一个库如果开启了分片,他是有一个primary shard的。不是所有分片都是平等的。
如果要移除的恰好是主分片,必须在迁移完数据后,手动执行 movePrimary命令
指定新的主分片
去config库下
mongos> use config
switched to db config
mongos> db.databases.find()
可以看到,我现在有开启分片,primary是shard1的,也有没开启分片,primary是shard1的
然后去admin库下
mongos> use admin
switched to db admin
mongos> db.runCommand({"moveprimary":"app","to":"shard2"})
{ "primary" : "shard2:shard2/10.135.7.56:20000,10.135.7.58:20000", "ok" : 1 }
注意,这里要注意,官方有警告:
Warning
Do not perform this procedure until you have finished draining the shard.
要等能迁移的shards数据都移干净了,即下图中的remaining chunks是0了,再操作这个。
这个过程根据数据量的大小不同,会非常慢。不要急
对所有报错的库都执行一下
然后再继续去removeshard
4,结束善后
迁移动作会进行的比较慢,以免给集群带来过大的压力。
在进行中,返回的信息中remain显示还有多少数据需要移动
最后:
看shards的列表里也没有shard1了
现在可以关闭shard1的实例了
方法:重启所有的mongos节点,或者所有mongos节点执行下
mongos> db.adminCommand("flushRouterConfig")
{ "flushed" : true, "ok" : 1 }
这个命令会清空本地的路由表,然后从config节点重新拉取数据生成新的路由表。
以上是关于mongoDb集群移除shard的操作的主要内容,如果未能解决你的问题,请参考以下文章
MongoDB——MongoDB分片集群(Sharded Cluster)