原文連接:【MongoDB】windows平臺搭建Mongo數據庫複製集(相似集羣)(一)html
Replica Sets(複製集)是在mongodDB1.6版本開始新增的功能,它能夠實現故障自動切換和自動修復功能成員節點的功能,各個DB之間的數據徹底一致,大大下降了單點故障的風險。 mongodb
【】數據庫
以上圖示是三個節點的Replica Set架構。該圖來源於紅丸編寫的《Mongodb管理與開發精要》這本書。從上圖能夠看出,結構相似與一個集羣,其實徹底能夠當作一個集羣。由於它確實和集羣實現的做用是相同的。 windows
接下來顯示如何在一臺服務器上面演示部署3個節點的Replica Sets 服務器
分別打開三個命令窗口,而後分別執行下面三句話。網絡
在上篇博客中,咱們主要闡述了在windows平臺下如何搭建mongodb複製集。詳細博客地址:架構
因爲篇幅有限在上篇沒有對結果進行驗證,在本篇博客中咱們主要進行測試:app
經過rs.status()命令咱們能夠查詢到各個節點運行正常。測試
在280十一、28012端口上進行插入:spa
查看緣由:網上找到答案
首先這是正常的,由於SECONDARY是不容許讀寫的, 在寫多讀少的應用中,使用Replica Sets來實現讀寫分離。經過在鏈接時指定或者在主庫指定slaveOk,由Secondary來分擔讀的壓力,Primary只承擔寫操做。對於replica set 中的secondary 節點默認是不可讀的。
當檢測時主庫中止心跳了後,28012把本身選舉爲主庫,請看以下:
28012上面就能夠進行插入了:
28011上面如今仍是不能插入
關於windows平臺搭建Mongo數據庫複製集這個話題,我已經在前面寫了兩篇博客
第一篇: 如何在windows平臺搭建Mongo數據庫複製集
第二篇: 數據同步和故障自適應測試
在本篇裏面,我們重點總結一下複製集,以及分析一下它的工做原理
應用程序和數據庫之間的網絡鏈接丟失
計劃停機、斷電、數據庫服務硬盤故障等等
複製能夠進行故障轉移,複製能讓你在副本間均衡讀負載,保證複製節點與主節點保持同步
副本集依賴於兩個基礎機制:oplog和「心跳」(heartbeat).oplog讓數據的複製成爲可能,而「心跳」則監控健康狀況並出發故障轉移;
oplog是MongoDB複製的關鍵,oplog是一個固定集合,位於每一個複製節點的local數據庫中,記錄了對數據庫的全部變動,每次客戶端向主節點寫入數據,就會自動向主節點的oplog裏添加愛一條記錄,其中博客了足夠的信息來再現數據。一旦寫操做被複制到某個從節點上,從節點的oplog也會保存一條記錄。
local數據庫裏保存了全部的副本集元數據和oplog,由於自己不能被複制;
那咱們詳細在看oplog
在此注意,每一個從節點都有一份本身的oplog,從節點使用長輪詢的方式當即應用來自主節點oplog的新條目。若是叢節點在主節點的oplog中找不到本身要同步的點,那麼就永久中止複製。這是會在日誌中有以下異常:
replcation data too stale, halting
caught syncException
調整oplog的大小,利用命令db.getReplicationInfo()能夠查看分配了多少oplog空間,同時利用以下命令能夠改變默認oplog大小
副本集的心跳檢測有助於選舉和故障轉移。默認狀況下,每一個副本集成員每隔2s ping一次其餘成員。這樣一來系統就能夠弄清本身的健康情況了。運行rs.status()也能夠看到健康狀態。
注意:在三個節點中,若是兩個從節點都被殺掉了,在主節點的log會多以下一句話:
replSet can't see a majority of the set,
replSet Secondary
意思是沒有多數節點,主節點就把本身降級爲從節點;
因爲副本集存在許多潛在的複雜配置項,接下來咱們詳細介紹這些複雜配置項目;