MongoDB 複製
複製是跨多個服務器同步數據的過程中。複製提供了冗餘和增加數據可用性與不同的數據庫服務器上的數據的多個副本,複製保護數據庫從一台服務器上的損失。複製也可以讓恢複硬件故障和服務中斷。額外的數據副本,可以奉獻一到災難恢複,報告,或備份。
為什麼要複製?
- 為了讓數據安全
- 高(24* 7)數據可用性
- 災難恢複
- 無停機維護(如備份,索引重建,壓實)
- 讀縮放(額外的副本讀取)
- 副本集對應用程序是透明
MongoDB中複製的工作原理
MongoDB 使用副本集達到複製。副本集是一組 mongod 實例,主機相同的數據集。副本中的一個節點,主節點接收所有的寫操作。在所有其他情況下,次要節點,適用於從主操作,以使它們具有相同的數據集。副本集隻能有一個主節點。
- 副本集是一組中的兩個或多個節點(一般至少3個節點是必需的)。
- 在副本中設置一個節點是主節點和剩餘節點都是次要的。
- 從主要到次要節點的所有數據複製。
- 自動故障轉移或維修的時候,選初級建立,並選出新的主節點。
- 失敗的節點恢複後,再加入副本集和作品作為輔助節點。
MongoDB 複製是一個典型的圖顯示在客戶端應用程序總是與主節點和主節點,然後將數據複製到二級節點。
副本集特點
- N個節點的群集
- 任何節點可以是主要的
- 所有的寫操作為主要的
- 自動故障轉移
- 自動恢複
- 主要的共識選擇
設置一個副本集
在本教學中,我們將mongod實例轉換成獨立的副本集。要轉換到副本設置遵循以下步驟:
- 關閉停止已經運行的MongoDB服務器。
現在啟動MongoDB服務器通過指定 --replSet 選項。 --replSet 基本語法如下:
mongod --port "PORT" --dbpath "YOUR_DB_DATA_PATH" --replSet "REPLICA_SET_INSTANCE_NAME"
例子
mongod --port 27017 --dbpath "D:set upmongodbdata" --replSet rs0
它會啟動一個mongod 實例名稱rs0 ,端口為27017。啟動命令提示符 rs.initiate(),並連接到這個mongod實例。在mongod客戶端執行命令rs.initiate()啟動一個新的副本集。要檢查副本集的配置執行命令rs.conf()。要檢查的狀態副本sete執行命令:rs.status()。
將成員添加到副本集
將成員添加到副本集,在多台機器上啟動mongod 實例。現在開始一個mongod 客戶和發出命令 rs.add().
語法:
rs.add()命令的基本語法如下:
>rs.add(HOST_NAME:PORT)
實例
假設mongod實例的名字是mongod1.net它運行端口為27017。這種情況下,到副本集執行的命令rs.add() 在mongod 客戶端。
>rs.add("mongod1.net:27017") >
可以添加mongod實例副本設置,隻有當連接到主節點。要檢查是否連接至初級或mongo 客戶端不執行命令db.isMaster()。