1. 程式人生 > >Redis Sentinel 介紹

Redis Sentinel 介紹

通信 狀態 是否 節點配置 故障轉移 channels eset quorum ddr

Redis Sentinel sentinel的功能: 監控:sentinel節點定期檢測redis數據節點,其余sentinel節點是否可達。 通知:sentinel 節點會將故障轉移結果通知給應用方 主節點故障轉移:實現從節點晉升為主節點 配置提供者:在redis sentinel結構中,客戶端在初始化的時候連接的是sentinel節點集合。從中取得主節點信息。 多個sentinel節點之間相互獨立,如何發現彼此呢?: 1 sentinel通過訂閱主節點(主節點即我們加入sentinel高可用的節點:如sentinel monitor jia2 127.0.0.1 4014 2 。黑體為主節點 )的 _sentinel_:hello (PUBSUB CHANNELS 命令可以查到該訂閱)了解其他 sentinel 節點信息。如果是新加入的sentinel節點。就將該節點信息保存起來。 2 sentinel節點之間交換主節點的狀態。作為客觀下線的依據。 註意:其實一個sentinel節點和那些sentinel節點通訊由 他連接的 master決定。 一個sentinel會和 他master 下的 slave 。master連接的其他sentinel 通信。 建議:一個業務一套sentinel。一套sentinel 3個節點。方便管理。 sentinel 節點的publish格式如下: <sentinel 節點ip> <sentinel節點端口> <sentinel runid> <sentinel節點配置版本><主節點名字><主節點ip><主節點端口><主節點配置版本> <主節點名字><主節點ip><主節點端口> :構成唯一的高可用。任何一個可以在同個網絡內的sentinel如果設置了相同的 seninel monitor <主節點名字> <主節點ip><主節點端口> 會成為同一個高可用。
redis sentinel 客戶端基本實現: 1、遍歷所有提供的sentinel節點,獲取一個可用的sentinel節點。通過 sentinel get-master-addr-by-name master-name 找到主節點。 當然也可以找到從節點(但是sentinel只對主節點高可用。如果要發現從節點。建議故障轉移完了且定時執行sentinel reset <master-name>,這樣可以保證得到可用的slave。)。 2、redis sentinel 客戶端只有在初始化的時候和切換主節點時候需要和sentinel節點集合進行交互來獲取主節點。所以在設計客戶端時候需要將sentinel 節點集合配置成發現服務。(sentinel下面master發生變化才通知客戶端重新獲取連接。即監控》通知
) 故障轉移: 主觀下線sdown:單個sentinel認為master掛了。告知其他sentinel節點檢查該master。 客觀下線odown:超過quorum個sentinel認為master掛了》使用Raft算法選舉領導者sentinel進行故障轉移 故障轉移:下線當前master》選擇slave-priority優先級高的slave節點提升為新主節點(slaveof no one)》其他節點執行slaveof 新主節點》告知client(client端的API訂閱) 註意:下線後可能沒有馬上更新master的信息。可設置腳本sentinel reset <master-name> 。語句必須對所有sentinel執行。(因為可能老的主節點已死。但是sentinel把它列入為新主節點的從。所以如果要把這節點下線不用。一定要對所有sentinel reset <master-name> 。不然下次舊主節點起來依然被sentinel拉入作為從。) 相關命令: sentinel monitor <master-name> <ip> <port> <quorum> 加入sentinel sentinel remove <master-name> 移除master sentinel client-reconfig-script <master-name> <script> 故障轉移後執行的腳本 。參考故障轉以後提供給腳本的對應參數。 sentinel masters sentinel master <master-name> sentinel slaves <master-name> sentinel sentinels <master-name> 查看一個master的所有sentinels sentinel flushconfig sentinel reset <master> 更新sentinel的信息。

Redis Sentinel 介紹