推薦學習:
在一主多從結構中,如果master宕機了,就需要從多個slave中選出一個作為新的master,要想完成這樣的功能,就需要使用Redis的哨兵機制
哨兵 (sentinel) 是一個分散式系統,用於對主從結構中的每臺伺服器進行監控,當出現故障時通過投票機制選擇新的master並將所有slave連線到新的master,如下圖所示:
通知(提醒):當被監控的伺服器出現問題時,向其他哨兵、Redis伺服器傳送通知
故障轉移:斷開宕機的master與slave的連線,選取一個slave作為master,將其他slave連線新的master,並告知使用者端新的伺服器地址
注意:哨兵也是一臺redis伺服器,僅提供監控服務,不提供資料管理服務;通常哨兵的數量設定為單數(方便投票)
修改哨兵的組態檔 sentinel.conf
,組態檔位於Redis目錄下,如下圖所示:
部分設定的含義如下圖所示:
啟動哨兵
redis-sentinel filename #filename指的是組態檔名 #每個哨兵都要設定自己的組態檔
設定並啟動哨兵之後,主伺服器宕機之後,會自動的執行投票、主從切換等過程
哨兵在進行主從切換過程中經歷三個階段:
用於同步各個節點的狀態資訊,這些節點包括master、slave、哨兵,也就是整個系統所有伺服器的資訊。
主要完成的功能:
獲取各個sentinel的狀態(是否線上):新新增的哨兵要與系統中已經存在的哨兵進行資訊的互動
獲取master的狀態(通過info指令)
獲取的內容如下
1. master屬性 runid role:master 2. 各個slave在master中儲存的基本資訊
獲取所有slave的狀態(根據master中slave的資訊向所有的slave傳送info指令)
獲取的內容如下
slave屬性 runid role:slave master_host、master_port offset
具體的內部工作原理如下所述:
哨兵在通知階段要不斷的去獲取master與slave的資訊,然後將獲得的資訊在各個哨兵之間進行共用。
具體的流程如下:
哨兵通過建立的cmd連線,向master、slave傳送 hello
指令,得到他們的資訊,然後在關係網中共用:
斷開宕機的master與slave的連線,選取一個slave作為master,將其他slave連線新的master,並告知使用者端新的伺服器地址。
具體的流程如下所述:
哨兵1始終得不到master的迴應,主觀判斷master宕機,標記 sdown
(僅有一個哨兵認為master宕機)
哨兵1在關係網中傳遞訊息,向其他哨兵傳送圖中左上角的訊息
其他哨兵得到訊息之後,全部向master傳送訊息,確定master是否宕機,他們也會將自己得到的結果傳送給關係網中的其他哨兵,確定master宕機後,將標記改為 odown
(所有哨兵探測之後,超過一半的哨兵認為master宕機)
當認定master宕機之後,此時需要選舉新的master,由哪個哨兵完成這件事要通過哨兵之間的選舉決定,具體過程如下所述:
當完成哨兵之間的選舉之後,接下來就要由選舉勝出的哨兵去slave中挑選一個,將其變成新的master,具體的流程如下所述:
選出新的master之後,哨兵傳送指令給伺服器:
向新的master傳送 slaveof no one
指令
向其他slave傳送 slaveof 新masterIP埠
指令
同時還要告訴其他的哨兵新master是誰
監控階段:同步資訊
通知階段:保持聯通
故障轉移階段:
推薦學習:
以上就是一起來分析Redis哨兵模式的詳細內容,更多請關注TW511.COM其它相關文章!