Sentinel哨兵

一、概述

Sentinel(哨兵、哨崗)是Redis的高可用性解決方案。由一個或多個Sentinel實例組成的Sentinel系統

Redis Sentinel 是一個分佈式系統, 你可以在一個架構中運行多個 Sentinel 進程(progress), 這些進程使用流言協議(gossip protocols)來接收關於主服務器是否下線的信息, 並使用投票協議(agreement protocols)來決定是否執行自動故障遷移, 以及選擇哪個從服務器作爲新的主服務器。

Redis的哨兵(sentinel) 系統用於管理多個 Redis 服務器,該系統執行以下三個任務:

監控(Monitoring): 哨兵(sentinel) 會不斷地檢查你的Master和Slave是否運作正常。
提醒(Notification):當被監控的某個 Redis出現問題時, 哨兵(sentinel) 可以通過 API 向管理員或者其他應用程序發送通知。

自動故障遷移(Automatic failover):當一個Master不能正常工作時,哨兵(sentinel) 會開始一次自動故障遷移操作,它會將失效Master的其中一個Slave升級爲新的Master, 並讓失效Master的其他Slave改爲複製新的Master; 當客戶端試圖連接失效的Master時,集羣也會向客戶端返回新Master的地址,使得集羣可以使用Master代替失效Master。


二、爲什麼需要用到哨兵?

哨兵(Sentinel)主要是爲了解決在主從複製架構中出現宕機的情況,主要分爲兩種情況:1.主服務器宕機 2.從服務器宕機

從Redis宕機

這個相對而言比較簡單,在Redis中從庫重新啓動後會自動加入到主從架構中,自動完成同步數據。在Redis2.8版本後,主從斷線後恢復的情況下實現增量複製。

主Redis宕機

這個相對而言就會複雜一些,需要以下2步才能完成
i.第一步,在從數據庫中執行SLAVEOF NO ONE命令,斷開主從關係並且提升爲主庫繼續服務
ii.第二步,將主庫重新啓動後,執行SLAVEOF命令,將其設置爲其他庫的從庫,這時數據就能更新回來

由於這個手動完成恢復的過程其實是比較麻煩的並且容易出錯,所以Redis提供的哨兵(sentinel)的功能來解決.
[外鏈圖片轉存失敗,源站可能有防盜鏈機制,建議將圖片保存下來直接上傳(img-faiBCYxv-1575106638872)(redis/6.jpg)]


三、Sentinel狀態持久化
snetinel的狀態會被持久化地寫入sentinel的配置文件中。每次當收到一個新的配置時,或者新創建一個配置時,配置會被持久化到硬盤中,並帶上配置的版本戳。這意味着,可以安全的停止和重啓sentinel進程。

四、主觀下線和客觀下線

默認情況下,每個 Sentinel 節點會以 每秒一次 的頻率對 Redis 節點和 其它Sentinel 節點發送 PING 命令,並通過節點的 回覆 來判斷節點是否在線。

  • 主觀下線

主觀下線 適用於所有 主節點從節點。如果在 down-after-milliseconds (Sentinel配置文件中的down-after-milliseconds判斷實例進入主觀下線的所需的時間長度)毫秒內,Sentinel 沒有收到 目標節點 的有效回覆,則會判定 該節點主觀下線

  • 客觀下線

客觀下線 只適用於 主節點。如果 主節點 出現故障,Sentinel 節點會通過 sentinel is-master-down-by-addr 命令,向其它 Sentinel 節點詢問對該節點的 狀態判斷。如果超過 <quorum> 個數的節點判定 主節點 不可達,則該 Sentinel 節點會判斷 主節點客觀下線

五、semtinel 工作原理

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

  • 每個 Sentinel每秒鐘 一次的頻率,向它所知的 主服務器從服務器 以及其他 Sentinel 實例 發送一個 PING 命令。

img

1.如果一個 實例instance)距離 最後一次 有效回覆 PING 命令的時間超過 down-after-milliseconds 所指定的值,那麼這個實例會被 Sentinel 標記爲 主觀下線

img

2.如果一個 主服務器 被標記爲 主觀下線,那麼正在 監視 這個 主服務器 的所有 Sentinel 節點,要以 每秒一次 的頻率確認 主服務器 的確進入了 主觀下線 狀態。

img

3.如果一個 主服務器 被標記爲 主觀下線,並且有 足夠數量Sentinel(至少要達到 配置文件 指定的數量)在指定的 時間範圍 內同意這一判斷,那麼這個 主服務器 被標記爲 客觀下線

img

4.在一般情況下, 每個 Sentinel 會以每 10 秒一次的頻率,向它已知的所有 主服務器從服務器 發送 INFO 命令。當一個 主服務器Sentinel 標記爲 客觀下線 時,Sentinel下線主服務器 的所有 從服務器 發送 INFO 命令的頻率,會從 10 秒一次改爲 每秒一次

img

6.監視這個下線服務器的Sentinel 和其他 Sentinel 協商 主節點 的狀態,如果 主節點 處於 SDOWN 狀態,則投票自動選出新的 主節點。將剩餘的 從節點 指向 新的主節點 進行 數據複製

img

7.當沒有足夠數量的 Sentinel 同意 主服務器 下線時, 主服務器客觀下線狀態 就會被移除。當 主服務器 重新向 SentinelPING 命令返回 有效回覆 時,主服務器主觀下線狀態 就會被移除。

img

注意:一個有效的 PING 回覆可以是:+PONG-LOADING 或者 -MASTERDOWN。如果 服務器 返回除以上三種回覆之外的其他回覆,又或者在 指定時間 內沒有回覆 PING 命令, 那麼 Sentinel 認爲服務器返回的回覆 無效non-valid)。

參考博客:https://juejin.im/post/5b7d226a6fb9a01a1e01ff64

https://blog.csdn.net/macro_g/article/details/82593996

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