redis哨兵模式是redis的高可用架構(gòu)的一種方式,它的出現(xiàn)是為了解決主從模式下主節(jié)點(diǎn)掛了不能自動故障轉(zhuǎn)移的問題,下面是比較簡單的哨兵的架構(gòu)

實際上手搭建過哨兵的同學(xué)應(yīng)該知道,一個哨兵里有個配置sentinel monitor mymaster 35.236.172.131 6379 1,但是也沒配置從的ip和其他哨兵的ip,其實他們都是通過主這臺機(jī)器來進(jìn)行的關(guān)聯(lián),主是多么的重要啊
工作流程
1。哨兵 去每隔 1秒鐘就像架構(gòu)中所有的機(jī)器去ping一下,如果一臺機(jī)器距離最后一次ping命令的時間超過
down-after-miliseconds配置的值就會被該哨兵標(biāo)記為主觀下線(SDOWN)
2。如果哨兵標(biāo)記了主服務(wù)器為主觀下線,接下來他就會去問問其他的哨兵(sentinelis-masterdown-by-addr 命令詢問),喂 我說,主好像掛了,你們怎么 看,其他哨兵:什
么!? 我們?nèi)タ纯?br>
3。當(dāng)有足夠多的哨兵(過半)都認(rèn)識主掛了,就把主改為客觀下線(ODOWN)
4。哨兵們坐在一起開始商量:丫掛了 我們應(yīng)該選一個代理人出來當(dāng)主啊,不然我們就是失職了,會被裁掉的,我選擇我去做這件事吧。你們同意嗎?(哨兵選出leader,is-master-down-by-addr命令詢問是否同意我成為主 )
5。哨兵leader來再存活的從里找一個出來成為主,并且進(jìn)行故障轉(zhuǎn)移
問題(重點(diǎn))來了,哨兵leader是怎么來選擇從成為主呢?
- 過濾故障節(jié)點(diǎn)
- 根據(jù)優(yōu)先級進(jìn)行選擇,配置文件slave-priority 配置的信息,默認(rèn)100 ,值最低成為主
-
選擇復(fù)制偏移量最大的從為主,這個是在主從復(fù)制時,主從都會維護(hù)一個自身的偏移量,可以簡單理解為消息id
2.jpg - 選擇runid最小的從成為主
runid可以通過info命令查看,redis每次重啟runid都會變動,值越小說明 重啟的時間越靠前
附一張流程圖

這里線上使用時幾個小細(xì)節(jié),
1.redis使用時為了保證數(shù)據(jù)可靠性一般回開啟持久化功能,然而持久化也是要消耗資源的,然而讀寫最終都是通過主來處理,因此這里建議主不開啟持久化,讓從開啟就好了。
這樣即保證了數(shù)據(jù)的安全性, 也避免持久化對主節(jié)點(diǎn)的影響
2.如果是1主多從的情況,使用線性結(jié)構(gòu),避免使用樹形結(jié)構(gòu)
