Redis企业级数据备份方案以及数据恢复融灾
Posted 阅历笔记
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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、备份方案
- 写crontab定时调度脚本去数据备份
- 每消失都copy一个rdb的备份到一个目录中去,紧紧保留最近48小时的备份。
- 每天保存一份当天的rdb备份文件到一个目录中去,紧紧保留最近一个月的备份。
- 每次copy备份时将太旧的备份都删了。
- 每天晚上将当前服务器备份的数据发送一份到远程云服务器上。
脚本示例
新建存放备份目录
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企业级数据备份方案以及数据恢复融灾的主要内容,如果未能解决你的问题,请参考以下文章
13.在项目中部署redis企业级数据备份方案以及各种踩坑的数据恢复容灾演练