redis集群和哨兵選舉機(jī)制(概述)

Redis的集群分為兩種,一種是集群cluster一種是哨兵

  1. redis集群選舉分析

當(dāng)salve發(fā)現(xiàn)自己的master變?yōu)镕AIL狀態(tài)時(shí),嘗試進(jìn)行Failover(故障切換)

當(dāng)存在多個(gè)slave的時(shí)候,就需要競(jìng)爭(zhēng)成為master,過(guò)程如下

(1) slave發(fā)現(xiàn)自己的master變?yōu)镕AIL

(2) 將自己記錄的集群currentEpock加一,并廣播FAILOVER_AUTH_REQUEST信息

(3) 其他小集群的master會(huì)相應(yīng)slave的廣播消息,首先判斷請(qǐng)求者的合法性,并發(fā)送FAILOVER_AUTH_ACK,對(duì)每一個(gè)epoch只發(fā)送一次ack

(4) 嘗試failover的slave收集master返回的FAILOVER_AUTH_ACK

(5) Slave受到超過(guò)半數(shù)的master的ack就成為新的master

(6) Slave廣播ping消息通知其他集群節(jié)點(diǎn)

Slave節(jié)點(diǎn)不是主節(jié)點(diǎn)已進(jìn)入FAIL狀態(tài)就馬上嘗試發(fā)起選舉,而是有一定的延時(shí),一定的延時(shí)確保等待FAIL狀態(tài)在集群中傳播。Slave如果立即嘗試選舉,其它的masters或許尚未意識(shí)到FAIL狀態(tài),可能會(huì)拒絕投票。

延時(shí)計(jì)算公式:

DELAY = 500ms+random(0~5000ms)+SLAVE_RANK*1000ms

SLAVE_RANK表示此slave已經(jīng)從master復(fù)制數(shù)據(jù)的總量的rank。Rank越小代表已經(jīng)復(fù)制的數(shù)據(jù)越新。這種方式下,只有最新數(shù)據(jù)的slave將會(huì)首先發(fā)起選舉。

Redis集群如果發(fā)生腦裂,網(wǎng)絡(luò)分區(qū)導(dǎo)致腦裂后多個(gè)主節(jié)點(diǎn)對(duì)外提供寫(xiě)服務(wù),當(dāng)網(wǎng)絡(luò)分區(qū)回復(fù),會(huì)將其中一個(gè)主節(jié)點(diǎn)變?yōu)閺墓?jié)點(diǎn),變?yōu)閺墓?jié)點(diǎn)之后,回從現(xiàn)有主節(jié)點(diǎn)復(fù)制數(shù)據(jù),那原來(lái)的數(shù)據(jù)就會(huì)丟失,redis不像zookeeper有過(guò)半機(jī)制,是通過(guò)配置文件的參數(shù)

min-replicas-to-write 3

min-replicas-max-lag 10

第一個(gè)參數(shù)表示連接到master的最少slave數(shù)量

第二個(gè)參數(shù)表示slave連接到master的最大延遲時(shí)間

按照上面的配置,要求至少3個(gè)slave節(jié)點(diǎn),且數(shù)據(jù)復(fù)制和同步的延遲不能超過(guò)10秒,否則的話master就會(huì)拒絕寫(xiě)請(qǐng)求,配置了這兩個(gè)參數(shù)之后,如果發(fā)生集群腦裂,原先的master節(jié)點(diǎn)接收到客戶端的寫(xiě)入請(qǐng)求會(huì)拒絕,就可以減少數(shù)據(jù)同步之后的數(shù)據(jù)丟失。

  1. 哨兵的選舉

Redis 的哨兵選舉,首先是從sentinel中選出leader,由這個(gè)leader去操作redis主從切換.

  1. 選出sentinel的leader

當(dāng)一個(gè)master服務(wù)器被sentinel認(rèn)為下線狀態(tài)后,sentinel會(huì)與其余的sentinel協(xié)商選出的leader進(jìn)行故障轉(zhuǎn)移,每個(gè)發(fā)現(xiàn)master服務(wù)器進(jìn)入下線的sentinel都可以要求其他sentinel選自己為sentinel的leader,選舉是先到先得,同是每個(gè)sentinel每次選舉都會(huì)自增配置紀(jì)元(選舉周期),每個(gè)紀(jì)元中只有選擇一個(gè)sentinel的leader.如果所有超過(guò)一半的sentinel選舉其中一個(gè)sentinel作為leader.之后該sentinel作為leader進(jìn)行故障轉(zhuǎn)移操作,

  1. 操作redis服務(wù)器

從存活的slave中選舉新的master,這個(gè)選舉過(guò)程跟集群的master選舉很類(lèi)似.

關(guān)于哨兵可以參考https://www.cnblogs.com/Eugene-Jin/p/10819601.html

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容