1. 程式人生 > 其它 >Redis應用-2.哨兵模式

Redis應用-2.哨兵模式

目錄

2.哨兵模式

2.1 哨兵簡介

哨兵(sentinel) 是一個分散式系統,用於對主從結構中的每臺伺服器進行監控,當出現故障時通過投票機制選擇新的
master,並將所有slave連線到新的master。 

哨兵的作用

監控 
    不斷的檢查master和slave是否正常執行。 
    master存活檢測、master與slave執行情況檢測 
    
通知(提醒) 
	當被監控的伺服器出現問題時,向其他(哨兵間,客戶端)傳送通知。 
	
自動故障轉移 
	斷開master與slave連線,選取一個slave作為master,將其他slave連線到新的master,並告知客戶端新的伺服器地址 

注意: 
    哨兵也是一臺redis伺服器,只是不提供資料服務 
    通常哨兵配置數量為單數  3 5 7 9  最少3

2.2 啟用哨兵模式

配置哨兵

配置一拖二的主從結構 
配置三個哨兵(配置相同,埠不同) 
(先啟主機,再啟從機,最後啟動哨兵)

參看sentinel.conf

啟動哨兵

redis-sentinel sentinel-埠號.conf

2.3 哨兵工作原理

主從切換

哨兵在進行主從切換過程中經歷三個階段 
    監控 
    通知 
    故障轉移 

階段一:監控階段

用於同步各個節點的狀態資訊 
	1.獲取各個sentinel的狀態(是否線上)
    
	2.獲取master的狀態 
        master屬性 
            runid 
            role:master 
		各個slave的詳細資訊 
		
	3.獲取所有slave的狀態(根據master中的slave資訊) 
		slave屬性 
            runid 
            role:slave 
            master_host、master_port 
            offset 
            …… 
工作順序(重點)
① sentinel先連線master獲取資訊,發一個info指令,拿到資訊,知道master和slave的狀況。 /ˈsentɪnl/
② sentinel與master建立cmd連線用於命令交換。sentinel儲存所有哨兵資訊記錄,master記錄redis例項對應的的資訊
③ sentinel根據從master獲取的slaves的資訊接著去連每一個slave,傳送info指令又把資訊拿到了

下一個sentinel進來了,也會發送info給master獲取資訊建立cmd連線,並根據master發現已經有sentinel連過,sentinel也儲存資訊,並且儲存的sentinels是兩個sentinel資訊,為了保證與前一個sentinel儲存的資訊同步,兩個sentinel之間建立溝通橋樑->釋出、訂閱。為了保證兩個sentinel資訊能夠長期對稱,它們兩個會互發ping命令檢視對方是否存在。

當第三個sentinel進來再連線master等操作,除此之外三個sentinel之間互連,三者之間形成一個內部網路,誰拿到資訊快速擴散給其他sentinel,它們之間是信任的,發現新的資訊與自己的不一樣就會把自身的資訊更新掉,這樣資訊同步速度非常快。

簡單來說,sentinel會向master、slave、其他sentinel要狀態,sentinel之間會組建一個對應的頻道,大家在裡面釋出資訊,訂閱資訊,收資訊,同步資訊。

階段二:通知階段

sentinel通過與master建立的命令連接獲取master與slave的工作狀態,無論哪個sentinel獲取到,都會把資訊回傳,各個sentinel進行資訊同步

階段三:故障轉移階段

sentinel1給master傳送命令,master沒回應,sentinel1不停的給master傳送命令,達到一定階段(預設30s)未迴應就給master標記一個SDOWN狀態,把master狀態資訊傳播到sentinel之間的內網中,說master宕機了。(如果是sentinel自己斷了,也會標記SDOWN狀態,但是這個指令不能釋出到內網中),當內網中其他的sentinel接收到指令,都會去給master傳送命令,master都未迴應,也把它們接收到的結果資訊釋出到內網裡確認sentinel1說的對,master真宕機了。當sentinel數量一半加一的sentinel說master宕機了,說明master真宕機了標記為ODOWN。
一臺sentinel認為master掛了標記SDOWN叫主觀下線
半數以上的sentinel認為master掛了標記ODOWN叫客觀下線
所有sentinel同時向它們的頻道發一個指令:內容是宕機的ip、埠、競選次數、自己的run id。
內部有投票機制,各個sentinel既是參選者也是投票者,例如有5個sentinel,sentinel1和sentinel4同時給sentinel2傳送訊息,sentinel2先收到誰的訊息就把票投給誰。若沒有選出,就再重新投票一次,每增加一次,競選次數增加1,投票完畢會推選出一個sentinel進行處置工作。
推選出的sentinel在伺服器列表中挑選備選master 
篩選條件:
    1.不線上的 
    2.響應慢的 
    3.與原master斷開時間久的 
    4.優先原則 
        優先順序 
        offset 
        runid小
        
傳送指令( sentinel ) 
    向新的master傳送slaveof no one   讓它與之前的master斷開連線
    向其他slave傳送slaveof 新master IP 埠 
監控 
	同步資訊 
通知 
	保持聯通 
故障轉移 
    發現問題 
    競選負責人 
    優選新master 
    新master上任,其他slave切換新master,原master故障恢復後作為slave連線