溫馨提示×

溫馨提示×

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

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

怎么解析Redis中的哨兵模式原理

發(fā)布時(shí)間:2022-01-25 11:07:19 來源:億速云 閱讀:215 作者:柒染 欄目:關(guān)系型數(shù)據(jù)庫

今天就跟大家聊聊有關(guān)怎么解析Redis中的哨兵模式原理,可能很多人都不太了解,為了讓大家更加了解,小編給大家總結(jié)了以下內(nèi)容,希望大家根據(jù)這篇文章可以有所收獲。

本篇文章帶大家深入理解下Redis哨兵模式原理,聊聊sentinel能干什么,啟動sentinel方法和Sentinel工作流程,希望對大家有所幫助!

一、Redis sentinel是什么?

Redis Sentinel是Redis的官方高可用性解決方案。Redis Sentinel為Redis提供高可用性。實(shí)際上,這意味著使用Sentinel可以創(chuàng)建一個(gè)Redis集群,在沒有人為干預(yù)的情況下抵抗某些類型的失敗,自動實(shí)現(xiàn)故障轉(zhuǎn)移?!鞠嚓P(guān)推薦:Redis視頻教程】

二、sentinel能干什么?

1、監(jiān)控redis集群節(jié)點(diǎn)(master+replica)和sentinel節(jié)點(diǎn)健康狀態(tài)

2、自動故障轉(zhuǎn)移:如果master出現(xiàn)故障,sentinel可以實(shí)現(xiàn)故障轉(zhuǎn)移,并且通知客戶端連接新的master。

3、通知:通過api,可以發(fā)送通知到管理員,開發(fā)人員,監(jiān)控的redis實(shí)例出現(xiàn)了故障

4、配置中心:客戶端連接到sentinel,sentinel可以訪問master將節(jié)點(diǎn)信息返回給客戶端

三、啟動sentinel方法

1、redis-sentinel /path/to/sentinel.conf

2、redis-server /path/to/sentinel.conf --sentinel

sentinel.conf配置說明如下

# 配置需要監(jiān)控的master節(jié)點(diǎn)信息 2代表法定人數(shù) 作用是表示需要最少需要多少個(gè)sentinel節(jié)點(diǎn)同意
#master節(jié)點(diǎn)不可達(dá)才標(biāo)記為客觀下線
#舉例 5個(gè)sentinel實(shí)例 quorum設(shè)置成2 那么有2個(gè)sentinel節(jié)點(diǎn)認(rèn)為master不可達(dá),
#則其中一個(gè)會啟動故障轉(zhuǎn)移#如果至少有三個(gè)哨兵可到達(dá),故障轉(zhuǎn)移將被授權(quán)并實(shí)際啟動。
sentinel monitor mymaster 127.0.0.1 6379 2 
#只需要配置master sentinel會自動檢測slave信息
sentinel down-after-milliseconds mymaster 60000 
#如果master在指定時(shí)間內(nèi)沒有響應(yīng)ping命令/或報(bào)錯(cuò),則認(rèn)為主觀下線了。
sentinel failover-timeout mymaster 180000
sentinel parallel-syncs mymaster 1 
#指定故障轉(zhuǎn)移的時(shí)候,同時(shí)支持多少個(gè)replica并行的與master同步數(shù)據(jù),越小故障轉(zhuǎn)移越久
#以上配置可以通過SENTINEL SET command.來實(shí)時(shí)修改。
sentinel monitor resque 192.168.1.3 6380 4
sentinel down-after-milliseconds resque 10000
sentinel failover-timeout resque 180000
sentinel parallel-syncs resque 5

注意點(diǎn):

Redis-sentinel必須使用配置文件啟動,重啟需要根據(jù)配置文件恢復(fù),默認(rèn)打開26379端口,sentinel之間必須開放端口訪問,方便相互訪問。

四、Sentinel工作流程

1、首先sentinel之間是通過redis的pub/subscribe機(jī)制實(shí)現(xiàn)動態(tài)感知。

怎么解析Redis中的哨兵模式原理怎么解析Redis中的哨兵模式原理

客觀下線:

