天天看點

Redis哨兵(Sentinel)模式

主從切換技術的方法是:當主伺服器當機後,需要手動把一台從伺服器切換為主伺服器,這就需要人工幹預,費事費力,還會造成一段時間内服務不可用。這不是一種推薦的方式,更多時候,我們優先考慮哨兵模式。

哨兵模式是一種特殊的模式,首先Redis提供了哨兵的指令,哨兵是一個獨立的程序,作為程序,它會獨立運作。其原理是哨兵通過發送指令,等待Redis伺服器響應,進而監控運作的多個Redis執行個體。

Redis哨兵(Sentinel)模式

這裡的哨兵有兩個作用

通過發送指令,讓Redis伺服器傳回監控其運作狀态,包括主伺服器和從伺服器。

當哨兵監測到master當機,會自動将slave切換成master,然後通過釋出訂閱模式通知其他的從伺服器,修改配置檔案,讓它們切換主機。

然而一個哨兵程序對Redis伺服器進行監控,可能會出現問題,為此,我們可以使用多個哨兵進行監控。各個哨兵之間還會進行監控,這樣就形成了多哨兵模式。

用文字描述一下故障切換(failover)的過程。假設主伺服器當機,哨兵1先檢測到這個結果,系統并不會馬上進行failover過程,僅僅是哨兵1主觀的認為主伺服器不可用,這個現象稱為主觀下線。當後面的哨兵也檢測到主伺服器不可用,并且數量達到一定值時,那麼哨兵之間就會進行一次投票,投票的結果由一個哨兵發起,進行failover操作。切換成功後,就會通過釋出訂閱模式,讓各個哨兵把自己監控的從伺服器實作切換主機,這個過程稱為客觀下線。這樣對于用戶端而言,一切都是透明的。

配置3個哨兵和1主2從的Redis伺服器來示範這個過程。

服務類型

是否是主伺服器

IP位址

端口

Redis

192.168.11.128

6379

192.168.11.129

192.168.11.130

Sentinel

-

26379

Redis哨兵(Sentinel)模式

首先配置Redis的主從伺服器,修改redis.conf檔案如下

上述内容主要是配置Redis伺服器,從伺服器比主伺服器多一個slaveof的配置和密碼。

配置3個哨兵,每個哨兵的配置都是一樣的。在Redis安裝目錄下有一個sentinel.conf檔案,copy一份進行修改

上述關閉了保護模式,便于測試。

有了上述的修改,我們可以進入Redis的安裝目錄的src目錄,通過下面的指令啟動伺服器和哨兵

注意啟動的順序。首先是主機(192.168.11.128)的Redis服務程序,然後啟動從機的服務程序,最後啟動3個哨兵的服務程序。

上面是通過Jedis進行使用的,同樣也可以使用Spring進行配置RedisTemplate使用。

配置項

參數類型

作用

port

整數

啟動哨兵程序端口

dir

檔案夾目錄

哨兵程序服務臨時檔案夾,預設為/tmp,要保證有可寫入的權限

sentinel down-after-milliseconds

<服務名稱><毫秒數(整數)>

指定哨兵在監控Redis服務時,當Redis服務在一個預設毫秒數内都無法回答時,單個哨兵認為的主觀下線時間,預設為30000(30秒)

sentinel parallel-syncs

<服務名稱><伺服器數(整數)>

指定可以有多少個Redis服務同步新的主機,一般而言,這個數字越小同步時間越長,而越大,則對網絡資源要求越高

sentinel failover-timeout

指定故障切換允許的毫秒數,超過這個時間,就認為故障切換失敗,預設為3分鐘

sentinel notification-script

<服務名稱><腳本路徑>

指定sentinel檢測到該監控的redis執行個體指向的執行個體異常時,調用的報警腳本。該配置項可選,比較常用

sentinel down-after-milliseconds配置項隻是一個哨兵在超過規定時間依舊沒有得到響應後,會自己認為主機不可用。對于其他哨兵而言,并不是這樣認為。哨兵會記錄這個消息,當擁有認為主觀下線的哨兵達到sentinel monitor所配置的數量時,就會發起一次投票,進行failover,此時哨兵會重寫Redis的哨兵配置檔案,以适應新場景的需要。