背景
重新組網,需要對現有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:'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修改結束,
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/1129.html
標籤:NoSQL
上一篇:編譯安裝Memcached并使用systemctl管理
下一篇:實作在專案啟動后或是生成物件后完成某些執行的功能實作CommandLineRunner介面和注解@PostConstruct
