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那樣需要使用第三方軟件。
成都創(chuàng)新互聯(lián)是一家專業(yè)從事成都網(wǎng)站建設(shè)、網(wǎng)站制作的網(wǎng)絡(luò)公司。作為專業(yè)的建站公司,成都創(chuàng)新互聯(lián)依托的技術(shù)實(shí)力、以及多年的網(wǎng)站運(yùn)營(yíng)經(jīng)驗(yàn),為您提供專業(yè)的成都網(wǎng)站建設(shè)、成都營(yíng)銷網(wǎng)站建設(shè)及網(wǎng)站設(shè)計(jì)開發(fā)服務(wù)!
目前很多游戲公司都開始使用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í)例。
參考文檔
http://docs.mongodb.org/v2.4/replication/