redis學習筆記(4):

八、Reids Sentinel(高可用實現的一個機制)

1、主從複製高可用:

1.1:主從複製高可用問題(手動故障轉移【master發生故障之後,下線master選擇一個slave爲master,然後讓其它的slave的主節點跟隨新的master】、寫能力和存儲能力受限)

2、Reids Sentinel架構(client從sentinel獲取redis主從以及IP信息)

2.1:master發生故障時,sentinel處理處理步驟

1.多個sentinel發現並確認master有問題

2.選舉出一個sentinel作爲領導

3.選出一個slave作爲master

4.通知其餘slave成爲新的master的slave

5.通知客戶端主從變化

6.等老的master重新啓動之後,設置爲新master的slave

3、三個定時任務

3.1:每10秒滅個sentinel對master和slave執行info(發現slave節點、確認主從關係)

3.2:每2秒每個sentinel通過msater節點的channel交換信息[pub/sub](通過_sentinel_:hello頻道交互、交換對節點的看法和自身信息)

3.3:每1秒每個sentinel對其它的sentinel和redis執行ping操作(心跳檢測,失敗判斷依據)

4、sentinel領導選舉

原因:只有一個sentinel節點完成故障轉移

選擇:通過sentinel is-master-down-by-addr 命令都希望成爲領導者(此命令有兩個作用:判定matser是否宕機、是否希望我成爲領導者)

4.1:每個主觀下線的sentinel節點向其他節點sentinel節點發送命令,要求將它設置爲領導者

4.2:收到命令的sentinel節點如果沒有同意通過其它sentinel節點發送的命令,那麼將同意該請求,否則拒絕

4.3:如果該sentinel節點發現自己的票數已經超過sentinel集合半數且超過quorum,那麼它將成爲領導者

4.4:如果此過程有多個sentinel節點成爲了領導者,那麼將等待一段時間重新進行選舉

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

5.1:從slave節點中選出一個合適的節點作爲新的master節點

5.1.1 選擇slave-priority(salve節點優先級)最高的slave界定啊,如果存在則返回,不存在則繼續

5.1.2 選擇複製偏移量最大的slave節點(複製的最完整),如果存在則返回,不存在則繼續

5.1.3 選擇runId最小的slave節點

5.2:對上面的slave節點執行salve of one 命令讓其成爲master節點

5.3:向生於的slave節點發送命令。讓他們成爲master節點的slave節點,複製規則和parallel-syncs參數有關

5.4:更新對原來master節點配置爲salve,並保持着對其關注,當其恢復後命令它去複製新的master節點

6、節點運維(master、slave、sentinel)

6.1:機器下線,例如過保等情況

6.2:機器性能不足,例如cpu、內存、硬盤、網絡等

6.3:節點自身故障:例如服務不穩定等

主節點運維:sentinel failover <masterName> 

節點運維:從節點臨時下線還是永久下線,例如是否做一些清理工作,但是要考慮讀寫分離的情況;

節點上線:主節點(sentinel failover進行替換)、從節點(從salveof即可),sentinel節點可以感知、sentinel節點(參考其它sentinel節點啓動即可)

7、高可用讀寫分離

從節點的作用:副本(高可用發基礎);擴展(讀能力);

三個消息:+switch-master(切換主節點,從節點晉升主節點);+convert-to-slave(切換從節點,原主節點將爲從節點);+sdown(主觀下線)

8、總結

8.1 redis sentinel是redis的高可用實現方案(故障發現、故障自動轉移、配置中心、客戶端通知)

8.2 redis sentinel從redis2.8版本開始正式生產可用,之前版本不可用

8.3 儘可能在不同的物理機器上部署sentinel所有節點

8.4 redis sentinel中的sentinel節點個數應該爲大於等於3且最好爲奇數

8.5 redis sentinel中的數據節點與普通數據節點沒有區別

8.6 客戶端初始化時連接的是sentinel節點集合,不再是具體的redis節點,但sentinel只是配置中心不是代理

8.7 redis sentinel通過三個定時任務實現了sentinel節點對於主節點、從節點其餘sentinel節點監控

8.8 redis sentinel在對節點做失敗判斷時分爲主觀下線和客觀下線

8.9 看懂redis sentinel故障轉移日誌對於redis sentinel以及問題排查非常有幫助

8.10 redis sentinel實現讀寫分離高可用可以依賴sentinel節點的消息通知,獲取redis數據節點的狀態變化

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章