Redis:企業級數據備份方案

1. 持久化配置策略

(1)首先是RDB的生成策略,這點用Redis默認的配置即可,比如:save 60 10000。但是如果我們希望儘可能確保說,RDB最多丟1分鐘的數據,那麼儘量就是每隔1分鐘都生成一個快照,比如設置成:save 60 1000。個人覺得默認的配置即可,當然我們也可以根據自己的應用和業務的數據量去決定如何調整這個參數。

(2)AOF持久化一定要開啓,fsync的策略爲everysec也沒有多大問題。可能我們僅僅需要做些調整的是下面兩個參數:

auto-aof-rewrite-percentage 100
auto-aof-rewrite-min-size 64mb

2. 數據備份方案

RDB非常適合做冷備,每次生成之後,就不會再有修改了。企業中的數據備份方案通常是:

(1)寫crontab定時調度腳本去做數據備份。

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)每天晚上將當前服務器上所有的數據備份,發送一份到遠程的雲服務上去。

3. 數據恢復方案

以下分爲5種場景(恢復時,需要注意的是:當同時開啓RDB和AOF時,會使用AOF恢復數據):

(1)如果是redis進程掛掉,那麼重啓redis進程即可,直接基於AOF日誌文件恢復數據。

(2)如果是redis進程所在機器掛掉,那麼重啓機器後,嘗試重啓redis進程,嘗試直接基於AOF日誌文件進行數據恢復。

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

AOF append-only,順序寫入,如果AOF文件破損,那麼用redis-check-aof fix進行修復。

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

(4)如果當前機器上的所有RDB文件全部損壞,那麼從遠程的雲服務上拉取最新的RDB快照回來恢復數據。

(5)如果是發現有重大的數據錯誤,比如某個小時上線的程序一下子將數據全部污染了,數據全錯了,那麼可以選擇某個更早的時間點,對數據進行恢復。

比如在某個時間點發現代碼有bug,導致代碼生成的所有的緩存數據,寫入redis全部錯了。那麼可以找到一份該時間點前的最近一分rdb的冷備,然後按照上面的步驟,去恢復數據。

——End——
更多精彩分享,可掃碼關注微信公衆號哦。

在這裏插入圖片描述

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章