Redis哨兵模式,一主二仆反客為主,論故障轉移和恢復能力還得是它呀
實際場景分析:為了解決主從模式的無法自動容錯及恢復的問題,Redis引入了一種哨兵模式的集群架構。哨兵模式是在主從復制的基礎上加入了哨兵節(jié)點。哨兵節(jié)點是一種特殊的Redis節(jié)點,用于監(jiān)控主節(jié)點和從節(jié)點的狀態(tài)。當主節(jié)點發(fā)生故障時,哨兵節(jié)點可以自動進行故障轉移,選擇一個合適的從節(jié)點升級為主節(jié)點,并通知其他從節(jié)點和應用程序進行更新。
圖片
在原來的主從架構中,引入哨兵節(jié)點,其作用是監(jiān)控Redis主節(jié)點和從節(jié)點的狀態(tài)。每個Redis實例都可以作為哨兵節(jié)點,通常需要部署多個哨兵節(jié)點,以確保故障轉移的可靠性。
好啦,話不多說,接下來就讓我們一起實操吧!
看重點
看到最后:免費領取詳細的Word文檔?
圖片
01哨兵模式原理
哨兵節(jié)點定期向所有主節(jié)點和從節(jié)點發(fā)送PING命令,如果在指定的時間內未收到PONG響應,哨兵節(jié)點會將該節(jié)點標記為主觀下線。如果一個主節(jié)點被多數(shù)哨兵節(jié)點標記為主觀下線,那么它將被標記為客觀下線。
當主節(jié)點被標記為客觀下線時,哨兵節(jié)點會觸發(fā)故障轉移過程?!彼鼤乃薪】档膹墓?jié)點中選舉一個新的主節(jié)點,并將所有從節(jié)點切換到新的主節(jié)點,實現(xiàn)自動故障轉移。同時,哨兵節(jié)點會更新所有客戶端的配置,指向新的主節(jié)點。
哨兵節(jié)點通過發(fā)布訂閱功能來通知客戶端有關主節(jié)點狀態(tài)變化的消息。客戶端收到消息后,會更新配置,將新的主節(jié)點信息應用于連接池,從而使客戶端可以繼續(xù)與新的主節(jié)點進行交互。
這個集群模式的優(yōu)點就是為整個集群系統(tǒng)了一種故障轉移和恢復的能力。
02搭建Redis哨兵模式步驟
2.1 安裝Redis主從模式(一主二仆)
Redis主從模式具體步驟請參考詳文《不要只會玩兒Redis單機版,如果是讀多寫少的情況,請選擇Redis主從模式吧》
PS:如果都是一臺服務器測試哨兵模式,請將slave-6380.conf和slave-6381.conf中slaveof 127.0.01 6379
2.2 配置Redis哨兵模式(sentinel)具體步驟如下
2.2.1 啟動好一主二仆模式,6379帶著6380、6381
查看詳細信息:info replication
圖片
圖片
圖片
2.2.2 自定義的config目錄下新建sentinel.conf文件
新建sentinel文件命令:touch sentinel.conf
配置哨兵,填寫內容:vi sentinel.conf
sentinel monitor mymaster 127.0.0.1 6379 1
#其中mymaster為監(jiān)控對象起的服務器名稱,1為至少有多少個哨兵同意遷移的數(shù)量
sentinel down-after-milliseconds mymaster 30000
#判定服務器down掉的時間周期,默認30000毫秒(30秒)
2.2.3 啟動哨兵
退回上級目錄:cd ../
執(zhí)行命令:./redis-sentinel config/sentinel.conf
圖片
2.2.4 當主機掛掉,從機選舉中產生新的主機
(大概10秒左右可以看到哨兵窗口日志,切換了新的主機)
哪個從機會被選舉為主機呢?根據(jù)優(yōu)先級別:slave-priority
原主機重啟后會變?yōu)閺臋C。
圖片
圖片
PS:如果都是一臺服務器測試哨兵模式,發(fā)現(xiàn)6379宕機后并沒有實現(xiàn)選舉從機過程,請務必將6380和6381的slaveof后的IP地址修改為127.0.0.1,將sentinel.conf中sentinel monitor mymaster 127.0.0.1 6379 1的IP地址也統(tǒng)一設置為127.0.0.1
03哨兵模式應用總結
哨兵模式的優(yōu)勢主要在于當主節(jié)點發(fā)生故障時,哨兵節(jié)點可以自動進行故障轉移與自動恢復,選擇一個合適的從節(jié)點升級為主節(jié)點,并通知其他從節(jié)點和應用程序進行更新。
但是哨兵模式最大的缺點,就是不適用于大規(guī)模應用的解決方案,它無法提供了更好的橫向擴展和容錯能力。