MongoDB最新4.2.7版本三分片集群修改IP实操演练

背景

从新组网,须要对现有MongoDB分片集群服务器的IP进行更改,所以也须要对MongoDB分片集群的IP也进行相应的更新,而MongoDB分片集群的IP修改不能单纯的经过配置来进行,须要一番折腾后才能正常更新,这里对整个MongoDB集群的IP修改过程作下记录,但愿对有一样需求的小伙伴有所帮助。html

做者:依乐祝
原文地址:http://www.javashuo.com/article/p-uhjhehwa-mx.htmlshell

原有集群配置以下

192.168.147.11 192.168.147.16 192.168.147.21
mongos mongos mongos
config server config server config server
shard server1 主节点 shard server1 副节点 shard server1 仲裁
shard server2 仲裁 shard server2 主节点 shard server2 副节点
shard server3 副节点 shard server3 仲裁 shard server3 主节点

这里的端口分配以下所示:数据库

mongos 20000
config server 21000
shard server1 27001
shard server2 27002
shard server3 27003

IP修改对应关系以下:vim

172.168.7.11 172.168.7.11
172.168.7.16 172.168.7.16
172.168.7.21 172.168.7.21

更改IP步骤

升级过程是先升级 Config 服务,再分别升级三个 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 local
db.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 节点,修改分片信息code

use config

cfg=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 admin
db.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 local
cfg = 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:'shard1'},cfg)
db.system.replset.findOne({_id: 'shard1'})
  • 重复上述步骤分别对shaed2,shard3进行ip的更改
  • 最后按照集群的模式启动你的三个分片便可。
/usr/mongod/bin/mongod -f /usr/mongod/conf/shard1.conf

修改mongos服务的路由信息

  • 用vim打开mongos的配置文件,修改对应的 configserver 配置项为最新的configderver地址
vim /usr/mongod/conf/mongos.conf

  • 按集群模式启动mongos服务便可
/usr/mongod/bin/mongos -f /usr/mongod/conf/mongos.conf
  • 登陆验证下便可
/usr/mongod/bin/mongo --port 20000


至此,MongoDB分片集群IP修改结束。server