mongoDb集群移除shard的操作

Posted Y叔的笔记

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了mongoDb集群移除shard的操作相关的知识,希望对你有一定的参考价值。

在使用mongoDB过程中,我们经常做的是向集群中添加shard,这个操作介绍的很多。但是有时候因为某些情况需要移除某个shard。下面介绍一下操作:

1,登录mongos

移除shard必须在mongos节点执行命令

我们先查一下当前的shard

2,开始移除: db.runCommand( {removeshard:"shard1"} )

mongoDb集群移除shard的操作

看到如图的报错。原因下面说

3,做主节点切换

一个库如果开启了分片,他是有一个primary shard的。不是所有分片都是平等的。

如果要移除的恰好是主分片,必须在迁移完数据后,手动执行 movePrimary命令

指定新的主分片

去config库下

mongos> use config
switched to db config
mongos> db.databases.find()

mongoDb集群移除shard的操作

可以看到,我现在有开启分片,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,结束善后

迁移动作会进行的比较慢,以免给集群带来过大的压力。

mongoDb集群移除shard的操作

在进行中,返回的信息中remain显示还有多少数据需要移动

最后:

看shards的列表里也没有shard1了

现在可以关闭shard1的实例了

方法:重启所有的mongos节点,或者所有mongos节点执行下

mongos> db.adminCommand("flushRouterConfig")

{ "flushed" : true, "ok" : 1 }

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


以上是关于mongoDb集群移除shard的操作的主要内容,如果未能解决你的问题,请参考以下文章

MongoDB——MongoDB分片集群(Sharded Cluster)

mongodb sharding集群搭建

mongodb3.2复制集和shard集群搭建

Mongodb中Sharding集群

『MongoDB』MongoDB高可用部署架构——分片集群篇(Sharding)

centos7搭建mongodb3.4.6集群