Redis應用-2.哨兵模式
阿新 • • 發佈:2021-09-19
目錄
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連線