Redis 哨兵模式

主從 + Sentinel 哨兵模式 前言介紹

Redis Sentinel是Redis官方的高可用性解決方案。

Redis 的 Sentinel 系統(tǒng)用于管理多個(gè) Redis 服務(wù)器(instance), 該系統(tǒng)執(zhí)行以下三個(gè)任務(wù):

  • 監(jiān)控(Monitoring): Sentinel 會(huì)不斷地檢查你的主服務(wù)器和從服務(wù)器是否運(yùn)作正常。

  • 提醒(Notification): 當(dāng)被監(jiān)控的某個(gè) Redis 服務(wù)器出現(xiàn)問題時(shí), Sentinel 可以通過 API 向管理員或者其他應(yīng)用程序發(fā)送通知。

  • 自動(dòng)故障遷移(Automatic failover): 當(dāng)一個(gè)主服務(wù)器不能正常工作時(shí), Sentinel 會(huì)開始一次自動(dòng)故障遷移操作, 它會(huì)將主從復(fù)制組合中的其中一個(gè)從服務(wù)器升級(jí)為新的主服務(wù)器, 并讓其他從服務(wù)器指向新的主服務(wù)器; 當(dāng)客戶端試圖連接失效的主服務(wù)器時(shí), Sentinel也會(huì)向客戶端返回新主服務(wù)器的地址, 使得新主服務(wù)器代替失效服務(wù)器。

Redis Sentinel 是一個(gè)分布式系統(tǒng), 你可以在一個(gè)架構(gòu)中運(yùn)行多個(gè) Sentinel 進(jìn)程(progress), 這些進(jìn)程使用流言協(xié)議(gossip protocols)來接收關(guān)于主服務(wù)器是否下線的信息, 并使用投票協(xié)議(agreement protocols)來決定是否執(zhí)行自動(dòng)故障遷移, 以及選擇哪個(gè)從服務(wù)器作為新的主服務(wù)器。

雖然 Redis 為 Sentinel 生成一個(gè)單獨(dú)的可執(zhí)行文件 redis-sentinel , 但實(shí)際上它只是一個(gè)運(yùn)行在特殊模式下的 Redis 服務(wù)器。

此種模式下,客戶端要訪問的 服務(wù) IP 不是主節(jié)點(diǎn),而是 sentiner 服務(wù)器的 IP。

架構(gòu)圖

image

Redis Sentinel 故障轉(zhuǎn)移

image

架構(gòu)的擴(kuò)展應(yīng)用

image

部署環(huán)境

六個(gè)容器
三個(gè)redis服務(wù)器  一個(gè)master 兩個(gè)slave
三個(gè) sentinel
必須在用一個(gè)網(wǎng)段內(nèi)  使得六個(gè)容器能夠通信

主容器ip 172.17.0.2
從容器1 ip 172.17.0.3
從容器2 ip 172.17.0.4

三個(gè)哨兵分別是 172.17.0.5、172.17.0.6、172.17.0.7

進(jìn)入容器后執(zhí)行
yum -y install epel-release redis  supervisor

我們使用supervisor來后臺(tái)運(yùn)行redis服務(wù)

  • 配置主從服務(wù)器的啟動(dòng)文件
    詳情看 Redis主從復(fù)制
    啟動(dòng)多個(gè)從服務(wù)器就只需要將conf文件配置copy進(jìn)去就好了

  • 配置哨兵啟動(dòng)文件

[program:redis-6379]
command=/usr/bin/redis-sentinel /etc/redis/redis-sentinel.conf
autostart=true
autorestart=true
startsecs=10
startretries=3
exitcodes=0,2
stopsignal=QUIT

stopwaitsecs=1
user=root
log_stdout=true
log_stderr=false
logfile=/var/log/redis-6379.log
logfile_maxbytes=1MB
logfile_backups=3

[include]
files = relative/directory/*.ini

配置redis-sentinel.conf

bind 0.0.0.0
port 26379
protected-mode yes    #這個(gè)置為yes 是讓所有的哨兵之間進(jìn)行通信
// 監(jiān)控一個(gè) Redis 服務(wù)器
// 名稱為 mymaster ,IP 為 127.0.0.1 端口為 6380
// 最后的 2  是指最少有 2 給 Sentinel 實(shí)例同意一臺(tái) redis 服務(wù)器宕機(jī),才會(huì)認(rèn)為 客觀下線。
// sentinel monitor  自定義的主節(jié)點(diǎn)名稱 主節(jié)點(diǎn)的 IP  主節(jié)點(diǎn)端口   票數(shù) 

sentinel monitor mymaster 172.17.0.2 6379 2

sentinel down-after-milliseconds mymaster 3000

// 180 秒后開始故障自動(dòng)裝換
sentinel failover-timeout mymaster 5000

sentinel parallel-syncs mymaster 1

各個(gè)選項(xiàng)的功能如下:

down-after-milliseconds 選項(xiàng)指定了 Sentinel 認(rèn)為服務(wù)器已經(jīng)斷線所需的毫秒數(shù)。
如果服務(wù)器在給定的毫秒數(shù)之內(nèi), 沒有返回 Sentinel 發(fā)送的 PING 命令的回復(fù), 或者返回一個(gè)錯(cuò)誤, 那么 Sentinel 將這個(gè)服務(wù)器標(biāo)記為主觀下線(subjectively down,簡(jiǎn)稱 SDOWN )。

不過只有一個(gè) Sentinel 將服務(wù)器標(biāo)記為主觀下線并不一定會(huì)引起服務(wù)器的自動(dòng)故障遷移: 只有在足夠數(shù)量的 Sentinel 都將一個(gè)服務(wù)器標(biāo)記為主觀下線之后, 服務(wù)器才會(huì)被標(biāo)記為客觀下線(objectively down, 簡(jiǎn)稱 ODOWN ), 這時(shí)自動(dòng)故障遷移才會(huì)執(zhí)行。
將服務(wù)器標(biāo)記為客觀下線所需的 Sentinel 數(shù)量由對(duì)主服務(wù)器的配置決定。
parallel-syncs選項(xiàng)指定了在執(zhí)行故障轉(zhuǎn)移時(shí), 最多可以有多少個(gè)從服務(wù)器同時(shí)對(duì)新的主服務(wù)器進(jìn)行同步, 這個(gè)數(shù)字越小, 完成故障轉(zhuǎn)移所需的時(shí)間就越長(zhǎng)。

先查看一下哨兵監(jiān)控信息

哨兵啟動(dòng)查看信息

將master停掉服務(wù)

停掉master服務(wù) ip 172.12.0.2
哨兵查看信息

三個(gè)哨兵查看信息基本上都一致

查看新的主服務(wù)器信息

從變主的信息查看 ip 172.17.0.4
另一個(gè)從服務(wù)查看信息 ip 172.17.0.3

在次將172.17.0.2的redis服務(wù)啟動(dòng)

image.png

查看變成主的容器 ip:172.17.0.4

image.png

可以看到ip為172.17.0.2 變成從服務(wù)器了狀態(tài)是在線的

再次查看哨兵的信息

image.png

會(huì)發(fā)現(xiàn)是沒有改變的

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容