資料內(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í)自動(dòng)選舉出一個(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)會(huì)發(fā)起選舉,選出新的主節(jié)點(diǎn)
如果失聯(lián)的是從節(jié)點(diǎn)則不會(huì)產(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。