mongo集群移除shard操作

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/baiyun8789/article/details/86484496

1,登录mongos
移除shard必须在mongos节点执行命令
我们先查一下当前的shard
在这里插入图片描述
开始移除: db.runCommand( {removeshard:“shard1”} )
在这里插入图片描述
看到如图的报错。原因下面说
2,先做主节点切换
一个库如果开启了分片,他是有一个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
3,偶尔看一下
迁移动作会进行的比较慢,以免给集群带来过大的压力。
在这里插入图片描述
在进行中,返回的信息中remain显示还有多少数据需要移动
最后:
在这里插入图片描述

在这里插入图片描述
看shards的列表里也没有shard1了
现在可以关闭shard1的实例了

最后还有一步,官方建议要完成后要刷新一下mongs的路由数据,以防mongos路由到错误的地址
方法:重启所有的mongos节点,或者所有mongos节点执行下
mongos> db.adminCommand(“flushRouterConfig”)
{ “flushed” : true, “ok” : 1 }

这个命令会清空本地的路由表,然后从config节点重新拉取数据生成新的路由表。

猜你喜欢

转载自blog.csdn.net/baiyun8789/article/details/86484496