Redis哨兵(Sentinel)模式

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

一、哨兵模式概述

哨兵模式是一種特殊的模式,首先Redis提供了哨兵的命令,哨兵是一個獨立的進程,作爲進程,它會獨立運行。
1、工作原理
哨兵通過發送命令,等待Redis服務器響應,從而監控運行的多個Redis實例。
在這裏插入圖片描述
2、哨兵有兩個作用
①通過發送命令,讓Redis服務器返回監控其運行狀態,包括主服務器和從服務器。
②當哨兵監測到master宕機,會自動將slave切換成master,然後通過發佈訂閱模式通知其他的從服務器,修改配置文件,讓它們切換主機。

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

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

二、Redis配置哨兵模式

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

服務類型 是否是主服務器 IP地址 端口
Redis 192.168.11.128 6379
Redis 192.168.11.129 6379
Redis 192.168.11.130 6379
Sentinel - 192.168.11.128 26379
Sentinel - 192.168.11.129 26379
Sentinel - 192.168.11.130 26379

在這裏插入圖片描述

1、首先配置Redis的主從服務器,修改redis.conf文件如下

# 使得Redis服務器可以跨網絡訪問
bind 0.0.0.0
# 設置密碼
requirepass "123456"
# 指定主服務器,注意:有關slaveof的配置只是配置從服務器,主服務器不需要配置
slaveof 192.168.11.128 6379
# 主服務器密碼,注意:有關slaveof的配置只是配置從服務器,主服務器不需要配置
masterauth 123456

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

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

# 禁止保護模式
protected-mode no
# 配置監聽的主服務器,這裏sentinel monitor代表監控,mymaster代表服務器的名稱,可以自定義,192.168.11.128代表監控的主服務器,6379代表端口,2代表只有兩個或兩個以上的哨兵認爲主服務器不可用的時候,纔會進行failover操作。
sentinel monitor mymaster 192.168.11.128 6379 2
# sentinel author-pass定義服務的密碼,mymaster是服務名稱,123456是Redis服務器密碼
# sentinel auth-pass <master-name> <password>
sentinel auth-pass mymaster 123456

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

3、進入Redis的安裝目錄的src目錄,通過下面的命令啓動服務器和哨兵

# 啓動Redis服務器進程
./redis-server ../redis.conf
# 啓動哨兵進程
./redis-sentinel ../sentinel.conf

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

三、哨兵模式的其他配置項

配置項 參數類型 作用
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的哨兵配置文件,以適應新場景的需要。

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