14_redis哨兵機制

LilyFlower發表於2024-03-17

redis哨兵(sential)

哨兵人巡查監控後後臺master主機是否故障,如果故障了根據投票數自動將某一個從機轉換為主機,繼續對外提供服務。

哨兵的作用

  1. 監控redis主機的執行狀態,包括主機master和slave。
  2. 當主機當機後,能自動將從機切slave換成新的主機master

注意哨兵不使用叢集,僅僅是和主從複製相互配合。

配置redis哨兵

我們知道,網路是不可靠的,有時候一個sentinel會因為網路堵塞而誤認為一個redis主機掛掉了,在sentinel叢集環境下需要多個sentinel互相溝通來確認某個redis主機真的掛掉。投票數這個引數是進行客觀下線的依據,意思是至少有quorum個sentinel認為redis主機是有故障的,才會對這個redis主機進行下線以及故障轉移,因為有的時候某個sentinel節點可能是因為網路問題無法連線到redis主機,但此時redis主機並沒有出現故障。所以,此時就需要多個sentinel都認為該redis主機出現故障,才進行下一步的操作。這保證了公平性和高可用性。

  1. 在myredis目錄下新建或複製sentinel.conf檔案(名字不能錯,預設在redis安裝目錄下)
  2. 新增如下配置:

設定要監控的master伺服器,其中quorum是法定投票數:表示最少有幾個哨兵認可客觀下線,同意故障遷移的法定投票數。

sentinel monitor

redis主機設定了密碼,連線redis主機的密碼

sentinel auth-pass

  1. 啟動sentinel命令:

    redis-sentinel sentinel26379.conf --sentinel

    redis-sentinel sentinel26380.conf --sentinel

    redis-sentinel sentinel26381.conf --sentinel

相關問題

  1. 當redi主機掛了,從機仍然是好的。
  2. sentinel透過投票確認主機確實掛掉後,從剩下的從機中選擇一個充當redis主機。
  3. 如果之前掛掉的redis主機重啟回來後,會成為redis從機,因為新的redis主機已經選舉出來了
  4. 注意:在master-slave切換後,master_redis.conf、slave_redis.conf、sentinel.conf的內容會發生變化,即master_redis.conf中會多一行slaveof配置,sentinel.conf的監控目標會發生變化。

哨兵執行流程

  1. 三個哨兵一主二從,正常執行中...
  2. SDown主觀下線(Subjectively Down)
    1. 主觀不可用指的是單個哨兵檢測到master狀態在傳送ping心跳包後在一定時間內沒有收到合法的回覆,就達到了主觀下線的條件。
    2. sentinel配置檔案中的down-after-milliseconds設定了判斷主觀下線的時間長度(預設30s)。
  3. ODown客觀下線(ObjectTively Down)
    1. 客觀下線是需要多個哨兵一致認為該redis master確實當機了。
  4. 選舉出哨兵群中的領導者哨兵(用來指定誰是新的redis master)
    1. 當redis master被判定客觀下線後,各個哨兵會進行協商,先選舉出一個領導者哨兵並由該哨兵節點進行故障遷移。
    2. 領導者哨兵是如何選舉出來的?----> Raft演算法:先到先得,在一輪選舉中,哨兵A向哨兵B傳送想成為領導者的申請,如果B沒有同意其它哨兵,則會同意A成為領導者。
  5. 由領導者哨兵開始推動故障切換流程並選舉出一個新的redis master:
    1. 某個Slave被選舉成為新的redis master。
    2. 選擇新的master規則:
      1. 在redis配置檔案中,許可權優先順序最高(數字越小)最優先
      2. 複製偏移量最大的節點其次優先(相對於當機掉的master,資料的完整性最高)
      3. 最小Run ID的從節點優先(根據ASCII碼)
    3. 讓選舉出來的節點執行slaveof no one命令成為新的master節點,並透過slaveof命令讓其他slave節點成為新的master節點的slave
    4. 當原來當機的master節點重啟後會成為新的master節點的slave並恢復工作。
  6. 上述的工作均由sentinel自己獨立完成,完全不需要人工的干預。

哨兵選舉原理

當一個主從配置中的master失效後,sentinel可以選舉出一個新的master用於自動接替master工作,主從配置中的其它redis伺服器自動指向新的master伺服器並同步資料。一般建議sentinel是奇數臺,防指某一sentinel無法連線到master導致切換失敗。

哨兵使用建議

  • 哨兵的數量應該為多個,哨兵本身就應該叢集,保證高可用性。
  • 哨兵節點數量應該是奇數。
  • 哨兵節點配置最好都是一致的(硬體配置)
  • 哨兵叢集+主從複製並不能保證資料零丟失 --> 引出redis叢集

相關文章