溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

mongodb副本集指的是什么意思

發(fā)布時(shí)間:2020-08-01 10:16:36 來源:億速云 閱讀:295 作者:清晨 欄目:編程語(yǔ)言

小編給大家分享一下mongodb副本集指的是什么意思,希望大家閱讀完這篇文章后大所收獲,下面讓我們一起去探討吧!

副本集簡(jiǎn)介

Mongodb副本集由一組Mongod實(shí)例(進(jìn)程)組成,包含一個(gè)Primary節(jié)點(diǎn)和多個(gè)Secondary節(jié)點(diǎn),Mongodb Driver(客戶端)的所有數(shù)據(jù)都寫入Primary,Secondary從Primary同步寫入的數(shù)據(jù),以保持復(fù)制集內(nèi)所有成員存儲(chǔ)相同的數(shù)據(jù)集,提供數(shù)據(jù)的高可用。副本集帶來的架構(gòu)優(yōu)點(diǎn)主要有:

·集群高可用

·讀寫可分離

副本集節(jié)點(diǎn)類型

1.Primary: 副本集的主節(jié)點(diǎn),可讀寫,唯一可以進(jìn)行寫操作的節(jié)點(diǎn),由集群自行選舉出來。

2.Secondary: 正常情況下,Seconary會(huì)參與Primary選舉(自身也可能會(huì)被選為Primary),并從Primary同步最新寫入的數(shù)據(jù),以保證與Primary存儲(chǔ)相同的數(shù)據(jù)。Secondary可以提供讀服務(wù),增加Secondary節(jié)點(diǎn)可以提供副本集的讀服務(wù)能力,提升副本集的可用性。

3.Arbiter: Arbiter節(jié)點(diǎn)只參與投票,不能被選為Primary,并且不從Primary同步數(shù)據(jù)。非常輕量級(jí)的服務(wù),當(dāng)復(fù)制集成員為偶數(shù)時(shí),最好加入一個(gè)Arbiter節(jié)點(diǎn),以提升復(fù)制集可用性。

4.Priority0: Priority0節(jié)點(diǎn)的選舉優(yōu)先級(jí)為0,不會(huì)被選舉為Primary,且不能發(fā)起選舉。

5.Vote0: 副本集成員最多50個(gè),參與Primary選舉投票的成員最多7個(gè),其他成員(Vote0)的vote屬性必須設(shè)置為0,即不參與投票。

6.Hidden: Hidden節(jié)點(diǎn)不能被選為主(Priority為0),并且對(duì)Driver不可見。因Hidden節(jié)點(diǎn)不會(huì)接受Driver的請(qǐng)求,可使用Hidden節(jié)點(diǎn)做一些數(shù)據(jù)備份、離線計(jì)算的任務(wù),不會(huì)影響復(fù)制集的服務(wù)。

7.Delayed: Delayed節(jié)點(diǎn)必須是Hidden節(jié)點(diǎn),并且其數(shù)據(jù)落后與Primary一段時(shí)間(可配置,比如1個(gè)小時(shí))。因Delayed節(jié)點(diǎn)的數(shù)據(jù)比Primary落后一段時(shí)間,當(dāng)錯(cuò)誤或者無(wú)效的數(shù)據(jù)寫入Primary時(shí),可通過Delayed節(jié)點(diǎn)來做數(shù)據(jù)恢復(fù)。

Primary選舉

選舉過程需要消耗一些時(shí)間,在此期間,集群將不能接收write操作(即使舊的primary仍然存活,但因?yàn)椤熬W(wǎng)絡(luò)分區(qū)”問題導(dǎo)致它不能與其他secondaries通訊),所有的members(包括舊的primary)都處于只讀狀態(tài),選舉對(duì)業(yè)務(wù)影響很大,所以需要盡量避免選舉的發(fā)生。

需要進(jìn)行Primary選舉的場(chǎng)景:

(1)副本集初始化時(shí);

(2)副本集被reconfig;

(3)Secondary節(jié)點(diǎn)檢測(cè)到Primary宕機(jī)時(shí);

(4)當(dāng)有Primary節(jié)點(diǎn)主動(dòng)stepDown(主動(dòng)降級(jí)為Secondary)時(shí);

Primary的選舉受節(jié)點(diǎn)間心跳、優(yōu)先級(jí)、最新的oplog時(shí)間等多種因素影響。

1.心跳: 復(fù)制集中的所有members之間都互相建立心跳連接,且每隔兩秒發(fā)送一次心跳,如果未在10秒內(nèi)收到回復(fù),則此member將會(huì)被標(biāo)記為“不可用”,Secondary(前提是可被選為Primary)會(huì)發(fā)起新的Primary選舉,而其他能正常收到心跳反饋的Secondary能否決新的Primary選舉。

2.優(yōu)先級(jí): 優(yōu)先級(jí)即Priority值,每個(gè)member都有權(quán)重值,默認(rèn)為都為1,members傾向于選舉權(quán)重最高者。上述提到,priority為0的member不能被選舉為primary且不能發(fā)起選舉;只要當(dāng)前primary的權(quán)重最高或者持有最新oplog數(shù)據(jù)的secondaries沒有比它更高的權(quán)重時(shí),集群不會(huì)觸發(fā)選舉。當(dāng)Primary發(fā)現(xiàn)有優(yōu)先級(jí)更高Secondary,并且該Secondary的數(shù)據(jù)落后在10s內(nèi),則Primary會(huì)主動(dòng)降級(jí),讓優(yōu)先級(jí)更高的Secondary有成為Primary的機(jī)會(huì)。

3.Optime: 當(dāng)前member已經(jīng)從primary的oplog中應(yīng)用的最后一個(gè)operation的時(shí)間戳(此時(shí)間戳由primary生成,在oplog中每個(gè)操作記錄都有);一個(gè)member能成為primary的首要條件就是在所有有效的members中它持有最新的optime。

4.多數(shù)派連接: 一個(gè)member要成為primary,它必須與“多數(shù)派”的其他members建立連接,如果未能與足夠多的member建立連接,事實(shí)上它本身也無(wú)法被選舉為primary;多數(shù)派參考的是“總票數(shù)”,而不是member的個(gè)數(shù),因?yàn)槲覀兛梢越o每個(gè)member設(shè)定不同的“票數(shù)”。假設(shè)復(fù)制集內(nèi)投票成員數(shù)量為N,則大多數(shù)為 N/2 + 1。

綜上所述,在發(fā)起選舉以后,能成為Primary的節(jié)點(diǎn)需要的條件有:

·能夠與“多數(shù)派”建立連接

·在所有有效的members中它持有最新的optime

·前兩個(gè)條件相同的,Priority優(yōu)先級(jí)高的成為Primary

·optime與Priority都相等時(shí),誰(shuí)發(fā)起選舉,誰(shuí)當(dāng)選Primary

3.0版本以后副本集成員最多50個(gè),參與Primary選舉投票的成員最多7個(gè),其他成員(Vote0)的vote屬性必須設(shè)置為0,即不參與投票。

副本集中各類角色的特點(diǎn)總結(jié)如下:

mongodb副本集指的是什么意思

備注:

·上述Secondary為默認(rèn)Secondary,即Priority!=0、vote!=0等;

·Hidden為特殊的Secondary,Delayed為特殊的Hidden。

看完了這篇文章,相信你對(duì)mongodb副本集指的是什么意思有了一定的了解,想了解更多相關(guān)知識(shí),歡迎關(guān)注億速云行業(yè)資訊頻道,感謝各位的閱讀!

向AI問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI