Redis 的哨兵機制

1.故障遷移

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) 是一個分佈式系統,你可以在一個架構中運行多個哨兵 (sentinel) 進程 , 這些進程使用流言協議 (gossipprotocols) 來接收關於 Master 是否下線的信息,並使用投票協議 (agreement protocols) 來決定是否執行自動故障遷移,以及選擇哪個 Slave 作爲新的 Master。

2.主客觀宕機

關於 redis 哨兵判斷監視節點是否宕機的原理

Redis 哨兵 Sdown,Odown:兩種失敗狀態

  • sdown 是主觀宕機,就一個哨兵如果自己覺得一個 master 宕機了,那麼就是主觀宕機

  • odown 是客觀宕機,如果 quorum 數量的哨兵都覺得一個 master 宕機了,那麼就是客觀宕機

sdown 達成的條件很簡單,如果一個哨兵 ping 一個 master,超過了 is-master-down-after-milliseconds 指定的毫秒數之後,就主觀認爲 master 宕機

sdown 到 odown 轉換的條件很簡單,如果一個哨兵在指定時間內,收到了 quorum 指定數量的其他哨兵也認爲那個 master 是 sdown 了,那麼就認爲是 odown 了,客觀認爲 master 宕機

3.哨兵的工作方式

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

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

  • 如果一個 Master 被標記爲主觀下線,則正在監視這個 Master 的所有 Sentinel 要以每秒一次的頻率確認 Master 的確進入了主觀下線狀態。

  • 當有足夠數量的 Sentinel(大於等於配置文件指定的值)在指定的時間範圍內確認 Master 的確進入了主觀下線狀態, 則 Master 會被標記爲客觀下線 。

  • 在一般情況下, 每個 Sentinel 會以每 10 秒一次的頻率向它已知的所有 Master,Slave 發送 INFO 命令 。

  • 當 Master 被 Sentinel 標記爲客觀下線時,Sentinel 向下線的 Master 的所有 Slave 發送 INFO 命令的頻率會從 10 秒一次改爲每秒一次 。

  • 若沒有足夠數量的 Sentinel 同意 Master 已經下線, Master 的客觀下線狀態就會被移除。

  • 若 Master 重新向 Sentinel 的 PING 命令返回有效回覆, Master 的主觀下線狀態就會被移除。

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