天天看點

redis進階特性-sentinel(哨兵)

給大家帶來一個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,修改配置檔案,之後按照指令啟動即可:

redis進階特性-sentinel(哨兵)
redis進階特性-sentinel(哨兵)

此時啟動了哨兵之後,我們代碼中直接連接配接哨兵即可,具體接入方式網上有很多,大家根據自己的實際情況選擇即可

繼續閱讀