Spring sentinel哨兵模式相關(guān)原理解析
1. sentinel作用
1. 當(dāng)用Redis做主從方案時(shí),假如master宕機(jī),Redis本身無(wú)法自動(dòng)進(jìn)行主備切換
2. 而Redis-sentinel本身也是一個(gè)獨(dú)立運(yùn)行的進(jìn)程,它能監(jiān)控多個(gè)master-slave集群,發(fā)現(xiàn)master宕機(jī)后能進(jìn)行自動(dòng)切換。
2. sentinel原理
1. sentinel負(fù)責(zé)持續(xù)監(jiān)控主節(jié)點(diǎn)的健康,當(dāng)主節(jié)掛掉時(shí),自動(dòng)選擇一個(gè)最優(yōu)的從節(jié)點(diǎn)切換成主節(jié)點(diǎn)
2. 從節(jié)點(diǎn)來(lái)連接集群時(shí)會(huì)首先連接sentinel,通過sentinel來(lái)查詢主節(jié)點(diǎn)的地址
3. 當(dāng)主節(jié)點(diǎn)發(fā)生故障時(shí),sentinel會(huì)將最新的主節(jié)點(diǎn)地址告訴客戶端,可以實(shí)現(xiàn)無(wú)需重啟自動(dòng)切換redis
3. Sentinel支持集群
1. 只使用單個(gè)sentinel進(jìn)程來(lái)監(jiān)控redis集群是不可靠的,當(dāng)sentinel進(jìn)程宕掉后sentinel本身也有單點(diǎn)問題
2. 如果有多個(gè)sentinel,redis的客戶端可以隨意地連接任意一個(gè)sentinel來(lái)獲得關(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啟動(dòng)程序 redis-3.2.8/sentinel.conf是配置文件。
5. 運(yùn)行sentinel兩種方式(效果相同)
法1:redis-sentinel /path/to/sentinel.conf
法2:redis-server /path/to/sentinel.conf --sentinel
1. 以上兩種方式,都必須指定一個(gè)sentinel的配置文件sentinel.conf,如果不指定,將無(wú)法啟動(dòng)sentinel。
2. sentinel默認(rèn)監(jiān)聽26379端口,所以運(yùn)行前必須確定該端口沒有被別的進(jìn)程占用。
6. sentinel.conf配置文件說明
1. 配置文件只需要配置master的信息就好啦,不用配置slave的信息,因?yàn)閟lave能夠被自動(dòng)檢測(cè)到
2. 需要注意的是,配置文件在sentinel運(yùn)行期間是會(huì)被動(dòng)態(tài)修改的,例如當(dāng)發(fā)生主備切換時(shí)候,配置文件中的master會(huì)被修改為另外一個(gè)slave。
3. 這樣,之后sentinel如果重啟時(shí),就可以根據(jù)這個(gè)配置來(lái)恢復(fù)其之前所監(jiān)控的redis集群的狀態(tài)。
# sentinel.conf 配置說明sentinel monitor mymaster 127.0.0.1 6379 2sentinel down-after-milliseconds mymaster 60000sentinel failover-timeout mymaster 180000sentinel parallel-syncs mymaster 1
7. 配置傳播
1. 一旦一個(gè)sentinel成功地對(duì)一個(gè)master進(jìn)行了failover,它將會(huì)把關(guān)于master的最新配置通過廣播形式通知其它sentinel,其它的sentinel則更新對(duì)應(yīng)master的配置。
2. 一個(gè)faiover要想被成功實(shí)行,sentinel必須能夠向選為master的slave發(fā)送SLAVE OF NO ONE命令,然后能夠通過INFO命令看到新master的配置信息。
3. 當(dāng)將一個(gè)slave選舉為master并發(fā)送SLAVE OF NO ONE`后,即使其它的slave還沒針對(duì)新master重新配置自己,failover也被認(rèn)為是成功了的。
因?yàn)槊恳粋€(gè)配置都有一個(gè)版本號(hào),所以以版本號(hào)最大的那個(gè)為標(biāo)準(zhǔn):
1)假設(shè)有一個(gè)名為mymaster的地址為192.168.1.50:6379。
2)一開始,集群中所有的sentinel都知道這個(gè)地址,于是為mymaster的配置打上版本號(hào)1。
3)一段時(shí)候后mymaster死了,有一個(gè)sentinel被授權(quán)用版本號(hào)2對(duì)其進(jìn)行failover。
4)如果failover成功了,假設(shè)地址改為了192.168.1.50:9000,此時(shí)配置的版本號(hào)為2
5)進(jìn)行failover的sentinel會(huì)將新配置廣播給其他的sentinel,發(fā)現(xiàn)新配置的版本號(hào)為2時(shí),版本號(hào)變大了,說明配置更新了,于是就會(huì)采用最新的版本號(hào)為2的配置。
以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持好吧啦網(wǎng)。
相關(guān)文章:
1. 解決AJAX返回狀態(tài)200沒有調(diào)用success的問題2. ASP刪除img標(biāo)簽的style屬性只保留src的正則函數(shù)3. 如何在jsp界面中插入圖片4. 爬取今日頭條Ajax請(qǐng)求5. jsp EL表達(dá)式詳解6. Ajax實(shí)現(xiàn)表格中信息不刷新頁(yè)面進(jìn)行更新數(shù)據(jù)7. jsp中sitemesh修改tagRule技術(shù)分享8. asp(vbscript)中自定義函數(shù)的默認(rèn)參數(shù)實(shí)現(xiàn)代碼9. ASP基礎(chǔ)知識(shí)VBScript基本元素講解10. JSP servlet實(shí)現(xiàn)文件上傳下載和刪除
