引入
在主從模型中講到
一旦Master宕機失效,需要手動將Slave角色提升為Master,否則這個子集群將不可用。
這個缺陷使得系統可用性大大降低。因此Redis專門提供了一個哨兵機制來實現自動故障檢測和轉移。
什么是哨兵
哨兵(Sentinel)是一種特殊的Redis實例,與Redis存儲實例一樣,哨兵同樣是基於配置的。
你可以通過以下兩種方式啟動哨兵:
redis-sentinel /path/to/sentinel.conf
redis-server /path/to/sentinel.conf --sentinel
哨兵需要做什么
- 監控節點狀態
- 當Master節點故障時,自動提升Replication(Slave)為Master
- 發送故障通知
- 配置傳播(就是把更新后的集群配置傳播給其他哨兵進行更新,保持一致性)
怎么實現
- 節點監控
如圖(圖中S為Sentinel,M為Master,R為Replication即Slave),Sentinel模型集群中的每個Sentinel都在監控着每個節點,每隔一段時間會向每個節點發送PING,通過返回的PONG信息確認節點正常。

Sentinel與監控的節點之間實現了SUB/PUB(發布訂閱)機制,每次Sentinel發布PING消息只需要在頻道上發布並接收訂閱者返回的消息。
- 故障檢測與Failover
在這里有兩個重要概念:主觀下線(sdown)以及客觀下線(odown)。因為Sentinel的數量>=2,並且每個Sentinel都在監控着每個節點,因此Sentinel與節點之間的連接都存在着主觀性,這個主觀性取決於Sentinel與節點之間的網絡連通性。對於單個Sentinel而言,當其通過PING發現某個節點無反應時,其認為節點為下線狀態,由於這個決定是這個Sentinel主觀認為的,因此將此決斷稱為主觀下線(sdown)。當Sentinel中認為某個節點主觀下線的數量超過某個值時:- 1.投票選舉Sentinel
- 2.選出Slave,提升為Master,並將更新后的配置廣播給其他Sentinel,Master將同步下屬Slave數據
參考文獻
[1]redisLab.[EB/OL]. https://redis.io/topics/sentinel. 2019.01-2019.03.