MongoDB Replica Set是MongoDB官方推薦的主從復(fù)制和高可用方案,用于替代原有的Master-Slave主從復(fù)制方案。Replicat Set具有自動(dòng)
MongoDB Replica Set是MongoDB官方推薦的主從復(fù)制和高可用方案,用于替代原有的Master-Slave主從復(fù)制方案。Replicat Set具有自動(dòng)切換功能,當(dāng)Primary掛掉之后,可以自動(dòng)由Replica Set中的某一個(gè)Secondary來(lái)切換到Primary,以實(shí)現(xiàn)高可用的目的,不像MySQL那樣需要使用第三方軟件。
目前很多游戲公司都開始使用MongoDB作為數(shù)據(jù)庫(kù),我們公司線上使用的版本是2.4.6.
一 MongoDB Replica Set的原理
復(fù)制主要用于備份、災(zāi)難恢復(fù)和讀寫分離。一個(gè)Replica Set就是一組mongod實(shí)例。Replica Set中的Primary接收所有的寫操作,Secondaries從Primary復(fù)制操作然后應(yīng)用到自己的data set。
一個(gè)Replica Set中的成員角色有三種:Primary,Secondary和Arbiter。
Primary 接收來(lái)自客戶端的所有的寫操作,一個(gè)Replica Set中有且只有一個(gè)Primary。Primary如果宕掉,Replica Set會(huì)自動(dòng)選舉一個(gè)Secondary成為Primary。Primary將它data sets的所有操作都記錄到oplog中。
Secondary Secondary從Primary復(fù)制oplog,然后將oplog中的操作應(yīng)用到自己的data sets。Secondary和Primary之間是異步復(fù)制,也就是Secondary中的數(shù)據(jù)可能不是最新的。默認(rèn)情況下,Secondary不可讀不可寫,但是可以通過(guò)設(shè)置運(yùn)行客戶端從Secondary讀。
Arbiter Arbiter不需要維護(hù)自己的data sets,,只是當(dāng)Primary掛掉之后參與投票選擇哪個(gè)Secondary可以升級(jí)為Primary。當(dāng)Replica Set中的成員個(gè)數(shù)為偶數(shù)個(gè)時(shí),就需要添加一個(gè)Arbiter用于投票選舉哪個(gè)可以升級(jí)為Primary。Arbiter對(duì)硬件的要求很低。不能在Primary或者Secondary主機(jī)上運(yùn)行Arbiter。
一個(gè)Replica Set可以最多擁有12個(gè)成員,但是只有7個(gè)成員可以同時(shí)參與投票選舉成為Primary,如果成員數(shù)量超過(guò)12,就需要使用Master-Slave主從復(fù)制方式。
部署一個(gè)Replica Set至少需要三個(gè)成員,一個(gè)Arbiter,一個(gè)Secondary和一個(gè)Primary或者一個(gè)Primary,兩個(gè)Secondary。
可以將Secondary配置為以下幾種特殊用途:
A.在選舉中阻止其成為Primary,只用作備份數(shù)據(jù)。通過(guò)設(shè)置優(yōu)先級(jí)priority為0來(lái)實(shí)現(xiàn)。
B.阻止應(yīng)用程序從它讀,通過(guò)設(shè)置優(yōu)先級(jí)priority為0和設(shè)置hidden為true來(lái)實(shí)現(xiàn)。
一個(gè)隱藏的成員同樣復(fù)制Primary的數(shù)據(jù),但是對(duì)于客戶端應(yīng)用程序來(lái)講,它不可見。
C.保留歷史鏡像數(shù)據(jù)用于數(shù)據(jù)回檔,比如如果誤刪除數(shù)據(jù),可以使用Delayed Replica Set成員中的數(shù)據(jù)恢復(fù)。
Delayed members即延時(shí)成員會(huì)延時(shí)從Primary復(fù)制oplog
二 MongoDB Replica Set部署架構(gòu)
Replica Set Elections 復(fù)制集選舉
Replica Set通過(guò)投票選舉的方式來(lái)決定哪個(gè)成員可以升級(jí)為Primary。初始化一個(gè)Replica Set后就會(huì)產(chǎn)生選舉出現(xiàn),或者任何時(shí)候當(dāng)Primary不可用時(shí)也會(huì)有選舉出現(xiàn)。需要注意的是,投票選舉Primary會(huì)花費(fèi)一定的時(shí)間來(lái)完成,在這段時(shí)間內(nèi),整個(gè)Replica Set無(wú)法進(jìn)行寫操作,所以盡量避免重新投票選舉的情況出現(xiàn)。
影響選舉的因素和條件有:
Heartbeats 心跳檢測(cè)
Replica Set中成員每2秒向其他成員發(fā)送心跳,如果在10秒內(nèi)無(wú)回應(yīng),這個(gè)成員就被其他成員標(biāo)記為不可用。
Priortiy Comparisons 對(duì)比優(yōu)先級(jí)
設(shè)定成員的優(yōu)先級(jí)priority會(huì)影響投票選舉,優(yōu)先級(jí)越高,越容易被選舉成為Primary。如果優(yōu)先級(jí)設(shè)置為0,那么這個(gè)成員不會(huì)永遠(yuǎn)不會(huì)被選舉成為Primary,它也不需要其他成員為它投票。
Optime
Optime是Replica Set的成員上一次從oplog中將操作應(yīng)用到data sets的時(shí)間戳。一個(gè)成員不會(huì)成為Primary,除非它比其他可見的成員擁有最新的時(shí)間戳。
Connections
一個(gè)Replica Set中的成員如果想要成為Primary,它必須能夠連接這個(gè)Replica Set中具有投票權(quán)利的大部分成員。
Network Partitions
為了避免當(dāng)Primary宕掉后,整個(gè)Replica Set無(wú)法選舉出新的Primary,Replica Set變成只讀,需要在一個(gè)數(shù)據(jù)中心放置大部分Replica Set中的成員實(shí)例。
參考文檔
CentOS 編譯安裝 MongoDB與mongoDB的php擴(kuò)展
CentOS 6 使用 yum 安裝MongoDB及服務(wù)器端配置
Ubuntu 13.04下安裝MongoDB2.4.3
MongoDB入門必讀(概念與實(shí)戰(zhàn)并重)
Ubunu 14.04下MongoDB的安裝指南
《MongoDB 權(quán)威指南》(MongoDB: The Definitive Guide)英文文字版[PDF]
Nagios監(jiān)控MongoDB分片集群服務(wù)實(shí)戰(zhàn)
基于CentOS 6.5操作系統(tǒng)搭建MongoDB服務(wù)
MongoDB 的詳細(xì)介紹:請(qǐng)點(diǎn)這里
MongoDB 的下載地址:請(qǐng)點(diǎn)這里
本文永久更新鏈接地址:
聲明:本網(wǎng)頁(yè)內(nèi)容旨在傳播知識(shí),若有侵權(quán)等問(wèn)題請(qǐng)及時(shí)與本網(wǎng)聯(lián)系,我們將在第一時(shí)間刪除處理。TEL:177 7030 7066 E-MAIL:11247931@qq.com