一、背景
mongos01 192.168.1.101 20000
mongos02 192.168.1.102 20000
mongos03 192.168.1.103 20000
configServer01 192.168.1.101 20001
configServer02 192.168.1.102 20001
configServer03 192.168.1.103 20001
shard01-1 192.168.1.104 20002
shard01-2 192.168.1.105 20002
arbitor01 192.168.1.101 30002
shard02-1 192.168.1.105 20003
shard02-2 192.168.1.104 20003
arbitor02 192.168.1.102 30003
#######################################
shard03-1 192.168.1.106 20004
shard03-2 192.168.1.107 20004
shard04-1 192.168.1.107 20005
shard04-2 192.168.1.106 20005
某个mongoDB 分片集群,有2个分片 shard01 和 shard02 ,每个分片复制集为 主-从-仲裁架构,每个分片的主从跑在物理机上,仲裁跑在虚拟机上。
现在 shard01 和 shard02 所在的物理机释放因为性能容量问题需要释放,要将 shard01 shard02 上的数据迁平滑移到 shard03 和 shard04 。
二、迁移方案
以将 shard01 数据迁移到 shard03 为例:
- 将 shard03-1 shard03-2 作为从 shard01 的从节点角色加入到 shard01 复制集,组成 shard01-1(主) 、shard01-2(从)、 arbitor01(仲裁)、 shard03-1(从)、 shard03-2(从) 1主3从1仲裁的 复制集
- 待 shard03-1、 shard03-2 从 主节点 将数据同步完成后,调高 shard03-1 的节点优先级,使之成为该复制集的主节点,此时复制集为
shard01-1(从) 、shard01-2(从)、 arbitor01(仲裁)、 shard03-1(主)、 shard03-2(从)
- 从集群中移除 shard01-1(从) 、shard01-2(从)
shard02 上数据迁移到shard04 同理。
迁移后环境信息:
mongos01 192.168.1.101 20000
mongos02 192.168.1.102 20000
mongos03 192.168.1.103 20000
configServer01 192.168.1.101 20001
configServer02 192.168.1.102 20001
configServer03 192.168.1.103 20001
shard03-1 192.168.1.106 20004
shard03-2 192.168.1.107 20004
arbitor01 192.168.1.101 30002
shard04-1 192.168.1.107 20005
shard04-2 192.168.1.106 20005
arbitor02 192.168.1.102 30003
三、涉及的关键操作
增加新节点:
## 添加主/从/仲裁:
> use admin
> rs.add('xx.xx.xx.xx:XX')
> rs.add('xx.xx.xx.xx:XX','arbiterOnly:true')
修改节点优先级:
> use admin
> rs.conf();
> cfg=rs.conf();
# 根据实际members id 降主节点优先级
> cfg.members[0].priority=1
# 根据实际members id 升从节点优先级
> cfg.members[4].priority=2
> rs.reconfig(cfg);
移除节点
> use admin
> rs.remove('xx.xx.xx.xx:XXX')
mongoDB 分片集群,当后端分片的地址发生变化时,mongos 能自动感应后端分片的变化
可以通过 sh.status() 中显示查看,意味着无需人工介入修改,实现了自动路由。
四、参考
mongoDB移除分片
https://www.cnblogs.com/bethal/p/5549531.html
mongoDB将原有副本集数据迁移到分片存储
https://blog.csdn.net/houhongyun/article/details/78543160
Remove Shards from an Existing Sharded Cluster
https://www.mongodb.com/docs/v4.2/tutorial/remove-shards-from-cluster