標籤:style blog http ar color 使用 sp strong on
在使用MongoDB的時候,為了保證資料的安全,就要考慮資料備份和故障恢複了;同時出於效能的考慮,能夠進行讀寫分離肯定能提升資料庫效能。
所以,在這篇文章中進行複本集的介紹。複本集(Replica Set),就是有自動故障恢複能力的主從叢集。
複本集有一個主節點,同時有一個或多個備份節點。當主節點出現故障的時候,備份節點會通過投票的方式選擇出一個新的備份節點。
複本集初始化
下面通過一些具體的實踐感受一下複本集。
首先通過下面三個命令啟動三個mongodb伺服器。其中,"replSet"選項指定了複本集的名稱。
mongod.exe --dbpath="c:\mongodb\db\node1" --port=11111 --replSet myReplSet --oplogSize=50mongod.exe --dbpath="c:\mongodb\db\node2" --port=22222 --replSet myReplSet --oplogSize=50mongod.exe --dbpath="c:\mongodb\db\node3" --port=33333 --replSet myReplSet --oplogSize=50
通過伺服器的輸出可以看到,我們現在需要"rs.initiate()"來初始化複本集。
下面我們就進行複本集的初始化工作,主要以下步驟:
- 首先通過一個MongoDB shell執行"mongo –port=11111"串連到"port=11111"的伺服器上
- 然後定義配置資訊"myReplSet_config"
- 最後通過"rs.initiate(myReplSet)"初始化複本集
在初始化命令完成後,可以通過"rs.status()"命令查看複本集的狀態。
在上面的輸出中,有幾個欄位需要注意一下:
- "health":這個表示該節點的狀態是否正常
- "state":這個欄位表示該節點是什麼類型的節點
- "stateStr":表示當前同步的狀態,RECOVERING表示正在同步資料;SECONDARY表示已經成功同步,可以正常使用
現在,通過"Ctrl+c"命令來停止"port=11111"這個節點,然後開啟一個新的cmd視窗串連到"port=22222"的伺服器上。
再次使用"rs.status()"命令查看複本集的狀態。可以看到"port=11111"的"health"狀態變成了0,同時"port=22222"的伺服器變成了主節點。
如果,我們再次啟動"port=11111",那麼它將成為一個備份節點,這裡就不示範了。
動態添加刪除節點
有些時候,會有需求加入新的節點,那麼就可以使用下面的命令來動態添加刪除節點
1 mongod.exe --dbpath="c:\mongodb\db\node4" --port=44444 --replSet myReplSet --oplogSize=502 rs.add("127.0.0.1:44444")3 rs.status()4 rs.remove("127.0.0.1:44444")5 rs.status()
讀寫分離
複本集不僅僅可以保證資料的安全,還可以通過讀寫分離來降低主節點的讀資料壓力。
接著上面的例子,通過主節點插入一些資料。
當我們想通過備份節點讀取資料的時候,將得到以下錯誤,提示我們"slaveOk"屬性是false。
但是,通過"rs.slaveOk()"命令,就可以設定備份節點的讀操作了。
通過讀寫分離可以很大程度上建設主節點的讀寫壓力,但是這種方式也有一些問題,備份節點的資料會相對滯後,所以讀出的資料可能不是最新的。
總結
通過這篇文章,大概瞭解了複本集的使用。通過使用複本集,可以使資料得到進一步的保護,通過讀寫分離也可以進行讀寫效能的最佳化。
Ps:本文中所有的命令都可以參考以下連結
http://files.cnblogs.com/wilber2013/replicaSet.js
MongoDB複本集