主從復制是MongoDB最常用也是最簡單的復制操作。常用於數據備份和故障修復等。
下面這個圖就是最簡單的主從復制的服務器架構
我將以實驗的方式來實現MongoDB的主從復制
實驗環境:windows操作系統(一台機器啟動多個MongoDB數據庫),MongoDB 2.4
說明:
1.MongoDB以配置文件的形式啟動
2.以執行保存的bat文件代替每次輸入CMD中輸入命令
步驟:
1.配置主節點並啟動,端口為10001,下圖為配置的文件結構
其中config.cnf的內容為
dbpath=D:\mongodb\test\copy\10001\Data
bind_ip=127.0.0.1
port=10001
master=true
用startup.bat啟動主節點:mongod -f config.cnf
用shell.bat啟動shell:mongo 127.0.0.1:10001
其中master參數為true說明這台是主節點
2.配置從數據庫,端口為10002
config.cnf的內容為
dbpath=D:\mongodb\test\copy\10002\Data
bind_ip=127.0.0.1
port=10002
slave=true
source=127.0.0.1:10001
用startup.bat啟動從節點:mongod -f config.cnf
用shell.bat啟動shell:mongo 127.0.0.1:10002
slave參數設置從節點,source從數據庫對應的主節點的地址
3.下面就來做下驗證,在10001主節點上的person數據庫添加集合baseinfo,並添加一條文檔
這個時候再來10002從節點查詢,就可以看到這條同樣的數據已經復制過來了。
4.其他參數
--only 從節點配置,只復制特定某個數據庫
--autoresync 從節點配置,如果主節點與從節點數據不同,則自動重新同步。配置這個節點可以給運行了一段時間的主節點加上一個新節點,則這個新節點會把之前的主節點數據全部同步過來,而不是從現在這個時間同步。
--slavedelay 從節點配置,從數據庫延遲同步主數據庫的時間
--fastsync 從節點配置,以主節點的數據庫快照啟動從節點,可以加快啟動速度。
--oplogsize 主節點配置,主節點oplog大小,主節點會把數據庫操作的日志寫在oplog中,從節點參考oplog做復制操作,可以根據自身情況調節日志大小。如果不指定oplogsize大小,mongod將指配5%的可用磁盤空間給他,32位機最小是50M,64位機最小是1G。
動態添加刪除主從節點
先看看從節點的對於主節點的配置在哪,在從節點的local數據庫的sources集合中,查看信息如下:
現在再啟動一台普通的節點,不設置任何主從,端口設為10003
dbpath=D:\mongodb\test\copy\10003\Data
bind_ip=127.0.0.1
port=10003
slave=true
啟動后,動態的把10003加入到主從架構中,形成如下的結構
在10003的shell中執行下面腳本即可。
use local
db.sources.insert({"host":"127.0.0.1:10001"})
這樣10003就作為10001的從節點了
刪除主從關系就用db.sources.remove({"host":"127.0.0.1:10001"})
主節點往從節點轉移
永久的轉移一個損壞的和不可用的主節點A到從節點B,有以下步驟:
1.關閉A節點
2.停止B節點的Mongod
3.對B節點的dbpath目錄下的文件進行備份和移動
注:刪除local.*是不可撤銷的。執行此步驟非常謹慎。
4.在B節點上用--master參數重啟Mongod
調換主節點和從節點
有一個主節點A和一個從節點B,如果想調換他們的角色,請按下面的步驟,這里假設A是健康的,可更新的可用的
如果A是不是健康的,但硬件是好的(停電,服務器崩潰等),跳過步驟1和2,並在第8步用B的文件取代所有的文件。
如果A是不是健康的,硬件是不好的,將A替換為一台新機器。可以按照上段中的說明。
1.暫停在A上使用fsync命令
2.確定B是在同步節點A
3.關閉B節點
4.從B的DBPATH目錄備份和移動的所有數據文件,並刪除現有的數據local.sources。
5.用master選項啟動B
6.往B中寫入數據,用oplog設置新的同步開始時間點
7.關閉B,當重啟時B就有新的一組本地數據
8.關閉A,用備份B的dbpath目錄文件復制到A的dbpath中
9.用master選項啟動B
10.用通常slave選項啟動A,但要包括fastsync參數