1. 程式人生 > 實用技巧 >Redis從入門到深入-哨兵模式(23)

Redis從入門到深入-哨兵模式(23)

1. 哨兵簡介-主機“宕機”
  • 將宕機的master下線
  • 找一個slave作為master
  • 通知所有的slave連線新的master
  • 啟動新的master與slave
  • 全量複製N+部分複製N
  • 誰來確認master宕機了
  • 找一個主?怎麼找法?
  • 修改配置後,原始的主恢復了怎麼辦?

2. 哨兵

哨兵(sentinel) 是一個分散式系統, 用於對主從結構中的每臺伺服器進行監控, 當出現故障時通過投票機制選擇新的master並將所有slave連線到新的master。

  1. 哨兵的作用
  • 監控

    不斷的檢查master和slave是否正常執行。
    master存活檢測、master與slave執行情況檢測

  • 通知(提醒)

    當被監控的伺服器出現問題時,向其他(哨兵間,客戶端)傳送通知。

  • 自動故障轉移

    斷開master與slave連線, 選取一個slave作為master, 將其他slave連線到新的master, 並告知客戶端新的服
    務器地址

注意:

哨兵也是一臺redis伺服器, 只是不提供資料服務
通常哨兵配置數量為單數
  1. 啟用哨兵模式
  • 配置一拖二的主從結構
  • 配置三個哨兵(配置相同,埠不同)
  • 啟動哨兵
redis-sentinel sentinel-埠號.conf

3. 哨兵工作原理
  1. 階段一:監控階段
  • 用於同步各個節點的狀態資訊

    • 獲取各個sentinel的狀態(是否線上)

    • 獲取master的狀態

      • master屬性
        • run id
        • role:master
      • 各個slave的詳細資訊
    • 獲取所有slave的狀態(根據master中的slave資訊)

      • slave屬性

        • run id
        • role:slave
        • master_host、master_port
        • offset
        • ......

  1. 階段二:通知階段

  1. 階段三:故障轉移階段

  • 伺服器列表中挑選備選master

    • 線上的
    • 響應慢的
    • 與原master斷開時間久的
    • 優先原則
      • 優先順序
      • offset
      • runid
  • 傳送指令(sentinel)

    • 向新的master傳送slave of no one
    • 向其他slave傳送slave of新master IP埠
  • 監控

    • 同步資訊
  • 通知

    • 保持聯通
  • 故障轉移

    • 發現問題
    • 競選負責人
    • 優選新master
    • 新master上任, 其他slave切換master, 原master作為slave故障回覆後連線