Redis大亂探------哨兵(二)

1.1前言

        前一篇文章中,咱們分析了主從複製的原理,可是在該模式下,一旦主節點因爲故障沒法提供服務,須要人工干預才能將從節點變爲主節點,所以該模式不是高可用的。欣慰的是,Redis從2.8開始正式提供哨兵架構來解決這個問題。算法

1.2哨兵

        當主節點出現故障時,哨兵(Redis Sentinel)模式下能自動完成故障發現和故障轉移,並通知應用方,從而實現真正的高可用。架構

1.2.1故障發現

  • Sentinel節點每隔1秒鐘向主節點發動ping命令判斷其存活狀態,當主節點在down-after-milliseconds時間內沒有正確的響應,則Sentinel將此主節點置爲「主觀下線」。主觀即當前Sentinel節點單方面認爲主節點不可用,並無獲得其餘Sentinel節點的確認。
  • 隨後該Sentinel節點會經過 is-master-down-by-addr命令向其餘Sentinel節點進行確認。當確認的Sentinel節點數>=quorum時,則該Sentinel節點認定該主節點「客觀下線」。
  • 當斷定主節點爲客觀下線時,須要選取一個Sentinel節點做爲領導者來處理故障轉移工做。Redis使用了Raft算法實現領導者選舉。大體選舉流程以下:首先Sentinel節點確認主節點主觀下線時,會像其餘Sentinel節點發送is-master-down-by-addr命令,要求將本身設置爲領導者。而後收到該命令的Sentinel節點,若是沒有贊成過其餘Sentinel節點的命令,則贊成該請求,不然拒絕。最後若是該Sentinel節點若是收到超過一半的意向贊成,則成爲領導者,若是本回合沒有選出領導者,則開啓下一回合。

1.2.2故障轉移

        步驟以下:spa

  • 在從節點列表中選出一個節點做爲新的主節點(1.先過濾掉不健康節點。2.選擇從節點優先級最高的從節點,最在則返回,不然繼續第三步。3.選擇複製偏移量最大的節點,即複製最完整的節點,不存在則繼續第四步。4.選擇runid最小的從節點)。
  • 將上面選出來的從節點執行slaveof no one  命令,讓其成爲主節點。
  • Sentinel領導者節點向剩餘的從節點發送命令,讓他們成爲新主節點的從節點。

1.3總結

        哨兵機制可以自動完成故障發現和故障轉移,有效的解決了Redis的高可用問題。ast

相關文章
相關標籤/搜索