MongoDB - 複製



複製是指跨多個伺服器同步資料的過程。複製提供冗餘並透過在不同資料庫伺服器上覆制多個數據副本提高資料可用性。複製保護資料庫免受單個伺服器丟失的影響。複製還允許您從硬體故障和服務中斷中恢復。使用資料的其他副本,您可以將一個專用於災難恢復、報告或備份。

為什麼要複製?

  • 為了確保您的資料安全
  • 高 (24*7) 資料可用性
  • 災難恢復
  • 維護(如備份、索引重建、壓縮)無停機時間
  • 讀取擴充套件(額外的讀取副本)
  • 副本集對應用程式透明

MongoDB 中的複製工作原理

MongoDB 透過使用副本集實現複製。副本集是一組託管相同資料集的mongod例項。在一個副本中,一個節點是主節點,它接收所有寫操作。所有其他例項(例如輔助節點)都應用來自主節點的操作,以便它們具有相同的資料集。副本集只能有一個主節點。

  • 副本集是由兩個或多個節點組成的一組(通常至少需要 3 個節點)。

  • 在一個副本集中,一個節點是主節點,其餘節點是輔助節點。

  • 所有資料都從主節點複製到輔助節點。

  • 在自動故障轉移或維護時,會為主要節點進行選舉,並選舉出一個新的主要節點。

  • 故障節點恢復後,它將再次加入副本集並作為輔助節點工作。

MongoDB 複製的典型圖示如下所示,其中客戶端應用程式始終與主節點互動,然後主節點將資料複製到輔助節點。

MongoDB Replication

副本集功能

  • N 個節點的叢集
  • 任何一個節點都可以為主節點
  • 所有寫操作都轉到主節點
  • 自動故障轉移
  • 自動恢復
  • 主節點的一致性選舉

設定副本集

在本教程中,我們將把獨立的 MongoDB 例項轉換為副本集。要轉換為副本集,請執行以下步驟:

  • 關閉已執行的 MongoDB 伺服器。

  • 透過指定 --replSet 選項啟動 MongoDB 伺服器。以下是 --replSet 的基本語法:

mongod --port "PORT" --dbpath "YOUR_DB_DATA_PATH" --replSet "REPLICA_SET_INSTANCE_NAME"

示例

mongod --port 27017 --dbpath "D:\set up\mongodb\data" --replSet rs0
  • 它將在埠 27017 上啟動名為 rs0 的 mongod 例項。

  • 現在啟動命令提示符並連線到此 mongod 例項。

  • 在 Mongo 客戶端中,發出命令rs.initiate()以啟動一個新的副本集。

  • 要檢查副本集配置,請發出命令rs.conf()。要檢查副本集的狀態,請發出命令rs.status()

向副本集新增成員

要向副本集新增成員,請在多臺機器上啟動 mongod 例項。現在啟動一個 mongo 客戶端併發出命令rs.add()

語法

rs.add()命令的基本語法如下:

>rs.add(HOST_NAME:PORT)

示例

假設您的 mongod 例項名稱為mongod1.net,並且它在埠27017上執行。要將此例項新增到副本集中,請在 Mongo 客戶端中發出命令rs.add()

>rs.add("mongod1.net:27017")
>

只有在連線到主節點時才能將 mongod 例項新增到副本集中。要檢查您是否已連線到主節點,請在 mongo 客戶端中發出命令db.isMaster()

廣告