1. 程式人生 > >redis宕機如何解決?如果是專案上線的宕機呢?

redis宕機如何解決?如果是專案上線的宕機呢?

宕機:伺服器停止服務
如果只有一臺redis,肯定會造成資料丟失,無法挽救
多臺redis或者是redis叢集 ,宕機則需要分為在主從模式下區分來看:

  1. slave從redis宕機
    配置主從複製的時候才配置從的redis,從的會從主的redis中讀取主的redis的操作日誌,求達到主從複製。
    1)在Redis中從庫重新啟動後會自動加入到主從架構中,自動完成同步資料;
    2)如果從資料庫實現了持久化,可以直接連線到主的上面,只要實現增量備份(宕機到重新連線過程中,主的資料庫發生資料操作,複製到從資料庫),重新連線到主從架構中會實現增量同步。
  2. Master 宕機
    假如主從都沒資料持久化,此時千萬不要立馬重啟服務,否則可能會造成資料丟失,正確的操作如下:
    1. 在slave資料上執行SLAVEOF ON ONE,來斷開主從關係並把slave升級為主庫
    2. 此時重新啟動主資料庫,執行SLAVEOF,把它設定為從庫,連線到主的redis上面做主從複製,自動備份資料。
      以上過程很容易配置錯誤,可以使用redis提供的哨兵機制來簡化上面的操作。簡單的方法:redis的哨兵(sentinel)的功能。

哨兵(sentinel)的原理
在這裡插入圖片描述
Redis提供了sentinel(哨兵)機制通過sentinel模式啟動redis後,自動監控master/slave的執行狀態,基本原理是:心跳機制+投票裁決。

每個sentinel會向其它sentinal、master、slave定時傳送訊息(哨兵定期給主或者從和slave傳送ping包(IP:port),正常則響應pong,ping和pong就叫心跳機制),以確認對方是否“活”著,如果發現對方在指定時間(可配置)內未迴應,則暫時認為對方已掛(所謂的“主觀認為宕機” Subjective Down,簡稱SDOWN)。

若"哨兵群"中的多數sentinel,都報告某一master沒響應,系統才認為該master"徹底死亡"(即:客觀上的真正down機,Objective Down,簡稱ODOWN),通過一定的vote演算法,從剩下的slave節點中,選一臺提升為master,然後自動修改相關配置。

補充:
哨兵的配置:

  1. 複製redis中sentinel.conf,根據情況進行配置
    在這裡插入圖片描述

可以使用哨兵搭建高可用伺服器,哨兵模式還提供其他功能,比如監控、通知、為客戶端提供配置等。
關於使用哨兵搭建高可用伺服器,可以參考https://blog.csdn.net/shouhuzhezhishen/article/details/69221517

來實現,在此不再細說。