redis提供了rdb和aof兩種持久化機制,
rdb默認開啟,aof默認關閉,
當兩種持久化機制都開啟時,redis重啟恢復資料時加載aof持久化的appendonly.aof``檔案,而rdb持久化的**dump.rdb**檔案不會被加載到記憶體中,
開啟rdb,關閉aof
通過redis-cli SHUTDOWN這種方式停掉redis,這是一種安全的退出方式,redis會在退出的時候將記憶體中的資料立即生成一份完整的rdb快照,
通過kill -9殺死redis行程,這種方式會導致 redis例外退出,從而導致記憶體中的資料沒有到達save指定的檢查點,進而丟失記憶體中的資料,
開啟rdb,關閉aof,待 dump.rdb有資料后,再開啟aof
redis持久化 dump.rdb后,啟用aof持久化,再重啟 redis, redis只會加載aof持久化的 appendonly.aof檔案,如果它不存在,那會創建一個新的空的檔案,從而導致記憶體中丟失 dump.rdb的資料,
解決方式:停止 redis,關閉aof,重啟 redis,確保 dump.rdb資料恢復在記憶體中,使用命令列熱修改 redis配置的方式打開aof,此時 redis就會以aof持久化的形式將記憶體中的資料寫入 appendonly.aof檔案,然后停止 redis,修改組態檔將aof手動打開,
情景:主從架構的 master關閉rdb和 aof持久化,slave作為 master的資料熱備
在采用 master-slave的水平擴展架構的時候,格外的需要注意: master必須要開啟持久化,不建議用slave節點作為 master節點的資料熱備,
我們知道主從復制的架構中,所有的寫操作交由 master負責,slave分擔讀的操作,slave中的資料是從 master同步過來的,假如 master的rdb和aof都關閉了,資料全部在記憶體中,那么 master宕機重啟時,發現本地沒有可以恢復的資料,導致 master記憶體資料為空,然后 master將空的資料集同步到slave節點,導致slave的資料全部清空,因此 master必須要開啟持久化!
即使我們采用高可用機制的哨兵模式,即 master宕機時,slave節點通過選舉轉變為 master節點,在這種情況下,可能哨兵模式還沒檢測到 master節點宕機, master節點就自動重啟了,因此還是可能導致所有slave節點資料清空,
原文鏈接:
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/154824.html
標籤:Python
