Redis哨兵機制(Sentinel)

1. 爲什麼要有哨兵機制?

	哨兵機制的出現是爲了解決主從複製的缺點的

2. 哨兵機制(sentinel)的高可用
原理:當主節點出現故障時,由Redis Sentinel自動完成故障發現和轉移,並通知應用方,實現高可用性。
在這裏插入圖片描述
其實整個過程只需要一個哨兵節點來完成,首先使用Raft算法(選舉算法)實現選舉機制,選出一個哨兵節點來完成轉移和通知
3. 哨兵的定時監控任務
任務1:每個哨兵節點每10秒會向主節點和從節點發送info命令獲取最拓撲結構圖,哨兵配置時只要配置對主節點的監控即可,通過向主節點發送info,獲取從節點的信息,並當有新的從節點加入時可以馬上感知到
在這裏插入圖片描述
任務2:每個哨兵節點每隔2秒會向redis數據節點的指定頻道上發送該哨兵節點對於主節點的判斷以及當前哨兵節點的信息,同時每個哨兵節點也會訂閱該頻道,來了解其它哨兵節點的信息及對主節點的判斷,其實就是通過消息publish和subscribe來完成的
在這裏插入圖片描述
任務3:每隔1秒每個哨兵會向主節點、從節點及其餘哨兵節點發送一次ping命令做一次心跳檢測,這個也是哨兵用來判斷節點是否正常的重要依據
在這裏插入圖片描述
客觀下線:當主觀下線的節點是主節點時,此時該哨兵3節點會通過指令sentinel is-masterdown-by-addr尋求其它哨兵節點對主節點的判斷,當超過quorum(選舉)個數,此時哨兵節點則認爲該主節點確實有問題,這樣就客觀下線了,大部分哨兵節點都同意下線操作,也就說是客觀下線
在這裏插入圖片描述
4. 領導者哨兵選舉流程
a)每個在線的哨兵節點都可以成爲領導者,當它確認(比如哨兵3)主節點下線時,會向其它哨兵發is-master-down-by-addr命令,徵求判斷並要求將自己設置爲領導者,由領導者處理故障轉移;
b)當其它哨兵收到此命令時,可以同意或者拒絕它成爲領導者;
c)如果哨兵3發現自己在選舉的票數大於等於num(sentinels)/2+1時,將成爲領導者,如果沒有超過,繼續選舉…………
在這裏插入圖片描述
5. 故障轉移機制
a)由Sentinel節點定期監控發現主節點是否出現了故障

sentinel會向master發送心跳PING來確認master是否存活,如果master在“一定時間範圍”內不迴應PONG 或者是回覆了一個錯誤消息,那麼這個sentinel會主觀地(單方面地)認爲這個master已經不可用了
在這裏插入圖片描述
b) 當主節點出現故障,此時3個Sentinel節點共同選舉了Sentinel3節點爲領導,負載處理主節點的故障轉移
在這裏插入圖片描述
c) 由Sentinel3領導者節點執行故障轉移,過程和主從複製一樣,但是自動執行
在這裏插入圖片描述
流程:

     1. 將slave-1脫離原從節點,升級主節點

     2. 將從節點slave-2指向新的主節點

     3. 通知客戶端主節點已更換

     4. 將原主節點(oldMaster)變成從節點,指向新的主節點

d) 故障轉移後的redis sentinel的拓撲結構圖
在這裏插入圖片描述
6. 哨兵機制-故障轉移詳細流程-確認主節點

a) 過濾掉不健康的(下線或斷線),沒有回覆過哨兵ping響應的從節點

b) 選擇salve-priority從節點優先級最高(redis.conf)的

c) 選擇複製偏移量最大,指複製最完整的從節點

文章提取自:https://www.cnblogs.com/leeSmall/p/8398401.html

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