天天看點

Redis哨兵(Sentinel)模式例子哨兵模式之下如監聽主機哨兵模式之下如選取主機關于領頭Sentinel的說明

Redis哨兵(Sentinel)模式

  • 例子
  • 哨兵模式之下如監聽主機
  • 哨兵模式之下如選取主機
  • 關于領頭Sentinel的說明
在redis叢集中,當主機當機了,我們除了手動修複之外,也可以通過配置哨兵(Sentinel),讓其自動選舉出主機節點,保證叢集的可靠性。

例子

Redis哨兵(Sentinel)模式例子哨兵模式之下如監聽主機哨兵模式之下如選取主機關于領頭Sentinel的說明

哨兵可以 以獨立程序的方式,監控着主機和從機的運作情況。如下在redis的配置目錄中增加sentinel.conf檔案,在檔案内輸入如下内容:

# sentinel monitor 監視的主機名 ip位址 端口号 
sentinel monitor redis6379 127.0.0.1 6379 1
           
  • redis6379,可以自己命名
  • 數字1,代表當主機奔潰了,在重新選舉出主機的過程中,至少需要1台sentinel進行投票。

接着,在bin目錄下,輸入如下指令,啟動哨兵:

./redis-sentinel /data/fsn/redis6/conf/sentinel.conf
           

可以看到如下圖,哨兵開始監控主機及從機的運作情況:

Redis哨兵(Sentinel)模式例子哨兵模式之下如監聽主機哨兵模式之下如選取主機關于領頭Sentinel的說明

哨兵模式之下如監聽主機

以啟動一個哨兵為例,哨兵啟動之後,初始化時,會向主機建立兩個異步的網絡連接配接:

  • 指令連接配接,用于向主伺服器發送指令,并接收指令回複。
  • 訂閱連接配接,用于訂閱主伺服器的sentinel:hello頻道。
通過訂閱連結,sentinel可以比較及時知道主機及其從機的狀況,包括增加新的sentinel監視改主機時,新的sentinel資訊可以被現有的sentinel所知道。

預設情況下,Sentinel會以每秒一次的頻率向所有與它建立了指令連接配接的執行個體(包括主伺服器、從伺服器、其他Sentinel在内)發送PING指令,并通過執行個體傳回的PING指令來判斷執行個體是否下線。

# 該配置表明主機如果在5000ms内沒有進行回複,該Sentinel會認為該主機下線
sentinel down-after-milliseconds redis6379 5000
           

注意,當有多個哨兵時,隻有超過半數的哨兵認為該主機下線了,才是真的下線。

哨兵模式之下如選取主機

  • 哨兵首先會删除清單中所有處于下線或者斷線狀态的從伺服器,保證剩餘的從伺服器都是正常線上的。
  • 删除清單中所有最近五秒内沒有回複過領頭Sentinel的INFO指令的從伺服器,保證清單中剩餘的從伺服器都是最近成功進行過通信的。
  • 删除所有與已下線主伺服器連接配接斷開超過down-after-milliseconds*10

    毫秒的從伺服器,保證清單中剩餘的從伺服器都沒有過早地與主伺服器斷開連接配接。

down-after-milliseconds: 該選項指定了判斷主伺服器下線所需的事件
  • 領頭Sentinel根據從伺服器的優先級,對清單中剩餘的從伺服器進行排序,并選出其中優先級最高的從伺服器。如果有多個具有相同最高優先級的從伺服器,那麼領頭Sentinel将按照從伺服器的複制偏移量,對具有相同最高優先級的所有從伺服器進行排序,并選出其中偏移量最大的從伺服器。
關于複制偏移量,可以參靠之前的Redis主從複制一文,偏移量最大的從伺服器代表着儲存着最新資料的從伺服器。

Redis主從複制

  • 如果有多個優先級最高、複制偏移量最大的從伺服器,那麼領頭Sentinel将按照運作ID對這些從伺服器進行排序,并選出其中運作ID最小的從伺服器。

關于領頭Sentinel的說明

當有多個sentinel的時候,對于主機下線後的故障轉移工作(包括重新選取主機)是由領頭Sentinel完成的。而領頭Sentinel同樣是通過投票機制進行選取的,隻得到超過半數的sentinel認可才能成為領頭Sentinel。

繼續閱讀