為了解決redis主從複製模式致命缺點,當主節點當機,影響整個系統執行,引入哨兵機制Sentinel。
Sentinel哨兵主要解決以下問題:
- 監控,監控每個節點以及哨兵執行狀態
- 報警,當發現某個節點或哨兵出現問題,通知其他哨兵
- 自動故障轉化,當主節點當機時,哨兵從原主節點下的所有可用從節點中選舉出一個作為主節點,原主節點降為從節點,並將其他從節點的主節點配置改為指定新主節點
- 配置中心,客戶端初始化連線的是哨兵節點集合
哨兵配置如下:
哨兵工作原理:
- 哨兵是一個特殊的redis伺服器,不同的是命令以及不會持久化,啟動時,根據配置檔案中master主節點ip和埠,建立兩個連線,一為命令連線,獲取伺服器的執行狀態(包括主節點、從節點的基本資訊);二為訂閱連線,訂閱伺服器的_sentinel_:hello頻道(獲取哨兵叢集的其他哨兵節點,配置中只需配置主節點資訊)
- 哨兵預設每隔十秒向節點傳送info,獲取主從伺服器的資訊,及時更新哨兵下的伺服器例項;每隔一秒向節點傳送ping命令,根據有效時間內(down-after-milliseconds引數配置)返回內容判斷伺服器是否線上,有效回覆內容包括PONG、LOADING、MASTERDOWN,其他均為無效回覆,將伺服器設定為主觀下線(在有效時間內未回覆有效內容,將被哨兵主觀下線)
- 當主節點出現主觀下線, 哨兵將詢問其他哨兵主節點狀態,當確認主節點狀態為主觀下線的哨兵數量達到配置數目(sentinel monitor mymaster 127.0.0.1 6379 2,2則表示數目)時,主節點被修改為客觀下線
- 當主節點被客觀下線時,哨兵將選舉出一位臨時主哨兵(哨兵可以讓其他哨兵選舉自己,先到先得,選票高者當選),主哨兵根據原則(線上、slave-priority可設定從節點當選主節點伺服器優先順序,越小優先順序越高)從節點中選出主節點,原主節點降為從節點並客觀下線狀態,並將其他從節點指向新主節點進行資料複製
Spring boot配置redis Sentinel