天天看點

Redis——哨兵機制(Sentinel)、哨兵原理一、哨兵機制 Sentinel二、啟用哨兵機制二、哨兵機制的原理

一、哨兵機制

Sentinel

1、哨兵的概念

  • Sentinel(哨兵)

    是Redis 的

    高可用性

    解決方案:由

    一個或多個Sentinel執行個體組成的Sentinel 系統

    可以監視任意多個

    主伺服器

    ,以及這些

    主伺服器屬下的所有從伺服器

    ,并在被監視的主伺服器進入下線狀态時,自動将下線主伺服器屬下的某個從伺服器更新為新的主伺服器。簡單的說哨兵就是帶有自動故障轉移功能的主從架構。
  • 簡單來說, 當一個

    master

    節點的redis服務挂掉了,

    sentinel

    機制會發現, 并從剩餘的

    slave

    節點的redis服務中, 選舉出一個slave, 來充當新的

    master

    節點。
Redis——哨兵機制(Sentinel)、哨兵原理一、哨兵機制 Sentinel二、啟用哨兵機制二、哨兵機制的原理
  • 哨兵(sentinel)

    是一個分布式系統,用于對

    主從結構

    中的

    每台伺服器進行監控

    ,當出現故障時通過

    投票機制

    選擇新的master并将所有slave連接配接到新的master。
Redis——哨兵機制(Sentinel)、哨兵原理一、哨兵機制 Sentinel二、啟用哨兵機制二、哨兵機制的原理

2、哨兵的作用

  • 監控

    • 不斷的

      檢查master

      slave

      是否

      正常

      運作。
    • master存活檢測、master與slave運作情況檢測
  • 通知(提醒)

    • 當被

      監控的伺服器

      出現問題時,向

      其他(哨兵間,用戶端)發送通知

  • 自動故障轉移

    • 斷開master與slave連接配接,選取一個slave作為master,将其他slave連接配接到新的master,并告知用戶端新的伺服器位址

注意:

  • 哨兵也是一台

    redis伺服器

    ,隻是不提供資料服務
  • 通常哨兵配置數量為

    單數

    (選舉master防止同票)

二、啟用哨兵機制

Redis——哨兵機制(Sentinel)、哨兵原理一、哨兵機制 Sentinel二、啟用哨兵機制二、哨兵機制的原理

在同一個伺服器中如何模拟三個哨兵服務呢?

  • 将Redis安裝包中的配置檔案

    sentinel.conf

    拷貝出來, 然後在

    sentinel.conf

    中修改端口, 以及設定master的端口位址, 然後通過

    redis-sentinel sentinel-端口号.conf

    即可
  • 啟動哨兵,

    redis-cli -p 26379

Redis——哨兵機制(Sentinel)、哨兵原理一、哨兵機制 Sentinel二、啟用哨兵機制二、哨兵機制的原理
Redis——哨兵機制(Sentinel)、哨兵原理一、哨兵機制 Sentinel二、啟用哨兵機制二、哨兵機制的原理

當啟動哨兵服務後, 每一個哨兵都會互相注冊, 此時

sentinel.conf

配置檔案以及修改了;

Redis——哨兵機制(Sentinel)、哨兵原理一、哨兵機制 Sentinel二、啟用哨兵機制二、哨兵機制的原理
Redis——哨兵機制(Sentinel)、哨兵原理一、哨兵機制 Sentinel二、啟用哨兵機制二、哨兵機制的原理
Redis——哨兵機制(Sentinel)、哨兵原理一、哨兵機制 Sentinel二、啟用哨兵機制二、哨兵機制的原理

二、哨兵機制的原理

主從切換
  • 哨兵在進行

    主從切換

    過程中經曆三個階段
    • 監控

    • 通知

    • 故障轉移

1、監控階段

就是上面我們啟動各個

哨兵服務

的時候, 不同的

哨兵服務

的資訊會互相

監控

, 包括

master

節點的資訊以及master節點的

slave

節點資訊; 能拿到

master

節點資訊是因為在哨兵的配置檔案

sentinel.conf

中配置了

master節點的ip,端口位址

;

  • 一個哨兵服務, 可以

    監控

    其他的哨兵, 還可以監控

    master

    節點的資訊, 以及該

    master

    節點下的

    slave

    節點的資訊。
    Redis——哨兵機制(Sentinel)、哨兵原理一、哨兵機制 Sentinel二、啟用哨兵機制二、哨兵機制的原理
  • 多個哨兵服務之間可以互相通信, 它們是一個

    小圈子

    , 它們直接通過

    釋出訂閱

    的方式來互相

    通知

    Redis——哨兵機制(Sentinel)、哨兵原理一、哨兵機制 Sentinel二、啟用哨兵機制二、哨兵機制的原理

2、通知階段

Redis——哨兵機制(Sentinel)、哨兵原理一、哨兵機制 Sentinel二、啟用哨兵機制二、哨兵機制的原理

3、故障轉移階段

  • 首先

    sentinel1

    master

    發送hello指令, 此時master沒有任何反應, 也拿不到它的資訊, 标記master為

    SRI_S_DOWN(主觀下線)

    ; 此時該

    sentinel1

    會在它的小圈子(sentinel系統)中說, master挂掉了; 此時sentinel2、sentinel3也都向master發送hello指令, 也得不到回應(或者超過半數), 此時該master确定挂掉了, 标記為

    SRI_O_DOWN(客觀下線)

    ;
Redis——哨兵機制(Sentinel)、哨兵原理一、哨兵機制 Sentinel二、啟用哨兵機制二、哨兵機制的原理

下一步就是清理該master了, 也就是将當機的master下線

, 首先要在多個

sentinel

中選舉

一個

來清理; 在多個sentinel中通過

投票

來選舉出來一個領頭的

sentinel

;

Redis——哨兵機制(Sentinel)、哨兵原理一、哨兵機制 Sentinel二、啟用哨兵機制二、哨兵機制的原理

然後領頭的sentinel會從多個slave中挑選一個來充當master

Redis——哨兵機制(Sentinel)、哨兵原理一、哨兵機制 Sentinel二、啟用哨兵機制二、哨兵機制的原理
具體選舉的要求
  • 由推選出來的哨兵對目前的slave進行篩選,篩選條件有:
    • 伺服器清單中挑選備選master
    • 線上的
    • 響應慢的
    • 與原master斷開時間久的
    • 優先原則
      • 優先級
      • offset
      • runid
    • 發送指令( sentinel )
      • 向新的master發送slaveof no one(斷開與原master的連接配接)
      • 向其他slave發送slaveof 新masterIP端口(讓其他slave與新的master相連)
Redis——哨兵機制(Sentinel)、哨兵原理一、哨兵機制 Sentinel二、啟用哨兵機制二、哨兵機制的原理

4、詳細解讀sentinel服務列印的資訊

Redis——哨兵機制(Sentinel)、哨兵原理一、哨兵機制 Sentinel二、啟用哨兵機制二、哨兵機制的原理

繼續閱讀