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