1. 持久化配置策略
(1)首先是RDB的生成策略芭毙,這點用Redis默認的配置即可,比如:save 60 10000
讨永。但是如果我們希望盡可能確保說耽梅,RDB最多丟1分鐘的數(shù)據(jù),那么盡量就是每隔1分鐘都生成一個快照捍壤,比如設置成:save 60 1000
。個人覺得默認的配置即可,當然我們也可以根據(jù)自己的應用和業(yè)務的數(shù)據(jù)量去決定如何調整這個參數(shù)闰挡。
(2)AOF持久化一定要開啟,fsync的策略為everysec也沒有多大問題礁哄〕ば铮可能我們僅僅需要做些調整的是下面兩個參數(shù):
auto-aof-rewrite-percentage 100
auto-aof-rewrite-min-size 64mb
2. 數(shù)據(jù)備份方案
RDB非常適合做冷備,每次生成之后桐绒,就不會再有修改了夺脾。企業(yè)中的數(shù)據(jù)備份方案通常是:
(1)寫crontab定時調度腳本去做數(shù)據(jù)備份之拨。
crontab -e
0 * * * * sh /usr/local/redis/copy/redis_rdb_copy_hourly.sh
0 0 * * * sh /usr/local/redis/copy/redis_rdb_copy_daily.sh
(2)每小時都copy一份rdb的備份,到一個目錄中去咧叭,僅僅保留最近48小時的備份蚀乔。
#### 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
(3)每天都保留一份當日的rdb的備份,到一個目錄中去菲茬,僅僅保留最近1個月的備份吉挣。
#### 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
(4)每天晚上將當前服務器上所有的數(shù)據(jù)備份,發(fā)送一份到遠程的云服務上去婉弹。
3. 數(shù)據(jù)恢復方案
以下分為5種場景(恢復時睬魂,需要注意的是:當同時開啟RDB和AOF時,會使用AOF恢復數(shù)據(jù)):
(1)如果是redis進程掛掉镀赌,那么重啟redis進程即可氯哮,直接基于AOF日志文件恢復數(shù)據(jù)。
(2)如果是redis進程所在機器掛掉佩脊,那么重啟機器后蛙粘,嘗試重啟redis進程,嘗試直接基于AOF日志文件進行數(shù)據(jù)恢復威彰。
AOF沒有破損出牧,也是可以直接基于AOF恢復的。
AOF append-only歇盼,順序寫入舔痕,如果AOF文件破損,那么用redis-check-aof fix
進行修復豹缀。
(3)如果redis當前最新的AOF和RDB文件出現(xiàn)了丟失/損壞伯复,那么可以嘗試基于該機器上當前的某個最新的RDB數(shù)據(jù)副本進行數(shù)據(jù)恢復。
(4)如果當前機器上的所有RDB文件全部損壞邢笙,那么從遠程的云服務上拉取最新的RDB快照回來恢復數(shù)據(jù)啸如。
(5)如果是發(fā)現(xiàn)有重大的數(shù)據(jù)錯誤,比如某個小時上線的程序一下子將數(shù)據(jù)全部污染了氮惯,數(shù)據(jù)全錯了叮雳,那么可以選擇某個更早的時間點,對數(shù)據(jù)進行恢復妇汗。
比如在某個時間點發(fā)現(xiàn)代碼有bug帘不,導致代碼生成的所有的緩存數(shù)據(jù),寫入redis全部錯了杨箭。那么可以找到一份該時間點前的最近一分rdb的冷備寞焙,然后按照上面的步驟,去恢復數(shù)據(jù)。