MongoDB最新4.2.7版本三分片叢集修改IP實操演練

依樂祝發表於2020-08-21

背景

重新組網,需要對現有MongoDB分片叢集伺服器的IP進行更改,因此也需要對MongoDB分片叢集的IP也進行相應的更新,而MongoDB分片叢集的IP修改不能單純的通過配置來進行,需要一番折騰後才能正常更新,這裡對整個MongoDB叢集的IP修改過程做下記錄,希望對有同樣需求的小夥伴有所幫助。

作者:依樂祝
原文地址:https://www.cnblogs.com/yilezhu/p/13536628.html

原有叢集配置如下

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修改對應關係如下:

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 節點,修改分片資訊

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:'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

  • 按叢集模式啟動mongos服務即可
/usr/mongod/bin/mongos -f /usr/mongod/conf/mongos.conf
  • 登入驗證下即可
/usr/mongod/bin/mongo --port 20000


至此,MongoDB分片叢集IP修改結束。

相關文章