Redis企业级数据备份方案以及数据恢复融灾

1、企业级持久化配置策略

Redis的持久化方式有两种, RDB、AOF 一般企业级持久化配置都不会单一的使用而是两者结合使用。

1、RDB持久化策略配置

RDB的持久化策略默认开启的其可以充当一个冷备份方案,一般没有特殊的要求我们使用的默认的配置就已经足够使用了。

#900秒有1个key发生变化进行一次持久化操作
save 900 1
#300秒有10个key发生变化进行一次持久化操作
save 300 10
#60秒有10000个key发生变化进行一次持久化操作
save 60 10000

注:可以根据自己的业务量来具体的修改配置

####2、AOF持久化策略配置
AOF需要我们手动打开默认时关闭的

 cd /ect/redis/6379.conf
 appendonly no --> yes

策略配置

#只要发生写操作就进行持久化、这个对性能的影响非常大,一般不建议使用该配置,除非业务强制需求
#appendfsync always

#默认配置,每秒将os cache 中的数据 fsync到磁盘
appendfsync everysec

#紧紧将日志写到os cache就不管了,合适存储到磁盘由操作系统自己决定
#appendfsync no

auto-aof-rewrite-percentage 100: 就是当前AOF大小膨胀到超过上次100%,上次的两倍

auto-aof-rewrite-min-size 64mb: 根据你的数据量来定,16mb,32mb

2、备份方案

  1. 写crontab定时调度脚本去数据备份
  2. 每消失都copy一个rdb的备份到一个目录中去,紧紧保留最近48小时的备份。
  3. 每天保存一份当天的rdb备份文件到一个目录中去,紧紧保留最近一个月的备份。
  4. 每次copy备份时将太旧的备份都删了。
  5. 每天晚上将当前服务器备份的数据发送一份到远程云服务器上。

脚本示例

新建存放备份目录

mkdir /usr/local/redis

每小时copy一次备份,删除48小时之前的数据

crontabl -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一次备份,并删除一个月以前的数据

crontabl -e
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进程积极OK了,直接基于AOF文件进行恢复数据(AOF 配置 fsync everysec 最多丢一秒的数据)

2、如果是Redis所在进程的服务器挂了,重启服务器后尝试重启Redis进程,尝试直接基于AOF日志文件进行数据恢复。

AOF 文件没有损坏直接恢复就可以了,同样最多丢失一秒的数据,
如果AOF文件损坏,使用redis-check-aof-fix进行修复后恢复。

3、如果redis当前最新的AOF和RDB文件出现了丢失/损坏(一般认为导致的),那么可以尝试基于该机器上当前的某个最新的RDB数据副本进行数据恢复。

注意: 基于副本恢复顺序, shutdown ---> copy dump.rdb文件到/var/redis/6379/ (持久化文件存放位置,具体根据conf文件中配置)下面 ---> 修改配置文件暂时关闭AOF配置 ---> 重启redis实例 ---> 临时打开AOF的配置(config set appendonly yes)---> 修改配置文件到开AOF的配置 ---> 重启redis实例--->搞定

4、如果当前机器上的所有RDB文件全部损坏,那么从远程的云服务上拉取最新的RDB快照回来恢复数据

5、如果是发现有重大的数据错误,比如某个小时上线的程序一下子将数据全部污染了,数据全错了,那么可以选择某个更早的时间点,对数据进行恢复

举个例子,12点上线了代码,发现代码有bug,导致代码生成的所有的缓存数据,写入redis,全部错了

找到一份11点的rdb的冷备,然后按照上面的步骤,去恢复到11点的数据,不就可以了吗

你可能感兴趣的:(redis)