Mongodb的入門(6)副本集
Mongodb的副本集:(有兩種情況,主從復制,副本集)
這次我來說一下mongodb的副本集,副本集的出現可以有效的保證mongodb的單點問題,對數據的穩健性有一定輔助作用:
MongoDB復制:是將數據同步在多個服務器的過程。
1.復制提供了數據的冗余備份,並在多個服務器上存儲數據副本,提高了數據的可用性, 並可以保證數據的安全性。
2.復制還允許您從硬件故障和服務中斷中恢復數據。
什麽是復制?
-
- 保障數據的安全性
- 數據高可用性 (24*7)
- 災難恢復
- 無需停機維護(如備份,重建索引,壓縮)
- 分布式讀取數據
MongoDB復制原理:
mongodb的復制至少需要兩個節點。其中一個是主節點,負責處理客戶端請求,其余的都是從節點,負責復制主節點上的數據。
mongodb各個節點常見的搭配方式為:一主一從、一主多從。
主節點記錄在其上的所有操作oplog,從節點定期輪詢主節點獲取這些操作,然後對自己的數據副本執行這些操作,從而保證從節點的數據與主節點一致。
Mongodb的主從復制:
由於我本地已經裝載了一個mongodb服務,我就在本地模擬兩個mongdb啟動做數據備份的操作:
1> 配置路徑如下:
2> 進入各服務下的bin目錄啟動mongodb 並指定端口:Server1的對應master port = 27011
mongod.exe --dbpath=E:\mongodbRs\db1 --master --port=27011
Server2下是復制的mongodb port=27012 mongod.exe --dbpath=E:\mongodbRs\db2 --port=27012 --slave --source=127.0.0.1:27011
啟動後一直監控:
3>在27011 上插入一條記錄:
27012上就能看到變化:
· 報錯的解決辦法:
註意:叢庫只允許查詢,插入會報錯
4>動態追加從屬數據庫 有印象就行,
上面介紹的是在mongodb啟動的時候,就知道主數據是哪個,下面我來說一種動態追加的方式:
啟動mongodb,不指定主庫:mongod.exe --dbpath=E:\mongodbRs\db3 --port=27013 --slave
上面顯示信息是指沒有master庫配置:配置方式如下:
查看mongodb3的服務啟動信息可以查看到:slave生效了
到這動態追加從庫也配置完成:
5>讀寫分離
這種手段在大一點的架構中都有實現,在mongodb中其實很簡單,在默認的情況下,從屬數據庫不支持數據的讀取,但是沒關系,
在驅動中給我們提供了一個叫做“slaveOkay"來讓我們可以顯示的讀取從屬數據庫來減輕主數據庫的性能壓力
對比:一主兩從
到這主從復制就基本上說完了,下面說副本集的搭建和介紹
Mongdb的副本集:
副本集的特點:
1> 副本集沒有特定的主數據庫。
2>如果哪個主數據庫宕機了,集群中就會推選出一個從屬數據庫作為主數據庫頂上,這就具備了自動故障恢復功能,
副本集在搭建過程中,要保證數據是清空的,因為我上面搭建的主從復制的數據都保存在db1 db2 db3中,所以在搭建副本集時,要先清空數據,保證搭建副本集的純凈環境
副本集:(搭建命令)
mongod.exe --port 27011 --dbpath=E:\mongodbRs\db1 --replSet rs0
mongod.exe --port 27012 --dbpath=E:\mongodbRs\db2 --replSet rs0
mongod.exe --port 27013 --dbpath=E:\mongodbRs\db3 --replSet rs0
副本集搭建過程:
rs.status():查詢副本集的狀態:截圖如下:
6>剛說副本集是沒有主節點的集群,主節點宕機後其他節點會自動切換回來,下面我模擬這種場景,把27011幹掉:
7>我再把27011節點起來,這時候他作為一個從節點的狀態又回到了集群中:
至此,mongodb的主從復制和副本集的搭建已經全部完成,不會的搭建可以參考:http://www.runoob.com/mongodb/mongodb-replication.html
Mongodb的入門(6)副本集