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數據節點的狀態變化。