面試必問,redis高可用原理,哨兵機制詳解 一、什麼是高可用? 二、什麼是哨兵機制 三、redis哨兵機制的實現

一、什麼是高可用?

1、什麼是高可用

redis已經實現主從複製了,即使掛了一臺或者服務硬盤壞掉,數據存在同步備份。那它還不是高可用嗎?當然!不是~

高可用的定義一般有以下兩個解釋:

解釋1:它與被認爲是不間斷操作的容錯技術有所不同。是目前企業防止核心系統因故障而無法工作的最有效保護手段

解釋2:高可用一般指服務的冗餘,一個服務掛了,可以自動切換到另外一個服務上,不影響客戶體驗。

主要就是當我們服務存在異常的時候,可以自動進行容錯或者抵抗異常,從而達到不影響到用戶正常使用的一種技術

2、主從複製是否高可用分析

1,主從複製,若主節點出現問題,則不能提供服務,需要人工修改配置將從變主

A,主節點(master)故障,從節點slave-1端執行 slaveof no one後變成新主節點;

B,其它的節點成爲新主節點的從節點,並從新節點複製數據;

C,需要人工干預,無法實現高可用。

2,主從複製主節點的寫能力單機,能力有限

3,單機節點的存儲能力也有限

因此,主從複製並不能滿足我們高可用的要求。

二、什麼是哨兵機制

Sentinel(哨兵)是Redis 的高可用性解決方案:由一個或多個Sentinel 實例 組成的Sentinel 系統可以監視任意多個主服務器,以及這些主服務器屬下的所有從服務器,並在被監視的主服務器進入下線狀態時,自動將下線主服務器屬下的某個從服務器升級爲新的主服務器。

原理:當主節點出現故障時,由Redis Sentinel自動完成故障發現和轉移,並通知應用方,實現高可用性

三、redis哨兵機制的實現

1、哨兵主要任務

哨兵主要有三個定時監控任務完成對各節點的發現和監控。

任務1:每個哨兵節點每10 秒會向主節點和從節點發送info 命令獲取最拓撲結構圖,哨兵配置時只要配置對主節點的監控即可,通過向主節點發送info,獲取從節點的信息,並當有新的從節點加入時可以馬上感知到

任務2,每個哨兵節點每隔2 秒會向redis 數據節點的指定頻道上發送該哨兵節點對於主節點的判斷以及當前哨兵節點的信息,同時每個哨兵節點也會訂閱該頻道,來了解其它哨兵節點的信息及對主節點的判斷,其實就是通過消息publish 和subscribe 來完成的;

任務3,每隔1 秒每個哨兵會向主節點、從節點及其餘哨兵節點發送一次ping 命令做一次心跳檢測,這個也是哨兵用來判斷節點是否正常的重要依據

2、哨兵發現服務下線

哨兵主觀下線

主觀下線:剛我知道哨兵節點每隔 1 秒對主節點和從節點、其它哨兵節點發送 ping 做心跳檢測,當這些心跳檢測時間超過 down-after-milliseconds 時,哨兵節點則認爲該節點 錯誤或下線,這叫主觀下線;當然這但不代表這個master真的不能用(有可能網絡波動導致該哨兵與服務連接異常),所以主觀下線是不可靠的,可能存在誤判

哨兵客觀下線

客觀下線:當主觀下線的節點是主節點時,此時該哨兵3 節點會通過指令sentinelis-masterdown-by-addr 尋求其它哨兵節點對主節點的判斷,當超過quorum(法定人數)個數,此時哨兵節點則認爲該主節點確實有問題,這樣就客觀下線了,大部分哨兵節點都同意下線操作,也就說是客觀下線

一般來說客觀下線滿足大多數原則,因此是可靠的判斷。

3、領導者哨兵選舉流程

a,每個在線的哨兵節點都可以成爲領導者,當它確認(比如哨兵3)主節點下線時,會向其它哨兵發is-master-down-by-addr 命令,徵求判斷並要求將自己設置爲領導者,由領導者處理故障轉移;
b,當其它哨兵收到此命令時,可以同意或者拒絕它成爲領導者;
c,如果哨兵3 發現自己在選舉的票數大於等num(sentinels)/2+1 時,將成爲領導者,如果沒有超過,繼續選舉…………

4、服務故障處理

A、由Sentinel節點定期監控發現主節點是否出現了故障

sentinel會向master發送心跳PING來確認master是否存活,如果master在“一定時間範圍”內不迴應PONG 或者是回覆了一個錯誤消息,那麼這個sentinel會主觀地(單方面地)認爲這個master已經不可用了

B,當主節點出現故障,此時3 個Sentinel 節點共同選舉了Sentinel3 節點爲領導,負載處理主節點的故障轉移,

C,由Sentinel3領導者節點執行故障轉移,過程和主從複製一樣,但是自動執行

最後集羣架構如下

5,故障轉移選舉節點選擇

主要流程如下

A,過濾掉不健康的(下線或斷線),沒有回覆過哨兵 ping 響應的從節點
B,選擇 slave-priority 從節點優先級最高(redis.conf)
C,選擇複製偏移量最大,指複製最完整的從節點

作者:Dark_King_
原文鏈接:https://blog.csdn.net/b379685397/article/details/109151128

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章