Redis Sentinel

Sentinel是一個管理多個Redis實例的工具,它可以實現對 Redis的監控通知自動故障轉移

Sentinel 架構示意圖:

主從複製的問題

主從複製可以使得從節點作爲主節點的備份節點,隨時替代主節點進行服務。同時作爲主節點的讀負載均衡。

主從複製同時存在以下幾個問題:

  • 一旦主節點宕機,從節點晉升成主節點,同時需要修改應用方的 主節點地址,還需要命令所有從節點去複製新的主節點,整個過程需要人工干預
  • 主節點的寫能力受到單機的限制。
  • 主節點的存儲能力受到單機的限制。
  • 原生複製的弊端在早期的版本中也會比較突出,比如:Redis 複製中斷後,從節點發起 psync。此時如果同步不成功,則會進行全量同步,主庫執行全量備份的同時,可能會造成毫秒或秒級的卡頓。

Sentinel的作用

Sentinel是獨立於主從節點的另一臺服務器,主要用於:

  • 監控
    不斷ping主從節點,監控主從節點的是否正常運行
  • 通知
    當主從節點出現問題時,Sentinel會主動回調配置好的腳本,腳本可以通知管理員解決問題
  • 自動故障轉移
    當主節點不能正常提供服務時,Sentinel會選舉一個從節點作爲主節點,完成故障轉移。
  • 配置提供者
    客戶端應用直接連接Sentinel,從中獲取主節點信息。

Sentinel通信命令

  • 與Sentinel:
命令 作用
PING Sentinel 向 Redis 節點發送 PING 命令,檢查節點的狀態
INFO Sentinel 向 Redis 節點發送 INFO 命令,獲取它的從節點信息
PUBLISH Sentinel 向其監控的 Redis 節點 __sentinel__:hello 這個 channel發佈自己的信息及主節點相關的配置
SUBSCRIBE Sentinel 通過訂閱Redis主節點和從節點的__sentinel__:hello這個 channnel,獲取正在監控相同服務的其他 Sentinel節點
  • 與主從節點:
命令 作用
PING Sentinel 向其他 Sentinel 節點發送 PING 命令,檢查節點的狀態
SENTINEL:is-master-down-by-addr 和其他 Sentinel 協商 主節點 的狀態,如果 主節點 處於 SDOWN 狀態,則投票自動選出新的主節點

Sentinel 工作原理

每個 Sentinel 節點都需要定期執行以下任務:

  • 每個Sentinel以每秒鐘一次的頻率,向它所知的主服務器、從服務器以及其他Sentinel實例發送一個 PING 命令。
  • 如果一個實例(instance)距離最後一次有效回覆PING命令的時間超過down-after-milliseconds所指定的值,那麼這個實例會被Sentinel標記爲主觀下線。
  • 如果一個 主服務器被標記爲主觀下線,那麼正在監視這個主服務器的所有Sentinel 節點,要以每秒一次的頻率確認主服務器的確進入了主觀下線狀態。
  • 在一般情況下, 每個 Sentinel 會以每 10 秒一次的頻率,向它已知的所有 主服務器 和 從服務器 發送 INFO 命令。當一個 主服務器 被 Sentinel 標記爲 客觀下線 時,Sentinel 向 下線主服務器 的所有 從服務器 發送 INFO 命令的頻率,會從 10 秒一次改爲 每秒一次。
  • Sentinel 和其他 Sentinel 協商 主節點 的狀態,如果 主節點 處於 SDOWN 狀態,則投票自動選出新的 主節點。將剩餘的 從節點 指向 新的主節點 進行 數據複製。
  • 當沒有足夠數量的 Sentinel 同意 主服務器 下線時, 主服務器 的 客觀下線狀態 就會被移除。當 主服務器 重新向 Sentinel 的 PING 命令返回 有效回覆 時,主服務器 的 主觀下線狀態 就會被移除。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章