當(dāng)主觀下線的節(jié)點(diǎn)是主節(jié)點(diǎn)時(shí),哨兵節(jié)點(diǎn)會通過指令sentinel is-masterdown-by-addr尋求其它哨兵節(jié)點(diǎn)對主節(jié)點(diǎn)的判斷,當(dāng)超過quorum(在sentinel配置中配置的法定人數(shù))個(gè)數(shù),此時(shí)哨兵節(jié)點(diǎn)則認(rèn)為該主節(jié)點(diǎn)確實(shí)有問題,這樣就客觀下線了,大部分哨兵節(jié)點(diǎn)都同意下線操作,也就說是客觀下線。

注意客觀下線只針對master節(jié)點(diǎn)生效,它會觸發(fā)故障轉(zhuǎn)移

3,master下線了,需要進(jìn)行故障轉(zhuǎn)移

這里又分為兩步,首先需要選擇sentinel哨兵主節(jié)點(diǎn),通過sentinel主節(jié)點(diǎn)來進(jìn)行redis的故障轉(zhuǎn)移。

首先是sentinel選舉領(lǐng)導(dǎo)者。使用raft算法(狀態(tài)共識算法)。

每一個(gè)Sentinel節(jié)點(diǎn)都可以成為Leader,當(dāng)一個(gè)Sentinel節(jié)點(diǎn)確認(rèn)redis集群的主節(jié)點(diǎn)主觀下線后,會請求其他Sentinel節(jié)點(diǎn)要求將自己選舉為Leader。被請求的Sentinel節(jié)點(diǎn)如果沒有同意過其他Sentinel節(jié)點(diǎn)的選舉請求,則同意該請求(選舉票數(shù)+1),否則不同意。

如果一個(gè)Sentinel節(jié)點(diǎn)獲得的選舉票數(shù)達(dá)到Leader最低票數(shù)(quorum和Sentinel節(jié)點(diǎn)數(shù)/2+1的最大值),則該Sentinel節(jié)點(diǎn)選舉為Leader;否則重新進(jìn)行選舉。

Raft核心思想:先到先得,少數(shù)服從多數(shù)。

sentinel選舉出主節(jié)點(diǎn)后,sentinel主節(jié)點(diǎn)需要選舉出redis集群主節(jié)點(diǎn),構(gòu)建新的集群關(guān)系。

選舉新redis主節(jié)點(diǎn)的依據(jù)是:

1、與sentinel斷開連接的時(shí)間。過濾發(fā)現(xiàn)與主sentinel服務(wù)器斷開連接的時(shí)間超過配置的主機(jī)超時(shí)時(shí)間down-after-milliseconds的副本slaves

2、副本優(yōu)先級。 優(yōu)先選擇replica-priority低的。

3、如果優(yōu)先級相同,已處理復(fù)制偏移量。越大越優(yōu)先,這個(gè)更符合業(yè)務(wù)場景功能。

4、如果復(fù)制offset相同,就看運(yùn)行ID。優(yōu)先選擇小的。

選擇出master節(jié)點(diǎn)后,開始維護(hù)集群關(guān)系。

1、sentinel節(jié)點(diǎn),向新主節(jié)點(diǎn)發(fā)送,slave no one命令,讓它成為獨(dú)立節(jié)點(diǎn)

2、sentinel節(jié)點(diǎn),向其他節(jié)點(diǎn)發(fā)送 slaveof ip port,跟隨到主節(jié)點(diǎn)

五、總結(jié)

通過上面的分析,sentinel通過定時(shí)監(jiān)控手段,可以實(shí)現(xiàn)自動故障轉(zhuǎn)移,不過sentinel還是有一些問題,比如單個(gè)master節(jié)點(diǎn)情況下,數(shù)據(jù)存在丟失的可能,并且如果單機(jī)性能有限,也沒有橫向擴(kuò)展的能力。

看完上述內(nèi)容,你們對怎么解析Redis中的哨兵模式原理有進(jìn)一步的了解嗎?如果還想了解更多知識或者相關(guān)內(nèi)容,請關(guān)注億速云行業(yè)資訊頻道,感謝大家的支持。

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

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

AI