在 MongoDB 上使用複製進行遷移

在 MongoDB 上使用複製進行遷移

我對使用 Mongo 上的副本集功能作為在機器之間平滑遷移的方法很感興趣。我的 Mongo 資料庫目前是一個獨立實例。我意識到推薦的做法是讓三個獨立的實例作為副本集運作。但我們的可用性要求目前還不夠高,不足以證明運行三個獨立實例的成本是合理的。話雖這麼說,我想盡可能避免停機。

當對伺服器進行重大更改時,我理想的做法是啟動一台具有所需更改的新伺服器(可能是從原始伺服器克隆的,或者可能是從頭開始構建的,並進行了所需的更改)。該伺服器託管 mongo 資料庫。

在測試這個新伺服器時,我希望它成為一個隱藏的輔助伺服器。這樣它就有了數據,但實際上並沒有回應客戶端的請求。一旦我對新伺服器感到滿意,我就想進行切換,因此新伺服器是主要伺服器,而舊伺服器是隱藏的輔助伺服器。這樣,舊伺服器將繼續獲取數據,但不處理客戶端請求。如果偵測到問題,我可以再次翻轉主伺服器和輔助伺服器,將客戶端發送回舊伺服器。假設幾天後沒有問題,我可以關閉舊伺服器。

我的問題是:

  • 使用此方法可能會遇到什麼問題?
  • 它能否實現我的目標:將資料從一台伺服器移動到另一台伺服器(以及將客戶端從一台伺服器移動到另一台伺服器)並希望零停機時間?
  • 由於我可能想為將來的更改執行此操作,因此我可能會將新伺服器保留為具有 0 個成員的副本集。我意識到這並不能提供至少三個成員所提供的高可用性。但就這樣離開會有什麼壞處嗎?或者最好將其切換回獨立實例?

答案1

複製集中至少需要 3 個伺服器才能選出主伺服器。您可以使用現有伺服器、新伺服器以及在其中一台伺服器上執行的仲裁器作為第三台伺服器。您無法執行單一伺服器副本集。如果沒有主資料庫,您將無法執行任何寫入操作。

如果不停止/啟動 mongod 服務,就無法從獨立模式變更為複製集。您需要重新啟動 mongo--replSet replica_set_name或將該replSet=replica_set_name選項新增到您的 mongod.conf 中。

一旦同步,轉換回獨立的過程將是類似的(停止 mongo,刪除 replSet 配置,啟動 mongo)。

如果您的客戶端配置為“主要”作為讀取首選項,則您的任何讀取都不會轉到輔助節點(這通常是預設設置,因為輔助節點主要用於持久性,而不是水平擴展) 。

http://docs.mongodb.org/manual/tutorial/convert-standalone-to-replica-set/

相關內容