Replication
是否可以在我的設置的副本集上有 2 個仲裁器?
我正在嘗試從 4.4 > 5.0 升級 mongodb
我有 2 個獨立的副本集(replicaset1、replicaset2),它們在我們的站點上託管不同的平台。
replicaset1 setup: (mongodb version 4.4) rs1VM1 (10.1.0.1:27017) - PRIMARY rs1VM2 (10.1.0.2:27017) - SECONDARY rs2VM1 (10.1.0.10:27018) - ARBITER
replicaset2 setup: (mongodb version 4.4) rs2VM1 (10.1.0.10:27017) - PRIMARY rs2VM2 (10.1.0.11:27017) - SECONDARY rs1VM1 (10.1.0.1:27018) - ARBITER
我們碰巧將每個副本集的仲裁器放在另一個平台上,以便在我們的設置中至少提供一點 HA。
現在我只想從 4.4 > 5.0升級replicaset1
我建議的方法是:
- 在 rs1VM1 (10.1.0.1:27017) 上創建一個仲裁器,即 10.1.0.1:27018 - 仲裁器
- 刪除replicaset1上舊的arbiter rs2VM1 (10.1.0.10:27018)
- 關閉輔助然後升級二進製文件。在輔助設備上重新啟動 mongod
在此之後,設置將是
replicaset1 setup: (mongodb version 4.4) rs1VM1 (10.1.0.1:27017) - PRIMARY (mongod 4.4) rs1VM2 (10.1.0.2:27017) - SECONDARY (mongod 5.0) rs1VM3 (10.1.0.1:27018) - ARBITER (mongod 4.4)
- 一旦中學已經很好了。我將創建另一個仲裁器,它將位於 rs1VM2 (10.1.0.2:27018) 之後,設置將是
replicaset1 setup: rs1VM1 (10.1.0.1:27017) - PRIMARY (mongod 4.4) rs1VM2 (10.1.0.2:27017) - SECONDARY (mongod 5.0) rs1VM2 (10.1.0.2:27018) - ARBITER (mongod 5.0)
- 現在我可以升級 PRIMARY。執行rs.stepDown()然後db.shutdownServer(),然後將二進製文件升級到5.0然後重啟mongodb服務
replicaset1 setup: rs1VM1 (10.1.0.1:27017) - PRIMARY (mongod 5.0) rs1VM2 (10.1.0.2:27017) - SECONDARY (mongod 5.0) rs1VM2 (10.1.0.2:27018) - ARBITER (mongod 5.0)
這是可行的還是有更簡單的方法來解決這個問題
是的,你可以這麼做。但是,因為仲裁者沒有任何數據庫數據,所以沒有理由這樣做。只需將您的仲裁器升級到 5.0,然後將您的輔助節點升級到 5.0,當這些輔助節點是“最新的”時,降級主節點(它們成為輔助節點)並將最後的節點升級到 5.0。
看這裡!
我偏離了我原來的方法,我嘗試根據@Wernfried 的建議下載 tgz 而不是 mongodb 的正常安裝程序,其中包含二進製文件。
從那裡開始,我所做的方法非常簡單。
- 升級仲裁器,次要然後主要
提取 tgz 文件後,我只是將mongod指向了我提取 tgz 文件的新目錄。(其中包含更新的二進制mongod、mongo等)
sudo nohup mongod --port 27018--dbpath /datadrive/mongodb-arb --replSet rep1 --bind_ip 0.0.0.0 --keyFile /home/test/repkey &
然後升級過程很順利