Redis哨兵模式的實(shí)現(xiàn)
1、哨兵簡(jiǎn)介
master宕機(jī)場(chǎng)景的處理:
問(wèn)題:
怎么確認(rèn)master確實(shí)宕機(jī)了?(中間斷網(wǎng)1s就認(rèn)為人掛了不合適)
怎么找一個(gè)slave來(lái)暫替master?
舊的master恢復(fù)以后怎么處理?
哨兵(sentinel) 是一個(gè)分布式系統(tǒng),用于對(duì)主從結(jié)構(gòu)中的每臺(tái)服務(wù)器進(jìn)行監(jiān)控,當(dāng)出現(xiàn)故障時(shí)通過(guò)投票機(jī)制選擇新的master并將所有slave連接到新的master
哨兵的三點(diǎn)作用:
- 監(jiān)控
不斷的檢查master和slave是否正常運(yùn)行。 - 通知
當(dāng)被監(jiān)控的服務(wù)器出現(xiàn)問(wèn)題時(shí),向其他(哨兵間,客戶(hù)端)發(fā)送通知 - 自動(dòng)故障轉(zhuǎn)移
斷開(kāi)master與slave連接,選取一個(gè)slave作為master,將其他slave連接到新的master,并告知客戶(hù)端新的服務(wù)器地址
注:
- 哨兵也是一臺(tái)redis服務(wù)器,只是不提供數(shù)據(jù)服務(wù)
- 通常哨兵配置數(shù)量為單數(shù),3、5、7……
2、啟用哨兵模式
2.1 哨兵配置
查看哨兵的配置文件,過(guò)濾注釋與空行:
具體配置參數(shù)整理:
配置項(xiàng) | 實(shí)例 | 含義 |
---|---|---|
sentinel auth-pass 服務(wù)器名 密碼 | sentinel auth-pass mymaster 9527 | 連接服務(wù)器時(shí)的驗(yàn)證密碼 |
sentinel down-after-milliseconds 自定的服務(wù)器名 masterIP Port 票選數(shù)量 | sentinel monitor mymaster 1.2.3.4 6379 2 | 后面的2,即兩個(gè)哨兵認(rèn)為master掛了就是真的掛了,常為哨兵數(shù)的1/2+1 |
sentinel down-after-milliseconds 服務(wù)器名 毫秒數(shù) | sentinel down-after-milliseconds mymaster 3000 | 哨兵判定master掛掉的時(shí)間周期 |
sentinel parallel-syncs 服務(wù)器名 服務(wù)器數(shù) | sentinel parallel-syncs mymaster 1 | 指定同時(shí)進(jìn)行主從的slave數(shù)量,數(shù)值越大,要求網(wǎng)絡(luò)資源越高,數(shù)值約小,同步時(shí)間約長(zhǎng) |
sentinel failover-timeout 服務(wù)器名 毫秒數(shù) | sentinel failover-timeout mymaster 9000 | 出現(xiàn)故障后,故障切換的最大超時(shí)時(shí)間3分鐘,超過(guò)則認(rèn)定切換失敗 |
sentinel notification-script 服務(wù)名 腳本路徑 | 服務(wù)器無(wú)法正常聯(lián)通時(shí),設(shè)定的執(zhí)行腳本,通常調(diào)試使用 |
使用sed編輯文件,并重定向。生成三個(gè)哨兵的配置文件(用三個(gè)不同端口模擬三個(gè)哨兵)
哨兵啟動(dòng)指令:
redis-sentinel sentinel-端口號(hào).conf
先啟動(dòng)master、再slave、最后啟動(dòng)哨兵
2.2 哨兵模擬搭建實(shí)驗(yàn)
以本機(jī)的6379位master、6380、6381為slave,26379、26380、26381為三個(gè)sentinel,模擬實(shí)驗(yàn):
①啟動(dòng)master和slave后,啟動(dòng)26379sentinel:
②連接哨兵的客戶(hù)端,驗(yàn)證其確實(shí)不能進(jìn)行set等指令:
③啟動(dòng)哨兵26380
注意此時(shí)哨兵26379的配置文件會(huì)相應(yīng)的發(fā)生變化:
④模擬master宕機(jī),CTRL+C掉6379的server端
⑤6379重新連接服務(wù)端以后,查看哨兵控制臺(tái)日志:取消了6379的s_down標(biāo)記,但并未恢復(fù)其master的身份
3、哨兵工作原理
哨兵在進(jìn)行主從切換過(guò)程中經(jīng)歷三個(gè)階段:
- 監(jiān)控
- 通知
- 故障轉(zhuǎn)移
3.1 監(jiān)控階段
sentinel會(huì)向master和slave要信息,各個(gè)sentinel之間有專(zhuān)門(mén)通路進(jìn)行信息交換,如此便形成了一個(gè)網(wǎng)絡(luò):
3.2 通知階段
就像一個(gè)小的朋友圈,sentinel之間互相進(jìn)行信息的傳播,保持信息的對(duì)等:
3.3 故障轉(zhuǎn)移階段
①哨兵1持續(xù)發(fā)消息給master均無(wú)反應(yīng),標(biāo)記master為S_DOWN,也叫主觀下線(xiàn)
②哨兵1標(biāo)記后,并將這個(gè)消息帶回sentinel的圈子里,告訴其余哨兵,可能master掛了,于是其余哨兵開(kāi)始發(fā)送消息給master驗(yàn)證消息是否屬實(shí)
③驗(yàn)證結(jié)果確實(shí)如此,只要半數(shù)以上哨兵認(rèn)為掛了,則標(biāo)記變?yōu)镺_DOWN(這也是哨兵數(shù)量要求奇數(shù)的原因),這時(shí),O_DOWN就是客觀下線(xiàn)了
④既然確認(rèn)master掛了,那就要去處理,哪個(gè)哨兵去處理呢,每個(gè)哨兵發(fā)送掛的IP、掛的端口、自己曾經(jīng)競(jìng)選的次數(shù)、自己的runID,以便選個(gè)領(lǐng)頭的哨兵
最后由競(jìng)選出來(lái)的1號(hào)哨兵去處理:
⑤ 從slave中挑選備選master,首先淘汰掉:
- 不在線(xiàn)的
- 響應(yīng)慢的
- 與原master斷開(kāi)時(shí)間久的
對(duì)于剩下的備選,則考慮優(yōu)先級(jí)、offset、runid等等
⑥向新選出的master發(fā)送slaveof no one,斷開(kāi)原主從連接,并向其他slave發(fā)送slaveof 新masterIP端口
至此,故障轉(zhuǎn)移完成?。?/p>
到此這篇關(guān)于Redis哨兵模式的實(shí)現(xiàn)的文章就介紹到這了,更多相關(guān)Redis哨兵模式內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Redis數(shù)據(jù)結(jié)構(gòu)原理淺析
這篇文章主要為大家介紹了Redis數(shù)據(jù)結(jié)構(gòu)原理淺析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-02-02如何在centos中安裝redis插件bloom-filter
布隆過(guò)濾器在第一次add的時(shí)候自動(dòng)創(chuàng)建基于默認(rèn)參數(shù)的過(guò)濾器,Redis還提供了自定義參數(shù)的布隆過(guò)濾器,下面這篇文章主要給大家介紹了關(guān)于如何在centos中安裝redis插件bloom-filter的相關(guān)資料,需要的朋友可以參考下2021-11-11Redis的11種Web應(yīng)用場(chǎng)景簡(jiǎn)介
一些Redis原語(yǔ)命令比如LPUSH、LTRIM和 LREM等等能夠用來(lái)幫助開(kāi)發(fā)者完成需要的任務(wù)——這些任務(wù)在傳統(tǒng)的數(shù)據(jù)庫(kù)存儲(chǔ)中非常困難或緩慢。這是一篇非常有用并且實(shí)際的文章。那么要如何在你的框架中完成這些任務(wù)呢?2015-09-09Redis實(shí)現(xiàn)唯一計(jì)數(shù)的3種方法分享
這篇文章主要介紹了Redis實(shí)現(xiàn)唯一計(jì)數(shù)的3種方法分享,本文講解了基于SET、基于 bit、基于 HyperLogLog三種方法,需要的朋友可以參考下2015-03-03redis 限制內(nèi)存使用大小的實(shí)現(xiàn)
這篇文章主要介紹了redis 限制內(nèi)存使用大小的實(shí)現(xiàn),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2021-05-05odoo中使用redis實(shí)現(xiàn)緩存的步驟
這篇文章主要介紹了odoo中使用redis實(shí)現(xiàn)緩存的步驟,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2023-04-04