Redis從入門到深入-哨兵模式(23)
阿新 • • 發佈:2020-07-28
1. 哨兵簡介-主機“宕機”
- 將宕機的master下線
- 找一個slave作為master
- 通知所有的slave連線新的master
- 啟動新的master與slave
- 全量複製N+部分複製N
- 誰來確認master宕機了
- 找一個主?怎麼找法?
- 修改配置後,原始的主恢復了怎麼辦?
2. 哨兵
哨兵(sentinel) 是一個分散式系統, 用於對主從結構中的每臺伺服器進行監控, 當出現故障時通過投票機制選擇新的master並將所有slave連線到新的master。
- 哨兵的作用
-
監控
不斷的檢查master和slave是否正常執行。
master存活檢測、master與slave執行情況檢測 -
通知(提醒)
當被監控的伺服器出現問題時,向其他(哨兵間,客戶端)傳送通知。
-
自動故障轉移
斷開master與slave連線, 選取一個slave作為master, 將其他slave連線到新的master, 並告知客戶端新的服
務器地址
注意:
哨兵也是一臺redis伺服器, 只是不提供資料服務
通常哨兵配置數量為單數
- 啟用哨兵模式
- 配置一拖二的主從結構
- 配置三個哨兵(配置相同,埠不同)
- 啟動哨兵
redis-sentinel sentinel-埠號.conf
3. 哨兵工作原理
- 階段一:監控階段
-
用於同步各個節點的狀態資訊
-
獲取各個sentinel的狀態(是否線上)
-
獲取master的狀態
- master屬性
- run id
- role:master
- 各個slave的詳細資訊
- master屬性
-
獲取所有slave的狀態(根據master中的slave資訊)
-
slave屬性
- run id
- role:slave
- master_host、master_port
- offset
- ......
-
-
- 階段二:通知階段
- 階段三:故障轉移階段
-
伺服器列表中挑選備選master
- 線上的
- 響應慢的
- 與原master斷開時間久的
- 優先原則
- 優先順序
- offset
- runid
-
傳送指令(sentinel)
- 向新的master傳送slave of no one
- 向其他slave傳送slave of新master IP埠
-
監控
- 同步資訊
-
通知
- 保持聯通
-
故障轉移
- 發現問題
- 競選負責人
- 優選新master
- 新master上任, 其他slave切換master, 原master作為slave故障回覆後連線