上一章,我讲解了Redis的两种持久化方式的基本配置,那么在生产环境中,Redis的持久化到底该如何运用呢?企业级的数据备份和各种灾难下的数据恢复,又是怎么做的呢?
本章,我就通过实战演练,讲一讲企业级Redis灾备方案。
一、持久化配置策略
Redis的持久化配置,就两种——RDB和AOF,在生产环境配置下,主要就是关注它们的一些核心参数。我们来一一看下。
1.1 RDB
RDB的配置,用Redis默认提供的配置方案就够了,这里不再赘述。
1.2 AOF
生产环境,一定要把AOF持久化打开,持久化策略用默认的appendfsync everysec
就可以了。
二、数据备份策略
我们知道,RDB非常适合做冷备,每次生成之后,就不会再有修改了。所以,一种最简单实用的数据备份方案就是利用crontab:
- 写crontab定时脚本做数据备份;
- 小时级备份:每小时复制一份RBD拷贝到某个目录中,该目录中仅保留最近48小时的备份;
- 日级别备份:每天复制一份当日的RBD拷贝到某个目录中,该目录中仅保留最近1个月的备份;
- 每天晚上将上述所有的数据备份,发送一份到远程的云服务上去。
我这里给出这些crontab的脚本,供大家参考。
2.1 小时级备份
脚本位置:/usr/local/redis/copy/redis_rdb_copy_hourly.sh
备份文件位置:/usr/local/redis/snapshotting/[当前小时]/
#!/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
然后执行命令crontab -e
,输入以下内容:
0 * * * * sh /usr/local/redis/copy/redis_rdb_copy_hourly.sh
2.2 日级别备份
脚本位置:/usr/local/redis/copy/redis_rdb_copy_daily.sh
备份文件位置:/usr/local/redis/snapshotting/[当前日期]/
#!/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
然后执行命令crontab -e
,输入以下内容:
0 0 * * * sh /usr/local/redis/copy/redis_rdb_copy_daily.sh
三、数据恢复策略
数据恢复分为很多种情况,我们先来看下各种情况下的恢复策略。
- Redis进程挂掉:重启Redis进程即可,直接基于AOF日志文件恢复数据,默认情况下最多丢失1s数据;
- AOF和RDB文件出现了丢失/损坏:从云端找一个最新的小时级RDB备份文件,复制到Redis的RBD目录中去,可以恢复到某一个小时的数据。
3.1 恢复步骤
由于Redis启动时默认优先从AOF文件恢复数据,所以如果直接将云端RDB文件拷贝到Redis目录下,很可能启动后是没有数据的。正确的操作步骤应该如下:
- 停止Redis;
- 修改配置文件,关闭AOF持久化,同时删除Redis的AOF日志文件;
- 拷贝RDB备份文件到Redis目录下,然后启动Redis;
- 通过redis-cli命令行
config set appendonly yes
热修改启动AOF持久化,此时AOF日志文件中的数据就和RBD文件中的一致了; - 最后,停止Redis,修改Redis配置文件,开启AOF持久化。
四、总结
本章,我主要介绍了生产环境的Redis灾备方案,核心是Redis的数据恢复步骤,基于RBD文件恢复Redis数据时,一定要记得先关闭掉aof持久化,因为Redis默认优先从AOF日志文件恢复数据。
Java 面试宝典是大明哥全力打造的 Java 精品面试题,它是一份靠谱、强大、详细、经典的 Java 后端面试宝典。它不仅仅只是一道道面试题,而是一套完整的 Java 知识体系,一套你 Java 知识点的扫盲贴。
它的内容包括:
- 大厂真题:Java 面试宝典里面的题目都是最近几年的高频的大厂面试真题。
- 原创内容:Java 面试宝典内容全部都是大明哥原创,内容全面且通俗易懂,回答部分可以直接作为面试回答内容。
- 持续更新:一次购买,永久有效。大明哥会持续更新 3+ 年,累计更新 1000+,宝典会不断迭代更新,保证最新、最全面。
- 覆盖全面:本宝典累计更新 1000+,从 Java 入门到 Java 架构的高频面试题,实现 360° 全覆盖。
- 不止面试:内容包含面试题解析、内容详解、知识扩展,它不仅仅只是一份面试题,更是一套完整的 Java 知识体系。
- 宝典详情:https://www.yuque.com/chenssy/sike-java/xvlo920axlp7sf4k
- 宝典总览:https://www.yuque.com/chenssy/sike-java/yogsehzntzgp4ly1
- 宝典进展:https://www.yuque.com/chenssy/sike-java/en9ned7loo47z5aw
目前 Java 面试宝典累计更新 400+ 道,总字数 42w+。大明哥还在持续更新中,下图是大明哥在 2024-12 月份的更新情况:
想了解详情的小伙伴,扫描下面二维码加大明哥微信【daming091】咨询
同时,大明哥也整理一套目前市面最常见的热点面试题。微信搜[大明哥聊 Java]或扫描下方二维码关注大明哥的原创公众号[大明哥聊 Java] ,回复【面试题】 即可免费领取。