Redis 學(xué)習四 哨兵架構(gòu)

昨天學(xué)習了 Redis 簡單的集群架構(gòu). 但是有一些缺點, 就是在主節(jié)點掛了后, 需要手動的配置從節(jié)點將其變?yōu)橹鞴?jié)點. 那么今天學(xué)的這個, 就可以解決這個手動配置的過程. 也就是哨兵架構(gòu). 它是一種用于管理多個 Redis服務(wù)器的系統(tǒng), 它提供了一種機制, 可以自動切換主節(jié)點. 當主節(jié)點出現(xiàn)故障時, 可以自動從從節(jié)點中選擇一個作為新的主節(jié)點.

1. 什么是哨兵架構(gòu)

哨兵架構(gòu)sentinel 是一種高可用性解決方案. 當主節(jié)點出現(xiàn)故障時, 哨兵架構(gòu)sentinel可以自動將系統(tǒng)切換到從節(jié)點, 從而保證系統(tǒng)的持續(xù)運行. 此外, 哨兵架構(gòu)sentinel還可以幫助開發(fā)者監(jiān)控Redis服務(wù)器的運行狀態(tài), 發(fā)送通知, 記錄事件等.

哨兵架構(gòu)sentinel的工作原理是通過哨兵進程來實現(xiàn)的.
哨兵進程是一個獨立的進程, 它定期檢查主節(jié)點和從節(jié)點的狀態(tài). 當主節(jié)點出現(xiàn)故障時,哨兵進程會從從節(jié)點中選擇一個作為新的主節(jié)點, 并更新配置信息.

哨兵不提供讀寫服務(wù), 主要就是為了監(jiān)控 Redis 節(jié)點. 哨兵架構(gòu)下的 client 端第一次從哨兵找出 Redis 主節(jié)點, 后續(xù)就直接訪問 Redis 的主節(jié)點, 不會每次都通過哨兵代理訪問 Redis 的主節(jié)點. 當主節(jié)點發(fā)生變化, 哨兵會第一時間感知到. 并且將新的 Redis 主節(jié)點通知給 client 端.(這里面 Redis 和 client 端一般都實現(xiàn)了訂閱功能. 訂閱哨兵 sentinel 發(fā)布的節(jié)點變動消息)


2. 哨兵架構(gòu)的簡單搭建

1、復(fù)制一份sentinel.conf文件
cp sentinel.conf sentinel‐26379.conf

2、將相關(guān)配置修改為如下值:
port 26379
daemonize yes
pidfile "/var/run/redis‐sentinel‐26379.pid"
logfile "26379.log"
dir "/usr/local/redis‐5.0.3/data" 

# sentinel monitor <master‐redis‐name> <master‐redis‐ip> <master‐redis‐port> <quorum> 
# quorum是一個數(shù)字,指明當有多少個sentinel認為一個master失效時(值一般為:sentinel總數(shù)/2 + 1),master才算真正失效

sentinel monitor mymaster 192.168.0.60 6379 2 # mymaster這個名字隨便取,客戶端訪問時會用到


3、啟動sentinel哨兵實例 
src/redis‐sentinel sentinel‐26379.conf 


4、查看sentinel的info信息 
src/redis‐cli ‐p 26379 
127.0.0.1:26379>info 
可以看到Sentinel的info里已經(jīng)識別出了redis的主從 

5、可以自己再配置兩個sentinel,端口26380和26381,注意上述配置文件里的對應(yīng)數(shù)字都要修改  

sentinel 集群都啟動完畢后, 會將哨兵集群的元數(shù)據(jù)信息寫入所有的 sentinel 的配置文件里去(追加在文件的最下面).查看如下配置文件 sentinel-26379.conf.

1 sentinel known‐replica mymaster 192.168.0.60 6380 #代表redis主節(jié)點的從節(jié)點信息 
2 sentinel known‐replica mymaster 192.168.0.60 6381 #代表redis主節(jié)點的從節(jié)點信息 
3 sentinel known‐sentinel mymaster 192.168.0.60 26380 52d0a5d70c1f90475b4fc03b6ce7c3c56935760f #代表感知到的其它哨兵節(jié)點 
4 sentinel known‐sentinel mymaster 192.168.0.60 26381 e9f530d3882f8043f76ebb8e1686438ba8bd5ca6 #代表感知到的其它哨兵節(jié)點 

Redis主節(jié)點如果掛了, 哨兵集群會重新選舉出新的Redis主節(jié)點, 同時會修改所有sentinel節(jié)點配置文件 的集群元數(shù)據(jù)信息, 比如6379的Redis如果掛了, 假設(shè)選舉出的新主節(jié)點是6380, 則sentinel文件里的集 群元數(shù)據(jù)信息會變成如下所示:

1 sentinel known‐replica mymaster 192.168.0.60 6379 #代表主節(jié)點的從節(jié)點信息 
2 sentinel known‐replica mymaster 192.168.0.60 6381 #代表主節(jié)點的從節(jié)點信息 
3 sentinel known‐sentinel mymaster 192.168.0.60 26380 52d0a5d70c1f90475b4fc03b6ce7c3c56935760f #代表感知到的其它哨兵節(jié)點 
4 sentinel known‐sentinel mymaster 192.168.0.60 26381 e9f530d3882f8043f76ebb8e1686438ba8bd5ca6 #代表感知到的其它哨兵節(jié)點 

同時還會修改sentinel 文件里之前配置的 mymaster對應(yīng)的6379端口,改為6380

1 sentinel monitor mymaster 192.168.0.60 6380 2

3. 總結(jié)

簡單的來說 Redis 的哨兵架構(gòu)工作流程可以分為以下幾個步驟

  • 啟動
    Redis 服務(wù)器啟動時, 哨兵進程也會被啟動. 哨兵進程是一個獨立的進程, 它負責監(jiān)控 Redis 主節(jié)點和從節(jié)點的運行狀態(tài).
  • 監(jiān)控
    哨兵進程定期檢查主節(jié)點和從節(jié)點的狀態(tài), 它會檢查服務(wù)器是否正常運行, 是否能夠正常響應(yīng)請求.
  • 故障檢測
    如果哨兵進程檢測到主節(jié)點無法正常運行, 它會將這個信息廣播給其他的哨兵進程. 當大多數(shù)哨兵進程都確認主進程出現(xiàn)故障后, 哨兵進程會開始故障恢復(fù)流程.
  • 選擇新的主節(jié)點
    哨兵進程會從從節(jié)點中選擇一個作為新的主節(jié)點, 選擇的標準包括節(jié)點的運行狀態(tài), 數(shù)據(jù)的更新程序等.
  • 切換主節(jié)點
    當新的主節(jié)點被選定后,哨兵進程會更新配置信息, 將所有的請求重定向到新的主節(jié)點.
  • 通知client
    哨兵進程通知應(yīng)用程序主節(jié)點已經(jīng)改變, 應(yīng)用程序需要更新自己的配置信息,以便將請求發(fā)送到新的主節(jié)點.
哨兵架構(gòu)簡單示意圖
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容