給大家帶來一個redis-sentinel的深入淺出的講解,希望對大家有所幫助(windows爲例)
Sentinel(哨兵)是Redis 的高可用性解決方案:由一個或多個Sentinel 實例 組成的Sentinel 系統可以監視任意多個主服務器,以及這些主服務器屬下的所有從服務器,並在被監視的主服務器進入下線狀態時,自動將下線主服務器屬下的某個從服務器升級爲新的主服務器。 顧名思義,哨兵的作用就是監控Redis系統的運行狀況。它的主要功能包括以下兩個。
(1)監控主數據庫和從數據庫是否正常運行。
(2)主數據庫出現故障時自動將從數據庫轉換爲主數據庫。
我們採用一主(master)二從(slave)三sentinel的架構模式來做講解
1、首先安裝redis
2、修改redis.windows.conf配置文件:複製三個redis.windows.conf文件,分別命名爲master.6379.conf, slave.6380.conf, slave.6381.conf,創建sentinel.63791.conf, sentinel.63792.conf,sentinel.63793.conf ;
master6379.conf:(作爲主節點保持默認配置就行)
port 6379
bind 127.0.0.1
slave.6380.conf :
port 6380
bind 127.0.0.1
slaveof 127.0.0.1 6379
sentinel.63791.conf 配置內容如下(直接複製粘貼即可):
port 63791
#主master,2個sentinel選舉成功後纔有效,這裏的master-1是名稱,在整合的時候需要一致,這裏可以隨便更改
sentinel monitor master-1 127.0.0.1 6379 2
#判斷主master的掛機時間(毫秒),超時未返回正確信息後標記爲sdown狀態
sentinel down-after-milliseconds master-1 5000
#若sentinel在該配置值內未能完成failover操作(即故障時master/slave自動切換),則認爲本次failover失敗。
sentinel failover-timeout master-1 18000
#選項指定了在執行故障轉移時, 最多可以有多少個從服務器同時對新的主服務器進行同步,這個數字越小,完成故障轉移所需的時間就越長
sentinel config-epoch master-1 2
相關命令:
redis-service.exe master.6379.conf //啓動主從
redis-service.exe sentionel.63791.conf --sentinel //啓動哨兵
redis-cli.exe -h 127.0.0.1 -p 6379 //鏈接redis
info Replication //查看配置
redis-cli -p 63791//鏈接哨兵
sentinel master master-1//查看master的狀態
sentinel slaves master-1//查看salves的狀態
sentinel sentinels master-1//查看哨兵的狀態
sentinel get-master-addr-by-name master-1//獲取當前master的地址 info sentinel//查看哨兵信息
主觀下線 :
首先解析一下什麼叫主觀下線,所謂主觀下線,就是單個sentinel認爲某個服務下線。
客觀下線 :
當sentinel監視的某個服務主觀下線後,sentinel會詢問其它監視該服務的sentinel,看它們是否也認爲該服務主觀下線,接收到足夠數量(這個值可以配置)的sentinel判斷爲主觀下線,既任務該服務客觀下線,並對其做故障轉移操作。
選舉領頭sentinel :
一個redis服務被判斷爲客觀下線時,多個監視該服務的sentinel協商,選舉一個領頭sentinel,對該redis服務進行故障轉移操作
Sentinel的工作方式:
1):每個Sentinel以每秒鐘一次的頻率向它所知的Master,Slave以及其他 Sentinel 實例發送一個 PING 命令。
2):如果一個實例(instance)距離最後一次有效回覆 PING 命令的時間超過 down-after-milliseconds 選項所指定的值, 則這個實例會被 Sentinel 標記爲主觀下線。
3):如果一個Master被標記爲主觀下線,則正在監視這個Master的所有 Sentinel 要以每秒一次的頻率確認Master的確進入了主觀下線狀態。
4):當有足夠數量的 Sentinel(大於等於配置文件指定的值)在指定的時間範圍內確認Master的確進入了主觀下線狀態, 則Master會被標記爲客觀下線 。
5):在一般情況下, 每個 Sentinel 會以每10 秒一次的頻率向它已知的所有Master,Slave發送 INFO 命令 。
6):當Master被 Sentinel 標記爲客觀下線時,Sentinel 向下線的 Master 的所有 Slave 發送 INFO 命令的頻率會從 10 秒一次改爲每秒一次 。
7):若沒有足夠數量的 Sentinel 同意 Master 已經下線, Master 的客觀下線狀態就會被移除。 若 Master 重新向 Sentinel 的 PING 命令返回有效回覆, Master 的主觀下線狀態就會被移除。
Sentinel的“仲裁會”
前面我們談到,主從故障轉移時,需要的sentinel認可的票數達到設置的值纔可以。 不過,當failover主備切換真正被觸發後,failover並不會馬上進行,還需要sentinel中的大多數sentinel授權後纔可以進行failover。 當sentinel認可不可用的票數達到時,failover被觸發。failover一旦被觸發,嘗試去進行failover的sentinel會去獲得“大多數”sentinel的授權 這個區別看起來很微妙,但是很容易理解和使用。例如,集羣中有5個sentinel,票數被設置爲2,當2個sentinel認爲一個master已經不可用了以後,將會觸發failover,但是,進行failover的那個sentinel必須先獲得至少3個sentinel的授權纔可以實行failover。 如果票數被設置爲5,必須所有5個sentinel都主觀認爲master爲不可用,要進行failover,那麼得獲得所有5個sentinel的授權。
總結:
對於哨兵的應用,我們直接按照上面說的方式安裝redis,修改配置文件,之後按照命令啓動即可:
此時啓動了哨兵之後,我們代碼中直接連接哨兵即可,具體接入方式網上有很多,大家根據自己的實際情況選擇即可