redis健康檢查與故障轉移


哨兵三個定時監控任務

  1. 每隔10s每隔sentinel節點會向主節點和從節點發送info命令獲取最新的拓撲結構
  2. 每隔2S,每個sentinel節點會向redis數據節點的__sentiel__:hellp發送sentinel節點信息,用於了解新節點相關信息,如果是新節點則將其保存下來。並與其建立連接。
  3. 每隔1S,每隔sentinel節點會向主節點和從節點其余的sentinel節點發送平命令作為心跳監測,來確定這些節點是否可達。

總結

  1. 每隔10s發送獲取拓撲心跳
  2. 每隔2S獲取新節點數據
  3. 每隔1S監測節點和哨兵通信正常

下線規則

  1. 主觀下線:涉及down-after-millseconds參數,如果某一個哨兵與某一個redis節點在這個參數時間中沒有連接成功,則說明有問題,則下線
  2. 客觀下線:如果通過主觀下線的是主節點的時候,由於涉及到后面的leader選舉,則需要進行客觀判斷,,通過參數is-master-down-by-addr向所有的哨兵節點詢問,如果大部分都認為該節點有問題,則進行下線操作。

sentinel選舉

Raft

  1. 發送 is-master-down-by-addr進行要求將自己設置為leader.
  2. 收到命令的sentinel會判斷,如果其沒有同意過其他的sentinel節點的命令則同意,否則拒絕
  3. 如果該sentinel發現自己的票數大於等於max(quorum,num(sentinels)/2);則將成為領導者
  4. 將進入下一次選舉

總結 選舉的過程非常快,基本上誰先完成客觀下線,則誰就是領導者

故障轉移

當sentinel選舉完成后,需要對數據進行同步,則會出現選舉redis主節點

  1. 過濾(主觀下線,斷線)的節點
  2. 選擇slave-priority優先級搞的節點列表,如果存在則返回,不存在則繼續
  3. 選擇復制偏移量最大的從節點,如果存在則返回,不存在則繼續
  4. 選擇runid最小的從節點

總結 過濾無用節點->選擇優先級高->選擇偏移量大->選擇runid最小


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM