Replication

是否可以在我的設置的副本集上有 2 個仲裁器?

  • September 5, 2022

我正在嘗試從 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

我建議的方法是:

  1. 在 rs1VM1 (10.1.0.1:27017) 上創建一個仲裁器,即 10.1.0.1:27018 - 仲裁器
  2. 刪除replicaset1上舊的arbiter rs2VM1 (10.1.0.10:27018)
  3. 關閉輔助然後升級二進製文件。在輔助設備上重新啟動 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)
  1. 一旦中學已經很好了。我將創建另一個仲裁器,它將位於 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)
  1. 現在我可以升級 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 的正常安裝程序,其中包含二進製文件。

從那裡開始,我所做的方法非常簡單。

  1. 升級仲裁器,次要然後主要

提取 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 &

然後升級過程很順利

引用自:https://dba.stackexchange.com/questions/316377