Redis集羣 - Sentinel與RAFT算法

引入

  在主從模型中講到html

一旦Master宕機失效,須要手動將Slave角色提高爲Master,不然這個子集羣將不可用。redis

  這個缺陷使得系統可用性大大下降。所以Redis專門提供了一個哨兵機制來實現自動故障檢測和轉移。網絡

什麼是哨兵

  哨兵(Sentinel)是一種特殊的Redis實例,與Redis存儲實例同樣,哨兵一樣是基於配置的。
  你能夠經過如下兩種方式啓動哨兵:code

redis-sentinel /path/to/sentinel.conf
    redis-server /path/to/sentinel.conf --sentinel

哨兵須要作什麼

  • 監控節點狀態
  • 當Master節點故障時,自動提高Replication(Slave)爲Master
  • 發送故障通知
  • 配置傳播(就是把更新後的集羣配置傳播給其餘哨兵進行更新,保持一致性)

怎麼實現

  • 節點監控
      如圖(圖中S爲Sentinel,M爲Master,R爲Replication即Slave),Sentinel模型集羣中的每一個Sentinel都在監控着每一個節點,每隔一段時間會向每一個節點發送PING,經過返回的PONG信息確認節點正常。
    server


      Sentinel與監控的節點之間實現了SUB/PUB(發佈訂閱)機制,每次Sentinel發佈PING消息只須要在頻道上發佈並接收訂閱者返回的消息。

  • 故障檢測與Failover
      在這裏有兩個重要概念:主觀下線(sdown)以及客觀下線(odown)。由於Sentinel的數量>=2,而且每一個Sentinel都在監控着每一個節點,所以Sentinel與節點之間的鏈接都存在着主觀性,這個主觀性取決於Sentinel與節點之間的網絡連通性。對於單個Sentinel而言,當其經過PING發現某個節點無反應時,其認爲節點爲下線狀態,因爲這個決定是這個Sentinel主觀認爲的,所以將此決斷稱爲主觀下線(sdown)。當Sentinel中認爲某個節點主觀下線的數量超過某個值時:
    • 1.投票選舉Sentinel
    • 2.選出Slave,提高爲Master,並將更新後的配置廣播給其餘Sentinel,Master將同步下屬Slave數據

參考文獻

  [1]redisLab.[EB/OL]. https://redis.io/topics/sentinel. 2019.01-2019.03.htm

相關文章
相關標籤/搜索