Redis宕機的問題
在主從模式下宕機要分為區分來看:
-
slave從redis宕機
在Redis中從庫重新啟動後會自動加入到主從架構中,自動完成同步資料;
如果從資料庫實現了持久化,只要重新假如到主從架構中會實現增量同步。
-
Master 宕機
假如主從都沒資料持久化,此時千萬不要立馬重啟服務,否則可能會造成資料丟失,正確的操作如下:
- 在slave資料上執行SLAVEOF ON ONE,來斷開主從關係並把slave升級為主庫
- 此時重新啟動主資料庫,執行SLAVEOF,把它設定為從庫,自動備份資料。
以上過程很容易配置錯誤,可以使用簡單的方法:redis的哨兵(sentinel)的功能。
哨兵(sentinel)的原理:
Redis提供了sentinel(哨兵)機制通過sentinel模式啟動redis後,自動監控master/slave的執行狀態,基本原理是:心跳機制+投票裁決。
每個sentinel會向其它sentinal、master、slave定時傳送訊息,以確認對方是否“活”著,如果發現對方在指定時間(可配置)內未迴應,則暫時認為對方已掛(所謂的“主觀認為宕機” Subjective Down,簡稱SDOWN)。
若"哨兵群"中的多數sentinel,都報告某一master沒響應,系統才認為該master"徹底死亡"(即:客觀上的真正down機,Objective Down,簡稱ODOWN),通過一定的vote演算法,從剩下的slave節點中,選一臺提升為master,然後自動修改相關配置。
補充:
哨兵的配置:
- 複製redis中sentinel.conf,根據情況進行配置