Redis Sentinel 服務端實現原理

Redis主從複製-masterredis

 

 

高可用解決方案代理

三個定時任務日誌

一、每10秒每一個sentinel對master和slave執行info部署

    (1) 發現slave節點it

    (2) 確認主從關係io

二、每2秒每一個sentinel經過master節點的channel交換信息(pub/sub)ast

    (1) 經過_sentinel_:hello頻道交互監控

    (2) 交互對節點的「見解」和自身信息配置

三、每1秒每一個sentinel對其餘sentinel和redis執行ping定時任務

    (1) 心跳監測,失敗斷定依據

 

領導者選舉

緣由:只有一個sentinel節點完成故障轉移

選舉:經過 sentinel is-master-down-by-addr 命令都但願成爲領導者

一、每一個作主觀下線的sentinel節點向其餘sentinel節點發送命令,要求將它設置爲領導者。

二、收到命令的sentinel節點若是沒有贊成其餘sentinel節點發送的命令,那麼將贊成該請求,不然拒絕。

三、若是該sentinel節點發現本身的 number of votes 已經超過sentinel集合半數且超過quorum,那麼它將成爲領導者。

四、若是此過程有多個sentinel節點成爲了領導者,那麼將等待一段時間從新進行選擇。

 

故障轉移(sentinel領導者節點完成)

一、從slave節點中選出一個「合適的」節點做爲新的master節點

二、對上面的slave節點執行 slaveof no one 命令讓其成爲master節點

三、向剩餘的slave節點發送命令,讓它們成爲新的master節點的salve節點,複製規則和parallel-syncs參數有關。

四、更新對原來master節點配置爲slave,並保持着對其「關注」,當其回覆後命令它去複製新的master節點。

 

選擇「合適的」slave節點

一、選擇 slave-priority(slave節點優先級)最高的salve節點,若是存在則返回,不存在則繼續。

二、選擇複製偏移量最大的slave節點(複製的最完整),若是存在則返回,不存在則繼續。

三、選擇runId最小的salve節點。

 

總結

一、Redis Sentinel 是Redis的高可用使用方案:故障發現、故障自動轉移、配置中心、客戶端通知。

二、Redis Sentinel 從Redis2.8版本開始才正式生產可用,以前版本生產不可用。

三、儘量在不一樣物理機上部署Redis Sentinel全部節點。

四、Redis Sentinel 中的Sentinel節點個數應該爲大於等於3且最好爲奇數。

五、Redis Sentinel 中的數據節點與普通節點沒有區別。

六、客戶端初始化時鏈接的是Sentinel節點集合,再也不是具體的Redis節點,但Sentinel只是配置中心不是代理。

七、Redis Sentinel 經過三個定時任務實現了Sentinel節點對於主節點、從節點其他Sentinel節點的監控。

八、Redis Sentinel 在對節點作失敗斷定時分爲主觀下線和客觀下線。

九、看懂 Redis Sentinel 故障轉移日誌對於 Redis Sentinel 以及問題排查很是有幫助。

十、Redis Sentinel 實現讀寫分離高可用能夠依賴 Sentinel 節點的消息通知,獲取Redis數據節點的狀態變化。

相關文章
相關標籤/搜索