
資料內(nèi)容:
MongoDB 復(fù)制集 
MongoDB復(fù)制集的主要意義在于實(shí)現(xiàn)服務(wù)高可用,類似于Redis中的哨兵模式 
它主要提供兩個(gè)方面的功能 
1. 數(shù)據(jù)寫入主節(jié)點(diǎn)(Primary)時(shí)將數(shù)據(jù)復(fù)制到另一個(gè)副本節(jié)(Secondary)點(diǎn)上 
2. 主節(jié)點(diǎn)發(fā)生故障時(shí)自動選舉出一個(gè)新的替代節(jié)點(diǎn) 
在實(shí)現(xiàn)高可用的同時(shí),復(fù)制集實(shí)現(xiàn)了其他幾個(gè)作用 
數(shù)據(jù)分發(fā):將數(shù)據(jù)從一個(gè)區(qū)域復(fù)制到另一個(gè)區(qū)域,減少另一個(gè)區(qū)域的讀延遲 
讀寫分離:不同類型的壓力分別在不同的節(jié)點(diǎn)上執(zhí)行 
異地容災(zāi):在數(shù)據(jù)中心故障時(shí)快速切換到異地 
典型復(fù)制集結(jié)構(gòu) 
一個(gè)典型的復(fù)制集由三個(gè)或三個(gè)以上具有投票權(quán)的節(jié)點(diǎn)組成,其中一個(gè)主節(jié)點(diǎn)(Primary):接 
收寫入操作,讀操作和選舉時(shí)投票,兩個(gè)或多個(gè)從節(jié)點(diǎn)(Secondary):復(fù)制主節(jié)點(diǎn)上的新數(shù)據(jù)和 
選舉時(shí)投票 
數(shù)據(jù)是如何復(fù)制的? 
當(dāng)一個(gè)修改操作,無論是插入,更新或刪除,到達(dá)主節(jié)點(diǎn)時(shí),它對數(shù)據(jù)的操作將被記錄下來(經(jīng) 
過一些必要的轉(zhuǎn)換)。這些記錄稱為oplog從節(jié)點(diǎn)通過從主節(jié)點(diǎn)上不斷獲取新進(jìn)入主節(jié)點(diǎn)的oplog,并在自己的數(shù)據(jù)上回放,以此保持跟主 
節(jié)點(diǎn)的數(shù)據(jù)一致。
通過選舉完成故障恢復(fù) 
具有投票權(quán)的節(jié)點(diǎn)之間兩兩互相發(fā)送心跳; 
當(dāng)5次心跳未收到時(shí)判斷為節(jié)點(diǎn)失聯(lián) 
如果失聯(lián)的是主機(jī)點(diǎn),從節(jié)點(diǎn)會發(fā)起選舉,選出新的主節(jié)點(diǎn) 
如果失聯(lián)的是從節(jié)點(diǎn)則不會產(chǎn)生新的選舉 
選舉基于RAFT一致性算法實(shí)現(xiàn),選舉成功的必要條件是大多數(shù)投票節(jié)點(diǎn)存活 
復(fù)制集中最多可以有50個(gè)節(jié)點(diǎn),但具有投票權(quán)的節(jié)點(diǎn)最多7個(gè) 
影響選舉的因素 
整個(gè)集群必須有大多數(shù)節(jié)點(diǎn)存活 
被選舉為主節(jié)點(diǎn)的節(jié)點(diǎn)必須 
1.能夠與多數(shù)節(jié)點(diǎn)建立連接 
2.具有較新的oplog 
3.具有較高的優(yōu)先級(如果有配置) 
復(fù)制集節(jié)點(diǎn)有以下的選配項(xiàng) 
是否具有投票權(quán)(v 參數(shù)): 有則參與投票 
優(yōu)先級(priority參數(shù)):優(yōu)先級越高的節(jié)點(diǎn)越優(yōu)先成為主節(jié)點(diǎn)。優(yōu)先級為0的節(jié)點(diǎn)無法成為主節(jié) 
點(diǎn),默認(rèn)值為1。
 
                