給大家帶來一個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,修改配置檔案,之後按照指令啟動即可:
此時啟動了哨兵之後,我們代碼中直接連接配接哨兵即可,具體接入方式網上有很多,大家根據自己的實際情況選擇即可