新聞中心
Redis哨兵機(jī)制及實(shí)現(xiàn)原理簡(jiǎn)介

Redis是一種常用的內(nèi)存數(shù)據(jù)庫(kù),常常被用于緩存、隊(duì)列等應(yīng)用場(chǎng)景。然而,當(dāng)Redis部署在分布式環(huán)境中時(shí),如果某一臺(tái)Redis服務(wù)器宕機(jī),那么可能會(huì)導(dǎo)致整個(gè)系統(tǒng)的異常,這時(shí)候我們就需要做故障自愈和高可用的處理。Redis提供了哨兵機(jī)制來(lái)保證Redis的高可用性,本文將對(duì)Redis哨兵機(jī)制進(jìn)行簡(jiǎn)介。
一、Redis哨兵機(jī)制簡(jiǎn)介
Redis哨兵機(jī)制是一種監(jiān)控機(jī)制,通過(guò)主從復(fù)制的方式實(shí)現(xiàn)高可用性。Redis哨兵集群至少包含一個(gè)Master和一個(gè)或多個(gè)slave,哨兵負(fù)責(zé)監(jiān)測(cè)master和slave的狀態(tài)。當(dāng)master宕機(jī)或失聯(lián)時(shí),哨兵會(huì)自動(dòng)發(fā)現(xiàn)這一情況,并將一個(gè)slave提升為新的master,保證系統(tǒng)的正常運(yùn)行。在Redis哨兵機(jī)制中,每個(gè)Redis節(jié)點(diǎn)會(huì)有一個(gè)哨兵進(jìn)程運(yùn)行在系統(tǒng)之外,哨兵進(jìn)程會(huì)周期性地檢測(cè)自己監(jiān)管的Redis實(shí)例的狀態(tài),并向其他哨兵進(jìn)程發(fā)送信息以協(xié)調(diào)Redis實(shí)例工作。
二、Redis哨兵機(jī)制實(shí)現(xiàn)原理
1. 哨兵的監(jiān)測(cè)機(jī)制
哨兵會(huì)定期發(fā)送PING命令來(lái)監(jiān)測(cè)Redis節(jié)點(diǎn)的狀態(tài)。如果節(jié)點(diǎn)在指定的時(shí)間內(nèi)沒(méi)有回復(fù)PING命令,那么哨兵會(huì)將節(jié)點(diǎn)標(biāo)識(shí)為失聯(lián)節(jié)點(diǎn)。當(dāng)Redis節(jié)點(diǎn)被標(biāo)記為失聯(lián)節(jié)點(diǎn)時(shí),哨兵將會(huì)進(jìn)行如下操作:
(1)哨兵將檢查是否有其它哨兵那已經(jīng)將該節(jié)點(diǎn)標(biāo)記為失聯(lián),如果已經(jīng)標(biāo)記則跳過(guò)接下來(lái)的操作;
(2)哨兵將確認(rèn)該節(jié)點(diǎn)是主節(jié)點(diǎn)還是從節(jié)點(diǎn);
(3)如果該節(jié)點(diǎn)是主節(jié)點(diǎn),則哨兵會(huì)將其標(biāo)記為已下線,并且選擇一個(gè)從節(jié)點(diǎn)升級(jí)為新的主節(jié)點(diǎn),同時(shí)通知Redis客戶端將新主節(jié)點(diǎn)的IP和端口號(hào)作為參數(shù)重新運(yùn)行連接命令。在這個(gè)過(guò)程中,Redis客戶端將會(huì)完全感知到,無(wú)需手動(dòng)修改客戶端連接代碼;
(4)如果該節(jié)點(diǎn)是從節(jié)點(diǎn),則哨兵會(huì)將其標(biāo)記為已下線,并且將它與對(duì)應(yīng)的主節(jié)點(diǎn)重新連接。
2. 哨兵集群的選舉機(jī)制
當(dāng)Redis哨兵集群中的節(jié)點(diǎn)變化(如主節(jié)點(diǎn)失效)時(shí),哨兵們需要選出一個(gè)新的主節(jié)點(diǎn)負(fù)責(zé)Redis的工作。哨兵的選舉機(jī)制分為兩個(gè)階段:
(1)哨兵選擇自己的leader,每個(gè)哨兵會(huì)周期性地向其他哨兵發(fā)送信息,用于選舉leader。當(dāng)某個(gè)哨兵發(fā)送的消息獲得過(guò)半哨兵的支持時(shí),該發(fā)起者就成為新的leader。
(2)leader分別選取一個(gè)Redis節(jié)點(diǎn)作為新的主節(jié)點(diǎn),告訴其他哨兵它的選舉結(jié)果。當(dāng)發(fā)現(xiàn)結(jié)果過(guò)半的哨兵接受leader的決策之后,整個(gè)選舉過(guò)程完成。
三、Redis哨兵機(jī)制的具體實(shí)現(xiàn)
Redis哨兵機(jī)制有兩種具體實(shí)現(xiàn)方式:
1. 單主模式
在單主模式中,有一臺(tái)Redis服務(wù)器作為master,其他redis服務(wù)器作為slave,當(dāng)master失敗時(shí),哨兵會(huì)實(shí)現(xiàn)一個(gè)流程,其用于檢測(cè)是否有slave節(jié)點(diǎn)的flover-guaranteed選項(xiàng)設(shè)置為“yes”。在這種情況下,當(dāng)master失敗時(shí),所有slave中投票最多的那一個(gè)將被選擇為新的master。官方建議至少要有三個(gè)哨兵實(shí)例才能保證選舉成功,否則會(huì)出現(xiàn)過(guò)度裁決的情況。
2. 多主模式
在多主模式中,多臺(tái)Redis服務(wù)器可以作為master,在這種模式下,需要保證每個(gè)Redis節(jié)點(diǎn)與至少兩個(gè)其他Redis節(jié)點(diǎn)保持連接。當(dāng)某個(gè)master節(jié)點(diǎn)出現(xiàn)故障時(shí),其他master節(jié)點(diǎn)和slave節(jié)點(diǎn)會(huì)通過(guò)哨兵機(jī)制來(lái)選擇一個(gè)新的master,以保證系統(tǒng)的正常運(yùn)行。
四、總結(jié)
以上就是Redis哨兵機(jī)制的簡(jiǎn)介和實(shí)現(xiàn)機(jī)制。Redis哨兵機(jī)制可以在Redis節(jié)點(diǎn)發(fā)生異常時(shí)自動(dòng)進(jìn)行故障自愈,提高Redis的可用性。在分布式環(huán)境中使用Redis時(shí),為保證系統(tǒng)的穩(wěn)定性,建議使用Redis哨兵機(jī)制。
香港服務(wù)器選創(chuàng)新互聯(lián),2H2G首月10元開(kāi)通。
創(chuàng)新互聯(lián)(www.cdcxhl.com)互聯(lián)網(wǎng)服務(wù)提供商,擁有超過(guò)10年的服務(wù)器租用、服務(wù)器托管、云服務(wù)器、虛擬主機(jī)、網(wǎng)站系統(tǒng)開(kāi)發(fā)經(jīng)驗(yàn)。專(zhuān)業(yè)提供云主機(jī)、虛擬主機(jī)、域名注冊(cè)、VPS主機(jī)、云服務(wù)器、香港云服務(wù)器、免備案服務(wù)器等。
本文題目:Redis哨兵機(jī)制及實(shí)現(xiàn)原理簡(jiǎn)介(redis的哨兵工作原理)
文章網(wǎng)址:http://m.fisionsoft.com.cn/article/dhicdhs.html


咨詢
建站咨詢
