天天看點

redis企業級資料備份和恢複方案

1、企業級的持久化的配置政策

在企業中,RDB的生成政策,用預設的配置基本可以滿足日常需求。也可以根據業務資料量進行一定的調整:

  • rdb:

    save 60 10000:如果希望盡可能確定RDB最多丢1分鐘的資料,那麼盡量就是每隔1分鐘都生成一個快照,對于低峰期,資料量很少,也沒必要這樣處理,根據業務的資料量來确定儲存的政策數

  • aof

    AOF一定要打開,使用everysec政策仍然可以保持性能的客觀,同樣可以調整以下兩個參數:

    auto-aof-rewrite-percentage 100: 就是目前AOF大小膨脹到超過上次100%,上次的兩倍

    auto-aof-rewrite-min-size 64mb: 根據你的資料量來定,16mb,32mb

2、資料備份方案

通過crontab定時排程腳本去備份小時、月份的rdb檔案,同時每天将伺服器所有的資料發送到雲服務檔案存儲系統上

  • 每小時備份一次資料,删除48小時前的資料
crontab -e

 * * * * sh /usr/local/redis/copy/redis_rdb_copy_hourly.sh

redis_rdb_copy_hourly.sh

#!/bin/sh 

cur_date=`date +%Y%m%d%k`
rm -rf /usr/local/redis/snapshotting/$cur_date
mkdir /usr/local/redis/snapshotting/$cur_date
cp /var/redis//dump.rdb /usr/local/redis/snapshotting/$cur_date

del_date=`date -d -hour +%Y%m%d%k`
rm -rf /usr/local/redis/snapshotting/$del_date
           
  • 每天都保留一份當日的rdb備份到一個目錄,删除一個月之前的資料
crontab -e

  * * * sh /usr/local/redis/copy/redis_rdb_copy_daily.sh

redis_rdb_copy_daily.sh

#!/bin/sh 

cur_date=`date +%Y%m%d`
rm -rf /usr/local/redis/snapshotting/$cur_date
mkdir /usr/local/redis/snapshotting/$cur_date
cp /var/redis//dump.rdb /usr/local/redis/snapshotting/$cur_date

del_date=`date -d -month +%Y%m%d`
rm -rf /usr/local/redis/snapshotting/$del_date
           
  • 每天都将所有的資料發送到雲服務來作備份

    阿裡雲、aws都提供相應的服務

3、資料恢複方案

  1. 如果是redis程序挂掉,那麼重新開機redis程序即可,直接基于AOF日志檔案恢複資料,如果配置成fsync everysec政策,那麼最多丢掉一秒鐘的資料
  2. 如果是redis程序所在機器挂掉,那麼重新開機機器後,嘗試重新開機redis程序,會嘗試直接基于AOF日志檔案進行資料恢複,對于AOF append-only,是順序寫入,如果AOF檔案破損,那麼用redis-check-aof fix即可
  3. 如果redis目前最新的AOF和RDB檔案出現了丢失/損壞,那麼可以嘗試基于該機器上目前的某個最新的RDB資料副本進行資料恢複。需要注意的是,每次redis服務的重新啟動,都會預設從aof檔案中加載資料(當然aof政策是打開的前提下),就是沒有aof的檔案,那麼也會建立一個新的aof空檔案,對應的redis中的資料也會是空,也就是并不會去加載rdb中的資料,是以我們需要提前将aof關閉,然後拷貝之前我們備份的以小時為間隔的資料,重新啟動redis之後會從這個rdb中加載相應的資料,如果我們再去打開aof開關,重新啟動之後仍然會建立一個空的aof檔案進而redis加載對應的空資料。為了解決這個問題,我們需要熱修改redis的aof開關配置 config set appendonly yes,待資料全部寫入aof檔案之後,再重新修改真正的配置檔案中的aof開關并重新啟動即可(熱修改隻是臨時的修改,配置檔案不會被影響)
  4. 如果目前機器上的所有RDB檔案全部損壞,那麼從遠端的雲服務上拉取最新的RDB快照回來恢複資料
  5. 如果是發現有重大的資料錯誤,比如某個小時上線的程式一下子将資料全部污染了,資料全錯了,那麼可以選擇某個更早的時間點,對資料進行恢複

繼續閱讀