Spring sentinel哨兵模式相關原理解析
1. sentinel作用
1. 當用Redis做主從方案時,假如master宕機,Redis本身無法自動進行主備切換
2. 而Redis-sentinel本身也是一個獨立執行的程序,它能監控多個master-slave叢集,發現master宕機後能進行自動切換。
2. sentinel原理
1. sentinel負責持續監控主節點的健康,當主節掛掉時,自動選擇一個最優的從節點切換成主節點
2. 從節點來連線叢集時會首先連線sentinel,通過sentinel來查詢主節點的地址
3. 當主節點發生故障時,sentinel會將最新的主節點地址告訴客戶端,可以實現無需重啟自動切換redis
3. Sentinel支援叢集
1. 只使用單個sentinel程序來監控redis叢集是不可靠的,當sentinel程序宕掉後sentinel本身也有單點問題
2. 如果有多個sentinel,redis的客戶端可以隨意地連線任意一個sentinel來獲得關於redis叢集中的資訊。
4. Sentinel版本
1. Sentinel當前穩定版本稱為Sentinel 2,Redis2.8和Redis3.0附帶穩定的哨兵版本
2. 安裝完redis-3.2.8後,redis-3.2.8/src/redis-sentinel啟動程式 redis-3.2.8/sentinel.conf是配置檔案。
5. 執行sentinel兩種方式(效果相同)
法1:redis-sentinel /path/to/sentinel.conf
法2:redis-server /path/to/sentinel.conf --sentinel
1. 以上兩種方式,都必須指定一個sentinel的配置檔案sentinel.conf,如果不指定,將無法啟動sentinel。
2. sentinel預設監聽26379埠,所以執行前必須確定該埠沒有被別的程序佔用。
6. sentinel.conf配置檔案說明
1. 配置檔案只需要配置master的資訊就好啦,不用配置slave的資訊,因為slave能夠被自動檢測到
2. 需要注意的是,配置檔案在sentinel執行期間是會被動態修改的,例如當發生主備切換時候,配置檔案中的master會被修改為另外一個slave。
3. 這樣,之後sentinel如果重啟時,就可以根據這個配置來恢復其之前所監控的redis叢集的狀態。
# sentinel.conf 配置說明
sentinel monitor mymaster 127.0.0.1 6379 2
sentinel down-after-milliseconds mymaster 60000
sentinel failover-timeout mymaster 180000
sentinel parallel-syncs mymaster 1
7. 配置傳播
1. 一旦一個sentinel成功地對一個master進行了failover,它將會把關於master的最新配置通過廣播形式通知其它sentinel,其它的sentinel則更新對應master的配置。
2. 一個faiover要想被成功實行,sentinel必須能夠向選為master的slave傳送SLAVE OF NO ONE命令,然後能夠通過INFO命令看到新master的配置資訊。
3. 當將一個slave選舉為master併發送SLAVE OF NO ONE`後,即使其它的slave還沒針對新master重新配置自己,failover也被認為是成功了的。
因為每一個配置都有一個版本號,所以以版本號最大的那個為標準:
1)假設有一個名為mymaster的地址為192.168.1.50:6379。
2)一開始,叢集中所有的sentinel都知道這個地址,於是為mymaster的配置打上版本號1。
3)一段時候後mymaster死了,有一個sentinel被授權用版本號2對其進行failover。
4)如果failover成功了,假設地址改為了192.168.1.50:9000,此時配置的版本號為2
5)進行failover的sentinel會將新配置廣播給其他的sentinel,發現新配置的版本號為2時,版本號變大了,說明配置更新了,於是就會採用最新的版本號為2的配置。
以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支援我們。