哨兵機制存在的意義:
爲了實現redis故障轉移的自動化。自動發現,自動轉移。不須要人工參與。redis
用戶管理多個Redis服務器,該系統執行三個任務:
- 監控:哨兵會不間斷的檢查Master和Slave是否正常運行
- 提醒:當被監控的某個Redis出現問題,哨兵經過API向管理員或者應用程序發送通知
- 自動故障遷移:當一個Master不能正常工做,哨兵會開始一次故障遷移,而後將失效的Master的其中一個Slave升級爲新的Master,並讓失效的Master的其餘Slave改成複製新的Master;當客戶端嘗試連接失效的Master時,集羣會向客戶端返回新的Master的地址,使集羣能夠使用Master代替失效的Master。
哨兵是一個分佈式系統,能夠在一個架構中運行多個哨兵進程,這些進程使用流言協議接收關於Master是否下線的信息,並使用投票協議決定是否執行自動故障遷移,以及選擇哪一個Slave做爲新的Master
-
每一個哨兵會向其它哨兵、master、slave定時發送信息,確認對方是否活着, 若是對方在指定時間內未迴應,則暫時認爲對方已掛。
-
若哨兵(sentinel)羣多數sentinel認爲某一master麼響應,系統才認爲該master死亡(down機),經過必定的vote算法,從剩下的slave節點,選一臺提高爲master,而後自動修改相關配置。
雖然哨兵釋出爲一個單獨的可執行文件redis-sentinel,但實際上它只是一個運行在特殊模式下的Redis服務器,能夠在啓動一個普通的Redis服務器時經過給定 --sentinel 選項來啓動哨兵。