首頁 > 軟體

redis sentinel監控高可用叢集實現的設定步驟

2022-04-01 13:03:16

一、埠轉發

如果在一個主機裡面,安裝了兩個redis範例,可以在專案裡面設定IP埠,用iptables轉發。

iptables -t nat -A PREROUTING -p tcp --dport 6379 -j REDIRECT --to-ports 7379

當發生切換的時候,觸發了指令碼,執行語句。埠可以馬上轉發帶正確的redis上面。引數的含義:

指令碼設定:

指令碼範例:

#!/bin/bash
 iptables -t nat -I PREROUTING -p tcp --dport 6379 -j REDIRECT --to-ports $7

這樣在專案設定就可以直接使用6379,有什麼切換交給iptables轉發。IP轉發也可以用這種方法實現。不能這樣實現的原因是,sentinel和redis都是由不同的容器實現。除非用宿主機安裝的辦法,不然由sentinel執行的指令碼根本不能控制到宿主機的iptables來選擇redis。

二、修改HOST檔案

這種方法和第一種少有不同。就不是從網路上面改了。專案裡面的設定可以直接用主機名。不過這種方法的缺陷是隻能改IP,就是說使用的埠號要一致,每次故障只切換IP,不切換埠。

echo "192.168.20.26 redis" >> /etc/hosts

這種方法不能實現的原因是,sentinel和專案執行容器獨立,由sentinel執行的指令碼動不了apache的host檔案,除非sentinel和apache共用host檔案。這非常麻煩。而且,每個sentinel有執行一次,就需要和sentinel一樣數量的apache容器。

指令碼範例:

#!/bin/bash

sed -i 's/$4/$6/g'  /etc/hosts

三、用第三方代理haproxy

用這種方法的話,就不管sentinel怎麼切換,haproxy只需檢測到可讀寫的redis交給專案就行,而且專案裡面設定指向haproxy的IP。

上圖可知haproxy是通過互動發現master可用,slave都切換為down。haproxy是利用輪詢檢測。

專案的設定:

四、插曲

這裡是sentinel檢測redis。如果3個redis,mater掛了,另外一個slave頂上。如果master重啟了,卻沒有加入叢集。

問題就在這裡,1的狀態都知道2是master,2確不知道有1這個slave。那就是1和2沒有通訊了。

1、初始狀態:

2、初始master:

3、關掉1,

4、2切換為master:

5、master狀態:

6、重啟1的狀態:

1啟動之後,馬上變為master,但是沒有slave,後面切換回slave,他的master是2.。就是說1是master,2、3都是slave,1的狀態可以看到2、3的存在。1掛了,2就是master,3還是slave。1重啟了就應該是slave,1的狀態也說他的master是2,但是2說他只有3這一個slave。

7、檢視sentinel的切換紀錄檔

第一行,說明檢測到1已經掛了。

第二行,移除掛了這個狀態,即是1已經恢復。

第三行,把1轉變為slave,master為2.

這個紀錄檔說明出問題不在sentinel,因為他已經完成了使命。

8、檢視1的紀錄檔

這個紀錄檔說明1想去連線,但是認證失敗。

9、我們去改redis的設定

10、檢查後一切正常

以上就是redis sentinel監控高可用叢集實現的設定步驟的詳細內容,更多關於redis sentinel監控高可用叢集的資料請關注it145.com其它相關文章!


IT145.com E-mail:sddin#qq.com