Redis Sentinel 架構原理詳解(一)

Redis Sentinel 簡介

redis主從複製模式下,一旦主節點故障不能提供服務,需要人工將從節點晉升爲主節點,再通知所有的程序把master地址統統改一遍,然後重新上線。毫無疑問,這種故障處理的方法是效率低下的,無法接受。於是,redis從 2.8 開始正式提供了sentinel 架構來解決這個問題。redis sentinel是redis的高可用實現方案,多個sentinel 進程協同工作,組成了一套分佈式的架構,它負責持續監控主從節點的健康狀況,當主節點掛掉時,自動選擇一個最優的從節點切換爲主節點。客戶端來連接集羣時,會首先連接 sentinel,通過sentinel來查詢主節點的地址,然後再去連接主節點進行數據交互。當主節點發生故障時,客戶端會重新向 sentinel要地址,sentinel會將最新的主節點地址告訴客戶端。這樣應用程序將無需重啓即可自動完成節點切換。

主從切換的過程

每個 sentinel節點通過定期監控master的健康狀況。

 主節點出現故障,兩個從節點與主節點失去連接,主從複製失敗。

sentinel集羣發現master故障後,多個sentinel節點對主節點的故障達成一致,在3個 sentinel 節點中選擇一個作爲leader ,例如,選舉出sentinel-0 節點作爲 leader,來負責故障轉移。

leader sentinel 把一個slave節點提升爲master,並讓另一個slave從新的master複製數據,並告知客戶端新的master的信息。

 故障的舊master上線後,leader sentinel讓它從新的master複製數據。

以上就是sentinel集羣進行故障轉移的整體流程,具體的一些細節還會詳細介紹,這裏先總結一下sentinel集羣在redis主從架構高可用中起到的 4 個作用:

  • 集羣監控    sentinel節點會定期檢測 redis 數據節點、其餘 sentinel 節點是否故障。
  • 故障轉移    實現從節點晉升爲主節點並維護後續正確的主從關係。
  • 配置中心    sentinel 架構中,客戶端在初始化的時候連接的是 sentinel 集羣,從中獲取主節點信息。
  • 消息通知    sentinel 節點會將故障轉移的結果通知給客戶端。

此外,使用sentinel集羣而不是單個sentinel節點去監控redis主從架構有兩個好處:

  • 對於節點的故障判斷由多個sentinel節點共同完成,這樣可以有效地防止誤判。
  • sentinel集羣可以保證自身的高可用性,即某個sentinel節點自身故障也不會影響sentinel 集羣的健壯性。

總結

上面介紹了redis哨兵架構的基礎知識,包括主從切換的過程,sentinel集羣在redis主從架構高可用中的作用。後續會和大家一起學習sentinel集羣的監控功能細節,欲知後續如何,且聽下回分解。

 

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