Sentinel是Redis高可用的解決方案,哨兵。HA
Sentinel 組成的sentinel系統可以監視任意多個主伺服器以及主伺服器屬下的所有從伺服器,并在被監視的主伺服器進入下賤狀态時,自動将下線主伺服器屬下的某個從伺服器更新為新的主伺服器,繼續處理請求。
![](https://img.laitimes.com/img/__Qf2AjLwojIjJCLyojI0JCLicGcq5SO5kjMzUDO2cDNyUTNx8CXt92YuIDNsxWYkFWZslmLn9GbiVXaulWcvw1LcpDc0RHaiojIsJye.jpg)
也就是說當S1斷線了,然後會選舉S2 3 4 其中一個成為新的主伺服器。
16.1 啟動并初始化Sentinel
redis-sentinel /path/to/your/sentinel.conf
啟動一個Sentinel時,需要執行以下步驟:
1、初始化伺服器
2、将普通Redis伺服器使用的狀态代碼換成Sentinel專用代碼
3、初始化Sentinel狀态
4、根據給定的配置檔案,初始化Sentinel的監視主伺服器清單
5、建立連接配接主伺服器的網絡連接配接。
那麼問題來了?如果Sentinel伺服器挂了怎麼辦?單點故障?是以還是Sentinel也要主從。
16.1.1 初始化伺服器
Sentinel是特殊的redis伺服器,是以要先啟動redis伺服器。
有點像Znode節點的一些特性。
16.1.2 使用Sentinel專用代碼
啟動Sentinel的第二個步驟就是将一部分普通的Redis伺服器使用的代碼替換成Sentinel專用代碼。
16.1.3 初始化Sentinel狀态
16.1.4 初始化Sentinel狀态和masters屬性
1、字典的鍵時主伺服器的名字
2、值就是主伺服器的對應
sentinelRedisInstance執行個體結構
16.1.5 建立連向主伺服器的網絡連接配接
16.2 擷取主伺服器資訊
Sentinel預設會以每十秒一次的頻率,通過指令連接配接向被監視的主伺服器發送INFO指令,并通過INFO指令的回複來擷取目前資訊。
回複slave、runid等各種資訊。
16.3 擷取從伺服器資訊
會恢複run_id\role\host\port\slave_priority\偏移量。
16.4 向主伺服器和從伺服器發送資訊
在預設情況下sentinel會兩秒一次發送hello指令檢測心跳。
告訴别人自己的ip、端口
id、目前配置紀元、主伺服器名字、ip端口。
16.5 接受來自主從的頻道消息
16.5.1 更新sentinels字典
16.5.2 建立連向其他Sentinel的指令連接配接
16.6 檢測主觀下線狀态
16.7 檢測客觀下線狀态
16.7.1 發送SENTINEL is-master-down-by-addr
客觀下線後會進行故障轉移。
16.8 選舉領頭Sentinel
16.9 故障轉移
16.9.1 選出新的主伺服器
16.9.2 修改從伺服器的複制目标
16.9.3 将舊的主伺服器變為從伺服器
16.10 重點回顧
- sentinel隻是特殊的redis伺服器,與普通redis有細微的指令表差别。
- sentinel會讀入使用者配置的檔案建立指令連接配接和訂閱連接配接。
- sentinel發送info指令來獲得資訊。
- sentinel發送info資訊來擷取從伺服器資訊。故障轉移時是1秒一次。
- 同一個主的多個sentinel會以2秒一次發送
頻道消息。__sentinel__:hello
- 每個sentitnel也會接受其他sentinel的頻道消息。
- 選舉算法是raft算法
- sentinel主觀下線時會看是否客觀下線,足夠多的客觀下線就會重新選舉 故障轉移。