此次我來講一下mongodb的副本集,副本集的出現能夠有效的保證mongodb的單點問題,對數據的穩健性有必定輔助做用:html
1.複製提供了數據的冗餘備份,並在多個服務器上存儲數據副本,提升了數據的可用性, 並能夠保證數據的安全性。mongodb
2.複製還容許您從硬件故障和服務中斷中恢復數據。數據庫
mongodb的複製至少須要兩個節點。其中一個是主節點,負責處理客戶端請求,其他的都是從節點,負責複製主節點上的數據。安全
mongodb各個節點常見的搭配方式爲:一主一從、一主多從。服務器
主節點記錄在其上的全部操做oplog,從節點按期輪詢主節點獲取這些操做,而後對本身的數據副本執行這些操做,從而保證從節點的數據與主節點一致。架構
因爲我本地已經裝載了一個mongodb服務,我就在本地模擬兩個mongdb啓動作數據備份的操做:分佈式
1> 配置路徑以下:性能
2> 進入各服務下的bin目錄啓動mongodb 並指定端口:Server1的對應master port = 27011 htm
mongod.exe --dbpath=E:\mongodbRs\db1 --master --port=27011blog
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"來讓咱們能夠顯示的讀取從屬數據庫來減輕主數據庫的性能壓力
到這主從複製就基本上說完了,下面說副本集的搭建和介紹
副本集的特色:
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