Spring sentinel哨兵模式相關(guān)原理解析
1. sentinel作用
1. 當(dāng)用Redis做主從方案時,假如master宕機,Redis本身無法自動進行主備切換
2. 而Redis-sentinel本身也是一個獨立運行的進程,它能監(jiān)控多個master-slave集群,發(fā)現(xiàn)master宕機后能進行自動切換。
2. sentinel原理
1. sentinel負(fù)責(zé)持續(xù)監(jiān)控主節(jié)點的健康,當(dāng)主節(jié)掛掉時,自動選擇一個最優(yōu)的從節(jié)點切換成主節(jié)點
2. 從節(jié)點來連接集群時會首先連接sentinel,通過sentinel來查詢主節(jié)點的地址
3. 當(dāng)主節(jié)點發(fā)生故障時,sentinel會將最新的主節(jié)點地址告訴客戶端,可以實現(xiàn)無需重啟自動切換redis
3. Sentinel支持集群
1. 只使用單個sentinel進程來監(jiān)控redis集群是不可靠的,當(dāng)sentinel進程宕掉后sentinel本身也有單點問題
2. 如果有多個sentinel,redis的客戶端可以隨意地連接任意一個sentinel來獲得關(guān)于redis集群中的信息。
4. Sentinel版本
1. Sentinel當(dāng)前穩(wěn)定版本稱為Sentinel 2,Redis2.8和Redis3.0附帶穩(wěn)定的哨兵版本
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默認(rèn)監(jiān)聽26379端口,所以運行前必須確定該端口沒有被別的進程占用。
6. sentinel.conf配置文件說明
1. 配置文件只需要配置master的信息就好啦,不用配置slave的信息,因為slave能夠被自動檢測到
2. 需要注意的是,配置文件在sentinel運行期間是會被動態(tài)修改的,例如當(dāng)發(fā)生主備切換時候,配置文件中的master會被修改為另外一個slave。
3. 這樣,之后sentinel如果重啟時,就可以根據(jù)這個配置來恢復(fù)其之前所監(jiān)控的redis集群的狀態(tài)。
# 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,它將會把關(guān)于master的最新配置通過廣播形式通知其它sentinel,其它的sentinel則更新對應(yīng)master的配置。
2. 一個faiover要想被成功實行,sentinel必須能夠向選為master的slave發(fā)送SLAVE OF NO ONE命令,然后能夠通過INFO命令看到新master的配置信息。
3. 當(dāng)將一個slave選舉為master并發(fā)送SLAVE OF NO ONE`后,即使其它的slave還沒針對新master重新配置自己,failover也被認(rèn)為是成功了的。
因為每一個配置都有一個版本號,所以以版本號最大的那個為標(biāo)準(zhǔn):
1)假設(shè)有一個名為mymaster的地址為192.168.1.50:6379。
2)一開始,集群中所有的sentinel都知道這個地址,于是為mymaster的配置打上版本號1。
3)一段時候后mymaster死了,有一個sentinel被授權(quán)用版本號2對其進行failover。
4)如果failover成功了,假設(shè)地址改為了192.168.1.50:9000,此時配置的版本號為2
5)進行failover的sentinel會將新配置廣播給其他的sentinel,發(fā)現(xiàn)新配置的版本號為2時,版本號變大了,說明配置更新了,于是就會采用最新的版本號為2的配置。
以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
- SpringBoot2.0+阿里巴巴Sentinel動態(tài)限流實戰(zhàn)(附源碼)
- springboot整合sentinel的方法教程
- SpringBoot基于Sentinel在服務(wù)上實現(xiàn)接口限流
- Spring Cloud Alibaba整合Sentinel的實現(xiàn)步驟
- Redis服務(wù)之高可用組件sentinel詳解
- spring cloud gateway整合sentinel實現(xiàn)網(wǎng)關(guān)限流
- Spring Cloud Alibaba使用Sentinel實現(xiàn)接口限流
- Redis Sentinel實現(xiàn)哨兵模式搭建小結(jié)
- Springcloud sentinel安裝和使用方法解析
相關(guān)文章
java根據(jù)擴展名獲取系統(tǒng)圖標(biāo)和文件圖標(biāo)示例
這篇文章主要介紹了java根據(jù)擴展名獲取系統(tǒng)圖標(biāo)和文件圖標(biāo)示例,需要的朋友可以參考下2014-03-03jcl與jul?log4j1?log4j2?logback日志系統(tǒng)機制及集成原理
這篇文章主要介紹了jcl與jul?log4j1?log4j2?logback的集成原理,Apache?Commons-logging?通用日志框架與日志系統(tǒng)的機制,有需要的朋友可以借鑒參考下2022-03-03java.lang.ArrayStoreException異常的解決方案
這篇文章主要介紹了java.lang.ArrayStoreException異常的解決方案,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2021-12-12淺談Hibernate對象狀態(tài)之間的神奇轉(zhuǎn)換
這篇文章主要介紹了淺談Hibernate對象狀態(tài)之間的神奇轉(zhuǎn)換,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2019-09-09SpringMVC結(jié)合Jcrop實現(xiàn)圖片裁剪
這篇文章主要介紹了SpringMVC結(jié)合Jcrop實現(xiàn)圖片裁剪的相關(guān)資料,具有一定的參考價值,感興趣的小伙伴們可以參考一下2016-12-12Java使用抽象工廠模式實現(xiàn)的肯德基消費案例詳解
這篇文章主要介紹了Java使用抽象工廠模式實現(xiàn)的肯德基消費案例,較為詳細(xì)的分析了抽象工廠模式的定義、原理并結(jié)合實例形式分析了Java使用抽象工廠模式實現(xiàn)肯德基消費案例的步驟與相關(guān)操作技巧,需要的朋友可以參考下2018-05-05