一、哨兵機制 Sentinel
Sentinel
1、哨兵的概念
-
是Redis 的Sentinel(哨兵)
解決方案:由高可用性
可以監視任意多個一個或多個Sentinel執行個體組成的Sentinel 系統
,以及這些主伺服器
,并在被監視的主伺服器進入下線狀态時,自動将下線主伺服器屬下的某個從伺服器更新為新的主伺服器。簡單的說哨兵就是帶有自動故障轉移功能的主從架構。主伺服器屬下的所有從伺服器
- 簡單來說, 當一個
節點的redis服務挂掉了,master
機制會發現, 并從剩餘的sentinel
節點的redis服務中, 選舉出一個slave, 來充當新的slave
節點。master
-
是一個分布式系統,用于對哨兵(sentinel)
中的主從結構
,當出現故障時通過每台伺服器進行監控
選擇新的master并将所有slave連接配接到新的master。投票機制
2、哨兵的作用
-
監控
- 不斷的
和檢查master
是否slave
運作。正常
- master存活檢測、master與slave運作情況檢測
- 不斷的
-
通知(提醒)
- 當被
出現問題時,向監控的伺服器
。其他(哨兵間,用戶端)發送通知
- 當被
-
自動故障轉移
- 斷開master與slave連接配接,選取一個slave作為master,将其他slave連接配接到新的master,并告知用戶端新的伺服器位址
注意:
- 哨兵也是一台
,隻是不提供資料服務redis伺服器
- 通常哨兵配置數量為
(選舉master防止同票)單數
二、啟用哨兵機制
在同一個伺服器中如何模拟三個哨兵服務呢?
- 将Redis安裝包中的配置檔案
拷貝出來, 然後在sentinel.conf
中修改端口, 以及設定master的端口位址, 然後通過sentinel.conf
即可redis-sentinel sentinel-端口号.conf
- 啟動哨兵,
redis-cli -p 26379
當啟動哨兵服務後, 每一個哨兵都會互相注冊, 此時
sentinel.conf
配置檔案以及修改了;
二、哨兵機制的原理
主從切換
- 哨兵在進行
過程中經曆三個階段主從切換
-
監控
-
通知
-
故障轉移
-
1、監控階段
就是上面我們啟動各個
哨兵服務
的時候, 不同的
哨兵服務
的資訊會互相
監控
, 包括
master
節點的資訊以及master節點的
slave
節點資訊; 能拿到
master
節點資訊是因為在哨兵的配置檔案
sentinel.conf
中配置了
master節點的ip,端口位址
;
- 一個哨兵服務, 可以
其他的哨兵, 還可以監控監控
節點的資訊, 以及該master
節點下的master
節點的資訊。slave
- 多個哨兵服務之間可以互相通信, 它們是一個
, 它們直接通過小圈子
的方式來互相釋出訂閱
通知
2、通知階段
3、故障轉移階段
- 首先
向sentinel1
發送hello指令, 此時master沒有任何反應, 也拿不到它的資訊, 标記master為master
; 此時該SRI_S_DOWN(主觀下線)
會在它的小圈子(sentinel系統)中說, master挂掉了; 此時sentinel2、sentinel3也都向master發送hello指令, 也得不到回應(或者超過半數), 此時該master确定挂掉了, 标記為sentinel1
;SRI_O_DOWN(客觀下線)
下一步就是清理該master了, 也就是将當機的master下線
, 首先要在多個
sentinel
中選舉
一個
來清理; 在多個sentinel中通過
投票
來選舉出來一個領頭的
sentinel
;
然後領頭的sentinel會從多個slave中挑選一個來充當master
具體選舉的要求
- 由推選出來的哨兵對目前的slave進行篩選,篩選條件有:
- 伺服器清單中挑選備選master
- 線上的
- 響應慢的
- 與原master斷開時間久的
- 優先原則
- 優先級
- offset
- runid
- 發送指令( sentinel )
- 向新的master發送slaveof no one(斷開與原master的連接配接)
- 向其他slave發送slaveof 新masterIP端口(讓其他slave與新的master相連)