redis?sentinel監(jiān)控高可用集群實(shí)現(xiàn)的配置步驟
一、端口轉(zhuǎn)發(fā)
如果在一個(gè)主機(jī)里面,安裝了兩個(gè)redis實(shí)例,可以在項(xiàng)目里面配置IP端口,用iptables轉(zhuǎn)發(fā)。
iptables -t nat -A PREROUTING -p tcp --dport 6379 -j REDIRECT --to-ports 7379
當(dāng)發(fā)生切換的時(shí)候,觸發(fā)了腳本,執(zhí)行語(yǔ)句。端口可以馬上轉(zhuǎn)發(fā)帶正確的redis上面。參數(shù)的含義:
腳本配置:
腳本實(shí)例:
#!/bin/bash ?iptables?-t?nat?-I?PREROUTING?-p?tcp?--dport?6379?-j?REDIRECT?--to-ports?$7
這樣在項(xiàng)目配置就可以直接使用6379,有什么切換交給iptables轉(zhuǎn)發(fā)。IP轉(zhuǎn)發(fā)也可以用這種方法實(shí)現(xiàn)。不能這樣實(shí)現(xiàn)的原因是,sentinel和redis都是由不同的容器實(shí)現(xiàn)。除非用宿主機(jī)安裝的辦法,不然由sentinel執(zhí)行的腳本根本不能控制到宿主機(jī)的iptables來(lái)選擇redis。
二、修改HOST文件
這種方法和第一種少有不同。就不是從網(wǎng)絡(luò)上面改了。項(xiàng)目里面的配置可以直接用主機(jī)名。不過(guò)這種方法的缺陷是只能改IP,就是說(shuō)使用的端口號(hào)要一致,每次故障只切換IP,不切換端口。
echo "192.168.20.26 redis" >> /etc/hosts
這種方法不能實(shí)現(xiàn)的原因是,sentinel和項(xiàng)目執(zhí)行容器獨(dú)立,由sentinel執(zhí)行的腳本動(dòng)不了apache的host文件,除非sentinel和apache共享host文件。這非常麻煩。而且,每個(gè)sentinel有執(zhí)行一次,就需要和sentinel一樣數(shù)量的apache容器。
腳本示例:
#!/bin/bash
sed -i 's/$4/$6/g' /etc/hosts
三、用第三方代理haproxy
用這種方法的話,就不管sentinel怎么切換,haproxy只需檢測(cè)到可讀寫(xiě)的redis交給項(xiàng)目就行,而且項(xiàng)目里面配置指向haproxy的IP。
上圖可知haproxy是通過(guò)交互發(fā)現(xiàn)master可用,slave都切換為down。haproxy是利用輪詢檢測(cè)。
項(xiàng)目的配置:
四、插曲
這里是sentinel檢測(cè)redis。如果3個(gè)redis,mater掛了,另外一個(gè)slave頂上。如果master重啟了,卻沒(méi)有加入集群。
問(wèn)題就在這里,1的狀態(tài)都知道2是master,2確不知道有1這個(gè)slave。那就是1和2沒(méi)有通訊了。
1、初始狀態(tài):
2、初始master:
3、關(guān)掉1,
4、2切換為master:
5、master狀態(tài):
6、重啟1的狀態(tài):
1啟動(dòng)之后,馬上變?yōu)閙aster,但是沒(méi)有slave,后面切換回slave,他的master是2.。就是說(shuō)1是master,2、3都是slave,1的狀態(tài)可以看到2、3的存在。1掛了,2就是master,3還是slave。1重啟了就應(yīng)該是slave,1的狀態(tài)也說(shuō)他的master是2,但是2說(shuō)他只有3這一個(gè)slave。
7、查看sentinel的切換日志
第一行,說(shuō)明檢測(cè)到1已經(jīng)掛了。
第二行,移除掛了這個(gè)狀態(tài),即是1已經(jīng)恢復(fù)。
第三行,把1轉(zhuǎn)變?yōu)閟lave,master為2.
這個(gè)日志說(shuō)明出問(wèn)題不在sentinel,因?yàn)樗呀?jīng)完成了使命。
8、查看1的日志
這個(gè)日志說(shuō)明1想去連接,但是認(rèn)證失敗。
9、我們?nèi)ジ膔edis的配置
10、檢查后一切正常
以上就是redis sentinel監(jiān)控高可用集群實(shí)現(xiàn)的配置步驟的詳細(xì)內(nèi)容,更多關(guān)于redis sentinel監(jiān)控高可用集群的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
Redis分布式鎖如何自動(dòng)續(xù)期的實(shí)現(xiàn)
本文主要介紹了Redis分布式鎖如何自動(dòng)續(xù)期的實(shí)現(xiàn),文中通過(guò)示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2021-12-12Redis教程(二):String數(shù)據(jù)類型
這篇文章主要介紹了Redis教程(二):String數(shù)據(jù)類型,本文講解了String數(shù)據(jù)類型概述、相關(guān)命令列表、命令使用示例三部分內(nèi)容,需要的朋友可以參考下2015-04-04Redis中一些最常見(jiàn)的面試問(wèn)題總結(jié)
Redis在互聯(lián)網(wǎng)技術(shù)存儲(chǔ)方面使用如此廣泛,幾乎所有的后端技術(shù)面試官都要在Redis的使用和原理方面對(duì)小伙伴們進(jìn)行各種刁難。下面這篇文章主要給大家總結(jié)介紹了關(guān)于Redis中一些最常見(jiàn)的面試問(wèn)題,需要的朋友可以參考下2018-09-09Redis面試必備之緩存設(shè)計(jì)規(guī)范與性能優(yōu)化詳解
你是否在使用Redis時(shí),不清楚Redis應(yīng)該遵循的設(shè)計(jì)規(guī)范而苦惱,你是否在Redis出現(xiàn)性能問(wèn)題時(shí),不知道該如何優(yōu)化而發(fā)愁,快跟隨小編一起學(xué)習(xí)起來(lái)吧2024-03-03Redis?中ZSET數(shù)據(jù)類型命令使用及對(duì)應(yīng)場(chǎng)景總結(jié)(案例詳解)
這篇文章主要介紹了Redis?中ZSET數(shù)據(jù)類型命令使用及對(duì)應(yīng)場(chǎng)景總結(jié),本文通過(guò)示例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2023-01-01redis實(shí)現(xiàn)延時(shí)隊(duì)列的兩種方式(小結(jié))
這篇文章主要介紹了redis實(shí)現(xiàn)延時(shí)隊(duì)列的兩種方式(小結(jié)),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2021-04-04基于Redis的限流器的實(shí)現(xiàn)(示例講解)
下面小編就為大家分享一篇基于Redis的限流器的實(shí)現(xiàn)(示例講解),具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2017-12-12