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,修改配置文件,之後按照命令啓動即可:

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

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章