1. 程式人生 > >MongoDB最新4.2.7版本三分片叢集修改IP實操演練

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

### 背景 重新組網,需要對現有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` 服務 ```shell /usr/mongod/bin/mongod --port 21000 --dbpath=/usr/mongod/data ``` - 新開啟一個shell,連線上這個config服務 ```shell /usr/mongod/bin/mongo --port 21000 ``` - 進入到 `local` 資料庫檢視 `replset` 集合,並修改對應的`host` ```shell 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節點 ```shell /usr/mongod/bin/mongod -f /usr/mongod/conf/config.conf ``` - 看到如下所示,說明選舉成功了。 ![](https://img2020.cnblogs.com/blog/1377250/202008/1377250-20200820180209545-719858663.png) - 登入到 `primary` 節點,修改分片資訊 ```shell 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,然後登入進去 ```shell /usr/mongod/bin/mongod --port 27001 --dbpath=/usr/mongod/shard1/ /usr/mongod/bin/mongo --port 27001 ``` - 切換到 `admin` 資料庫的 `version` 集合檢視下 `config` 配置資訊,如果有 `_id:shardIdentity` 的資料則進行下更新,當然這裡如果有 `_id:minOpTimeRecovery` 的資料也需要更新 ```shell 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` 集合中 ```shell 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的更改 - 最後按照叢集的模式啟動你的三個分片即可。 ```shell /usr/mongod/bin/mongod -f /usr/mongod/conf/shard1.conf ``` #### 修改mongos服務的路由資訊 - 用vim開啟mongos的配置檔案,修改對應的 `configserver` 配置項為最新的configderver地址 ```shell vim /usr/mongod/conf/mongos.conf ``` ![](https://img2020.cnblogs.com/blog/1377250/202008/1377250-20200820180230189-225341943.png) - 按叢集模式啟動mongos服務即可 ```shell /usr/mongod/bin/mongos -f /usr/mongod/conf/mongos.conf ``` - 登入驗證下即可 ```shell /usr/mongod/bin/mongo --port 20000 ```
至此,MongoDB分片叢集IP修改