1. 程式人生 > >05-專案中部署redis企業級資料備份方案

05-專案中部署redis企業級資料備份方案

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

在企業中,RDB的生成策略,用預設的也差不多

save 60 10000:如果你希望儘可能確保說,RDB最多丟1分鐘的資料,那麼儘量就是每隔1分鐘都生成一個快照,低峰期,資料量很少,也沒必要

10000->生成RDB,1000->RDB,這個根據你自己的應用和業務的資料量,你自己去決定

AOF一定要開啟,fsync,everysec

auto-aof-rewrite-percentage 100: 就是當前AOF大小膨脹到超過上次100%,上次的兩倍
auto-aof-rewrite-min-size 64mb: 根據你的資料量來定,16mb,32mb

2、企業級的資料備份方案

RDB非常適合做冷備,每次生成之後,就不會再有修改了

資料備份方案

(1)寫crontab定時排程指令碼去做資料備份

(2)每小時都copy一份rdb的備份,到一個目錄中去,僅僅保留最近48小時的備份

(3)每天都保留一份當日的rdb的備份,到一個目錄中去,僅僅保留最近1個月的備份

(4)每次copy備份的時候,都把太舊的備份給刪了

(5)每天晚上將當前伺服器上所有的資料備份,傳送一份到遠端的雲服務上去

/usr/local/redis

每小時copy一次備份,刪除48小時前的資料

crontab -e

0 * * * * 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/6379/dump.rdb /usr/local/redis/snapshotting/$cur_date del_date=`date -d -48hour +%Y%m%d%k` rm -rf /usr/local/redis/snapshotting/$del_date

每天copy一次備份

crontab -e

0 0 * * * 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/6379/dump.rdb /usr/local/redis/snapshotting/$cur_date del_date=`date -d -1month +%Y%m%d` rm -rf /usr/local/redis/snapshotting/$del_date

每天一次將所有資料上傳一次到遠端的雲伺服器上去

3、資料恢復方案

(1)如果是redis程序掛掉,那麼重啟redis程序即可,直接基於AOF日誌檔案恢復資料

(2)如果是redis程序所在機器掛掉,那麼重啟機器後,嘗試重啟redis程序,嘗試直接基於AOF日誌檔案進行資料恢復

AOF沒有破損,也是可以直接基於AOF恢復的

AOF append-only,順序寫入,如果AOF檔案破損,那麼用redis-check-aof fix

(3)如果redis當前最新的AOF和RDB檔案出現了丟失/損壞,那麼可以嘗試基於該機器上當前的某個最新的RDB資料副本進行資料恢復