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í)行語句。端口可以馬上轉(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來選擇redis。
二、修改HOST文件
這種方法和第一種少有不同。就不是從網(wǎng)絡(luò)上面改了。項(xiàng)目里面的配置可以直接用主機(jī)名。不過這種方法的缺陷是只能改IP,就是說使用的端口號要一致,每次故障只切換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只需檢測到可讀寫的redis交給項(xiàng)目就行,而且項(xiàng)目里面配置指向haproxy的IP。

上圖可知haproxy是通過交互發(fā)現(xiàn)master可用,slave都切換為down。haproxy是利用輪詢檢測。

項(xiàng)目的配置:

四、插曲
這里是sentinel檢測redis。如果3個(gè)redis,mater掛了,另外一個(gè)slave頂上。如果master重啟了,卻沒有加入集群。
問題就在這里,1的狀態(tài)都知道2是master,2確不知道有1這個(gè)slave。那就是1和2沒有通訊了。
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,但是沒有slave,后面切換回slave,他的master是2.。就是說1是master,2、3都是slave,1的狀態(tài)可以看到2、3的存在。1掛了,2就是master,3還是slave。1重啟了就應(yīng)該是slave,1的狀態(tài)也說他的master是2,但是2說他只有3這一個(gè)slave。
7、查看sentinel的切換日志

第一行,說明檢測到1已經(jīng)掛了。
第二行,移除掛了這個(gè)狀態(tài),即是1已經(jīng)恢復(fù)。
第三行,把1轉(zhuǎn)變?yōu)閟lave,master為2.
這個(gè)日志說明出問題不在sentinel,因?yàn)樗呀?jīng)完成了使命。
8、查看1的日志

這個(gè)日志說明1想去連接,但是認(rèn)證失敗。
9、我們?nèi)ジ膔edis的配置

10、檢查后一切正常
以上就是redis sentinel監(jiān)控高可用集群實(shí)現(xiàn)的配置步驟的詳細(xì)內(nèi)容,更多關(guān)于redis sentinel監(jiān)控高可用集群的資料請關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
基于Redis的限流器的實(shí)現(xiàn)(示例講解)
下面小編就為大家分享一篇基于Redis的限流器的實(shí)現(xiàn)(示例講解),具有很好的參考價(jià)值,希望對大家有所幫助。一起跟隨小編過來看看吧2017-12-12
redis快速部署為docker容器的方法實(shí)現(xiàn)
部署 Redis 作為 Docker 容器是一種快速、靈活且可重復(fù)使用的方式,特別適合開發(fā)、測試和部署環(huán)境,本文主要介紹了redis快速部署為docker容器的方法實(shí)現(xiàn),具有一定的參考價(jià)值,感興趣的可以了解一下2024-05-05
基于redis實(shí)現(xiàn)的點(diǎn)贊功能設(shè)計(jì)思路詳解
點(diǎn)贊是我們現(xiàn)在經(jīng)常見到的一個(gè)效果,如朋友圈、微博都有點(diǎn)贊的效果,下面這篇文章主要跟大家分享了基于redis實(shí)現(xiàn)的點(diǎn)贊功能設(shè)計(jì)思路的相關(guān)資料,文中介紹的非常詳細(xì),對大家實(shí)現(xiàn)點(diǎn)贊功能具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面來一起看看吧。2017-05-05
Redis?使用?List?實(shí)現(xiàn)消息隊(duì)列的優(yōu)缺點(diǎn)
這篇文章主要介紹了Redis?使用?List?實(shí)現(xiàn)消息隊(duì)列有哪些利弊,小編結(jié)合消息隊(duì)列的特點(diǎn)一步步帶大家分析使用?Redis?的?List?作為消息隊(duì)列的實(shí)現(xiàn)原理,并分享如何把?SpringBoot?與?Redission?整合運(yùn)用到項(xiàng)目中,需要的朋友可以參考下2022-01-01
redis發(fā)布訂閱_動(dòng)力節(jié)點(diǎn)Java學(xué)院整理
這篇文章主要介紹了redis發(fā)布訂閱,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧2017-08-08

