Redis的 Sentinel 系統用於管理多個Redis服務器, 該系統執行以下三個任務:
監控(Monitoring)
提醒(Notification)
自動故障遷移(Automatic failover)
Sentinel 是一個分布式系統,可以在一個架構中運行多個 Sentinel 實例,使用流言協議(gossip protocols)來接收關於主服務器是否下線的信息, 並使用投票協議(agreement protocols)來決定是否執行自動故障遷移, 以及選擇哪個從服務器作為新的主服務器。
啟動Sentinel:
• 通過 redis -sentinel 啟動redis-sentinel /path/to/sentinel.conf
• 通過 redis -server 啟動redis-server /path/to/sentinel.conf--sentinel
Sentinel配置項
• sentinel announce- ip < ip >• sentinel announce-port <port>• sentinel monitor <master-name> < ip > < redis -port> <quorum>• sentinel auth-pass <master-name> <password>• sentinel down-after-milliseconds <master-name> <milliseconds>• sentinel parallel-syncs <master-name> < numslaves >• sentinel failover-timeout <master-name> <milliseconds>• sentinel notification-script <master-name> <script-path>• sentinel client- reconfig -script <master-name> <script-path>
1.Sentinel創建命令連接和訂閱連接
sentinel與master、slave創建命令連接和訂閱連接
sentinel與其他sentinel只創建命令連接
2.Sentinel發送消息
sentinel定期向master、slave發送INFO命令
sentinel定期向master、slave和sentinel發送ping命令
sentinel定期向master發送publish hello命令
hello:sentinel_ip,sentinel_port,sentinel_runid,current_epoch,
master_name,master_ip,master_port,master_config_epoch
3.Master下線檢測
(1) sentinel檢測到master超時,標記為主觀下線
(2) sentinel向其他sentinel詢問master是否下線
(3) 超過quorum數量的sentinel認為下線,標記master為客觀下線
(4) sentinel進行投票選舉leader







備注:1.如果兩個sentinel有一個sentinel斷掉,另一個sentinel的選舉leader將永遠失敗
2. sentinel不能識別slave中的127.0.0.1地址;
3.修改sentinel模式下的實例角色時,也需要修改sentinel和實例的配置;
4.被sentinel監控的slave,使用slaveof命令無效;
5. sentinel無法將slave當做master作為監控對象
6. sentinel故障遷移中,slave重配超時后sentinel向其他slave發送的slaveof命令被丟棄
sentinel在執行故障遷移中,當被選中的slave升級為master后,其它slave需要重新配置到新master上,如果slave重配到新master超時,sentinel會向該slave發送slaveof命令將slave再次重新配置到新master上,並將命令放到待發緩沖中等待讀寫事件處理器處理,這時sentinel修改自己保持的實例狀態將舊master實例切換到了新master實例,在切換過程中sentinel將slave實例釋放掉(同時也釋放了命令發送連接),導致之前發送的slaveof命令還沒發送已經被清空。該slave只能等待sentinel通過INFO命令發現它的master不是新master時再次向它發送slaveof命令。