在主從模式下宕機要分為區分來看:
-
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,根據情況進行配置
