Redis主從複製有一個很大的缺點就是沒有辦法對 master 進行動態選舉(當 master 掛掉後,會經過必定的機制,從 slave 中選舉出一個新的 master),須要使用 Sentinel 機制完成動態選舉。服務器
Sentinel哨兵主要解決如下問題:cdn
- 監控,監控每一個節點以及哨兵運行狀態
- 報警,當發現某個節點或哨兵出現問題,通知其餘哨兵
- 自動故障轉化,當主節點宕機時,哨兵從原主節點下的全部可用從節點中選舉出一個做爲主節點,原主節點降爲從節點,並將其餘從節點的主節點配置改成指定新主節點
- 配置中心,客戶端初始化鏈接的是哨兵節點集合
哨兵配置以下:blog
哨兵工做原理:進程
- 每一個 Sentinel(哨兵)進程以每秒鐘一次的頻率向整個集羣中的 Master 主服務器,Slave 從服務器以及其餘 Sentinel(哨兵)進程發送一個 PING 命令。(此處咱們尚未講到集羣,下一章節就會講到,這一點並不影響咱們模擬哨兵機制)
- 若是一個實例(instance)距離最後一次有效回覆 PING 命令的時間超過 down-after-milliseconds 選項所指定的值, 則這個實例會被 Sentinel(哨兵)進程標記爲主觀下線(SDOWN)。
- 若是一個 Master 主服務器被標記爲主觀下線(SDOWN),則正在監視這個 Master 主服務器的全部 Sentinel(哨兵) 進程要以每秒一次的頻率 確認 Master 主服務器的確進入了主觀下線狀態。
- 當 有足夠數量的 Sentinel(哨兵) 進程(大於等於配置文件指定的值)在指定的時間範圍內確認 Master 主服務器進入了主觀下線狀態(SDOWN), 則 Master 主服務器會被標記爲 客觀下線(ODOWN)。
- 在通常狀況下, 每一個 Sentinel(哨兵)進程會以每 10 秒一次的頻率向集羣中的全部Master 主服務器、Slave 從服務器發送 INFO 命令。
- 當 Master 主服務器被 Sentinel(哨兵)進程標記爲 客觀下線(ODOWN) 時,Sentinel(哨兵)進程向下線的 Master 主服務器的全部 Slave 從服務器發送 INFO 命令的頻率會從 10 秒一次改成每秒一次。
- 若沒有足夠數量的 Sentinel(哨兵)進程贊成 Master 主服務器下線, Master 主服務器的客觀下線狀態就會被移除。若 Master 主服務器從新向 Sentinel(哨兵)進程發送 PING 命令返回有效回覆,Master 主服務器的主觀下線狀態就會被移除。