深入理解Redis7哨兵模式(保姆級教學(xué))
一定一定要把云服務(wù)器的防火墻打開一定要?。。。。。。。?!否則不成功?。。。。。。。?!
哨兵是什么
相當(dāng)于吹哨人,吹哨人巡查監(jiān)控后臺master主機(jī)是否故障,如果故障了根據(jù)投票數(shù)自動(dòng)將某一個(gè)庫,轉(zhuǎn)換為新主庫,繼續(xù)對外服務(wù) ??????? ???????
哨兵的作用
- 主從監(jiān)控:監(jiān)控主從redis庫是否正常運(yùn)行
- 消息通知:哨兵可以將故障轉(zhuǎn)移的結(jié)果發(fā)送給客戶端
- 故障轉(zhuǎn)移:如果Master異常,則會(huì)進(jìn)行主從切換,將其中一個(gè)Slave作為新的Master
- 配置中心:客戶端通過連接哨兵來獲得當(dāng)前Redis服務(wù)的主節(jié)點(diǎn)地址
案例演示
前期準(zhǔn)備
三個(gè)哨兵:自動(dòng)監(jiān)控和維護(hù)集群,不存放數(shù)據(jù),只是吹哨人
一主二從:用于數(shù)據(jù)讀取和存放
由于個(gè)人經(jīng)費(fèi)有限,只有三臺云服務(wù)器演示,這里我就將三臺哨兵配置到6379這個(gè)服務(wù)器上
案例步驟
1、/myredis目錄下新建或者拷貝sentinel.conf文件
2、配置文件修改
首先我們拷貝三份不同端口的代碼:
我們進(jìn)入每個(gè)代碼使用vim filename
將內(nèi)容刪除復(fù)制以下內(nèi)容:
bind 0.0.0.0 daemonize yes protected-mode no port 26379 logfile "/myredis/sentinel26379.log" pidfile /var/run/redis-sentinel26379.pid dir /myredis sentinel monitor 主機(jī)名 62.234.60.208 6379 2 sentinel auth-pass 主機(jī)名 密碼
解釋一下最后兩個(gè)配置文件作用:
sentinel monitor <master-name><redis-port> <quorum> 設(shè)置要監(jiān)控的master服務(wù)器,quorum表示最少有幾個(gè)哨兵認(rèn)可客觀下線同意故障遷移的法定票數(shù)
master設(shè)置了密碼,連接master服務(wù)的密碼
先啟動(dòng)一主二從三個(gè)redis實(shí)例,則是正常的主從復(fù)制
這里我們不能忘記之前主機(jī)的配置,6379后續(xù)可能會(huì)變成從機(jī),需要設(shè)置訪問新主機(jī)的密碼, 請?jiān)O(shè)置masterauth項(xiàng)訪問密碼你其他機(jī)器所設(shè)置密碼
master主機(jī)配置文件匯總
哨兵 啟動(dòng)
先啟動(dòng)三個(gè)哨兵,完成監(jiān)控 redis-sentinel sentinel26379.conf --sentine
啟動(dòng)三個(gè)哨兵之哦胡在測試一側(cè)主從復(fù)制
原有的master掛了
我們這里手動(dòng)關(guān)閉6379服務(wù)器,模擬master掛了
此時(shí)我們可以等待一下,哨兵投票
此時(shí)我們可以看出,當(dāng)主機(jī)down之后從機(jī)6381上位
我們看一下sentinel26379.log的日志
這是一段Redis Sentinel的日志,它記錄了Redis服務(wù)器和Sentinel的一些狀態(tài)變化。以下是一些關(guān)鍵事件的解釋:
sdown
(主觀下線):Sentinel認(rèn)為某個(gè)服務(wù)器無法訪問,可能是網(wǎng)絡(luò)問題或者服務(wù)器崩潰。Redis is starting
:Redis服務(wù)器正在啟動(dòng)。Warning: Could not create server TCP listening socket 0.0.0.0:26379: bind: Address already in use
:Redis Sentinel試圖在端口26379上啟動(dòng),但是這個(gè)端口已經(jīng)被其他進(jìn)程使用了。+new-epoch
:Sentinel開始了新的紀(jì)元,這通常意味著主服務(wù)器失效,Sentinel正在選舉新的主服務(wù)器。+vote-for-leader
:Sentinel投票選舉新的領(lǐng)導(dǎo)者。+switch-master
:Sentinel已經(jīng)將主服務(wù)器從一個(gè)服務(wù)器切換到另一個(gè)服務(wù)器。+slave
:Sentinel識別到一個(gè)新的從服務(wù)器。
以下是這段Redis Sentinel日志中每一行的解釋:
4346:X 30 Dec 2023 20:25:14.957 # oO0OoO0OoO0Oo Redis is starting oO0OoO0OoO0Oo
:Redis服務(wù)器(PID為4346)正在啟動(dòng)。4346:X 30 Dec 2023 20:25:14.957 # Redis version=7.0.14, bits=64, commit=00000000, modified=0, pid=4346, just started
:顯示Redis服務(wù)器的版本信息,位數(shù),提交哈希,修改狀態(tài),進(jìn)程ID和啟動(dòng)狀態(tài)。4346:X 30 Dec 2023 20:25:14.957 # Configuration loaded
:Redis服務(wù)器已成功加載配置文件。4346:X 30 Dec 2023 20:25:14.958 * monotonic clock: POSIX clock_gettime
:Redis服務(wù)器正在使用POSIX的clock_gettime函數(shù)作為其單調(diào)時(shí)鐘源。4346:X 30 Dec 2023 20:25:14.958 # Warning: Could not create server TCP listening socket 0.0.0.0:26379: bind: Address already in use
:Redis服務(wù)器試圖在端口26379上創(chuàng)建一個(gè)TCP監(jiān)聽套接字,但是這個(gè)端口已經(jīng)被其他進(jìn)程使用了。4346:X 30 Dec 2023 20:25:14.958 # Failed listening on port 26379 (TCP), aborting.
:由于無法在端口26379上監(jiān)聽,Redis服務(wù)器正在終止。26979:X 30 Dec 2023 20:25:58.361 # +sdown master mymaster 62.234.60.208 6379
:Sentinel進(jìn)程(PID為26979)報(bào)告主服務(wù)器(別名為mymaster,IP地址為62.234.60.208,端口號為6379)已經(jīng)主觀下線。26979:X 30 Dec 2023 20:25:58.487 * Sentinel new configuration saved on disk
:Sentinel進(jìn)程已經(jīng)將新的配置保存到磁盤上。26979:X 30 Dec 2023 20:25:58.487 # +new-epoch 893
:Sentinel進(jìn)程已經(jīng)開始了新的紀(jì)元(Epoch),編號為893。26979:X 30 Dec 2023 20:25:58.493 * Sentinel new configuration saved on disk
:Sentinel進(jìn)程已經(jīng)將新的配置保存到磁盤上。26979:X 30 Dec 2023 20:25:58.494 # +vote-for-leader a380684d19db383c3e7110c9aee4af069db632d2 893
:Sentinel進(jìn)程正在為領(lǐng)導(dǎo)者(ID為a380684d19db383c3e7110c9aee4af069db632d2)投票,紀(jì)元編號為893。26979:X 30 Dec 2023 20:25:59.395 # +config-update-from sentinel a380684d19db383c3e7110c9aee4af069db632d2 62.234.60.208 26381 @ mymaster 62.234.60.208 6379
:Sentinel進(jìn)程已經(jīng)從另一個(gè)Sentinel(ID為a380684d19db383c3e7110c9aee4af069db632d2,IP地址為62.234.60.208,端口號為26381)那里更新了配置。26979:X 30 Dec 2023 20:25:59.395 # +switch-master mymaster 62.234.60.208 6379 121.43.60.247 6381
:Sentinel進(jìn)程已經(jīng)將主服務(wù)器從62.234.60.208:6379切換到了121.43.60.247:6381。26979:X 30 Dec 2023 20:25:59.395 * +slave slave 118.31.6.132:6380 118.31.6.132 6380 @ mymaster 121.43.60.247 6381
:Sentinel進(jìn)程識別到一個(gè)新的從服務(wù)器(IP地址為118.31.6.132,端口號為6380)。26979:X 30 Dec 2023 20:25:59.395 * +slave slave 62.234.60.208:6379 62.234.60.208 6379 @ mymaster 121.43.60.247 6381
:Sentinel進(jìn)程識別到一個(gè)新的從服務(wù)器(IP地址為62.234.60.208,端口號為6379)。26979:X 30 Dec 2023 20:25:59.400 * Sentinel new configuration saved on disk
:Sentinel進(jìn)程已經(jīng)將新的配置保存到磁盤上。
哨兵運(yùn)行流程和選舉原理
當(dāng)一個(gè)主從配置中的master失效之后,sentinel可以選舉出的一個(gè)新的master,用于自動(dòng)接替原master的工作,主從配置中的其他redis服務(wù)器自動(dòng)只想新的masterr同步數(shù)據(jù),一般建議sentinel采取奇數(shù)臺,防止某一臺sentinel物權(quán)法鏈接到master導(dǎo)致誤切換
運(yùn)行流程
三個(gè)哨兵監(jiān)控一主二從運(yùn)行中->主管下線->客觀下線->選出領(lǐng)導(dǎo)者哨兵->由領(lǐng)導(dǎo)者哨兵確定新master
主觀下線
SDown(主觀下線):單個(gè)Sentinel實(shí)例對服務(wù)器做出的下線判斷,即單個(gè)sentinel認(rèn)為某個(gè)服務(wù)下線(有可能是接收不到訂閱,之間的網(wǎng)絡(luò)不通等等原因)。主觀下線就是說如果服務(wù)器在[sentinel down-after-milliseconds]給定的毫秒數(shù)之內(nèi)沒有回應(yīng)PING命令或者返回一個(gè)錯(cuò)誤消息, 那么這個(gè)Sentinel會(huì)主觀的(單方面的)認(rèn)為這個(gè)master不可以用了
sentinel down-after-milliseconds <masterName> <timeout>
表示master被當(dāng)前sentinel實(shí)例認(rèn)定為失效的間隔時(shí)間,這個(gè)配置其實(shí)就是進(jìn)行主觀下線的一個(gè)依據(jù)
master在多長時(shí)間內(nèi)一直沒有給Sentine返回有效信息,則認(rèn)定該master主觀下線。也就是說如果多久沒聯(lián)系上redis-servevr,認(rèn)為這個(gè)redis-server進(jìn)入到失效(SDOWN)狀態(tài)。
客觀下線
ODown(客觀下線):ODown需要一定數(shù)量的sentinel,多個(gè)哨兵達(dá)成一致意見才能認(rèn)為一個(gè)master客觀上已經(jīng)down掉
quorum這個(gè)參數(shù)是進(jìn)行客觀下線的一個(gè)依據(jù),法定人數(shù)/法定票數(shù)
意思是至少有quorum個(gè)sentinel認(rèn)為這個(gè)master有故障才會(huì)對這個(gè)master進(jìn)行下線以及故障轉(zhuǎn)移。因?yàn)橛械臅r(shí)候,某個(gè)sentinel節(jié)點(diǎn)可能因?yàn)樽陨砭W(wǎng)絡(luò)原因?qū)е聼o法連接master,而此時(shí)master并沒有出現(xiàn)故障,所以這就需要多個(gè)sentinel都一致認(rèn)為該master有問題,才可以進(jìn)行下一步操作,這就保證了公平性和高可用。
到此這篇關(guān)于深入理解Redis7哨兵模式(保姆級教學(xué))的文章就介紹到這了,更多相關(guān)Redis7哨兵模式內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Redis 多規(guī)則限流和防重復(fù)提交方案實(shí)現(xiàn)小結(jié)
本文主要介紹了Redis 多規(guī)則限流和防重復(fù)提交方案實(shí)現(xiàn)小結(jié),包括使用String結(jié)構(gòu)和Zset結(jié)構(gòu)來記錄用戶IP的訪問次數(shù),具有一定的參考價(jià)值,感興趣的可以了解一下2025-02-02Centos7 Redis主從搭建配置的實(shí)現(xiàn)
這篇文章主要介紹了Centos7 Redis主從搭建配置的實(shí)現(xiàn),小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧2018-06-06Redis如何在項(xiàng)目中合理使用經(jīng)驗(yàn)分享
這篇文章主要給大家介紹了關(guān)于Redis如何在項(xiàng)目中合理使用的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對大家學(xué)習(xí)或者使用Redis具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面來一起學(xué)習(xí)學(xué)習(xí)吧2019-04-04Redis?的內(nèi)存淘汰策略和過期刪除策略的區(qū)別
這篇文章主要介紹了Redis?的內(nèi)存淘汰策略和過期刪除策略的區(qū)別,Redis?是可以對?key?設(shè)置過期時(shí)間的,因此需要有相應(yīng)的機(jī)制將已過期的鍵值對刪除,而做這個(gè)工作的就是過期鍵值刪除策略2022-07-07