背景
重新组网,需要对现有MongoDB分片集群服务器的IP进行更改,因此也需要对MongoDB分片集群的IP也进行相应的更新,而MongoDB分片集群的IP修改不能单纯的通过配置来进行,需要一番折腾后才能正常更新,这里对整个MongoDB集群的IP修改过程做下记录,希望对有同样需求的小伙伴有所帮助。
原有集群配置如下
![a0322a4aaa3bb4693b84ee0c0bc0d312.png](https://i-blog.csdnimg.cn/blog_migrate/727b0203dd92f19f26005afe10497280.jpeg)
这里的端口分配如下所示:
![39c7a48ef3853c873de99fcfc333dc20.png](https://i-blog.csdnimg.cn/blog_migrate/7307e48a9121f6c793c831d51d2c2622.jpeg)
IP修改对应关系如下:
![0f5b3c8e45c1adfa252d04b966db9c61.png](https://i-blog.csdnimg.cn/blog_migrate/b0e5e7048be2e6e7fa5b872107af544e.jpeg)
更改IP步骤
升级过程是先升级UConfig 服务,再分别升级三个 Shard 配置,最后修改一个 mongos 的路由。当然了,在开始之前需要确保MongDB分片集群都已经停掉了。
停掉的步骤也很简单。 ps -ef | grep mongo 找到对应的线程id,然后 kill 掉即可。
修改config 节点的IP
- 用如下命令,以 standlone 模式启动一个 Config 服务
/usr/mongod/bin/mongod --port 21000 --dbpath=/usr/mongod/data
- 新打开一个shell,连接上这个config服务
/usr/mongod/bin/mongo --port 21000
- 进入到 local 数据库查看 replset 集合,并修改对应的host
use localdb.system.replset.find()cfg = db.system.replset.findOne({_id: 'configs'})cfg.members[0].host = "172.168.7.11:21000"cfg.members[1].host = "172.168.7.16:21000"cfg.members[2].host = "172.168.7.21:21000"db.system.replset.update({_id: 'configs'}, cfg)db.system.replset.find()
- 上面最后一行是把修改好的内容查出来以便于查看下修改是否成功。
- 按照同样的步骤以 standlone 模式启动启动另外两个config节点,并修改另外两个config服务节点的信息。
- 停掉这三个以 standlone 模式启动的config服务节点
- 分别按照正常集群模式启动这三个config节点
/usr/mongod/bin/mongod -f /usr/mongod/conf/config.conf
- 看到如下所示,说明选举成功了。
- 登录到 primary 节点,修改分片信息
use configcfg=db.shards.findOne({_id:'shard1'})cfg.host="shard1/172.168.7.11:27001,172.168.7.16:27001"db.shards.update({_id:'shard1'},cfg)cfg = db.shards.findOne({_id: 'shard2'})cfg.host = "shard2/172.168.7.16:27002,172.168.7.21:27002"db.shards.update({_id: 'shard2'}, cfg)cfg = db.shards.findOne({_id: 'shard3'})cfg.host = "shard3/172.168.7.11:27003,172.168.7.21:27003"db.shards.update({_id: 'shard3'}, cfg)
- 至此config服务节点的修改完成,接下来进行shard节点的修改
修改shard分片的IP信息
- 以 standlone 模式启动分片1,然后登录进去
/usr/mongod/bin/mongod --port 27001 --dbpath=/usr/mongod/shard1//usr/mongod/bin/mongo --port 27001
- 切换到 admin 数据库的 version 集合查看下 config 配置信息,如果有 _id:shardIdentity 的数据则进行下更新,当然这里如果有 _id:minOpTimeRecovery 的数据也需要更新
use admindb.system.version.find()db.system.version.update({"_id" : "shardIdentity"},{"$set":{"configsvrConnectionString" : "configs/172.168.7.11:21000,172.168.7.16:21000,172.168.7.21:21000"}})db.system.version.update({"_id" : "minOpTimeRecovery"},{"$set":{"configsvrConnectionString" : "configs/172.168.7.11:21000,172.168.7.16:21000,172.168.7.21:21000"}})
- 修改复制集的配置信息,复制集的配置信息都保存在 local 库的 system.replset 集合中
use localcfg = db.system.replset.findOne({_id: 'shard1'})cfg.members[0].host="172.168.7.11:27003"cfg.members[1].host="172.168.7.16:27003"cfg.members[2].host="172.168.7.21:27003"db.system.replset.update({_id:'shard3'},cfg)db.system.replset.findOne({_id: 'shard3'})
- 重复上述步骤分别对shaed2,shard3进行ip的更改
- 最后按照集群的模式启动你的三个分片即可。
/usr/mongod/bin/mongod -f /usr/mongod/conf/shard1.conf
修改mongos服务的路由信息
- 用vim打开mongos的配置文件,修改对应的 configserver 配置项为最新的configderver地址
vim /usr/mongod/conf/mongos.conf
![72aa77364811e33f2af033cd38743114.png](https://i-blog.csdnimg.cn/blog_migrate/ed5426a979c3e5395590450591d8c7a3.jpeg)
- 按集群模式启动mongos服务即可
/usr/mongod/bin/mongos -f /usr/mongod/conf/mongos.conf
- 登录验证下即可
/usr/mongod/bin/mongo --port 20000
至此,MongoDB分片集群IP修改结束。