一、项目概述
1.1 业务场景说明
Redis 数据默认存放在内存,服务器断电、进程关闭后数据全部丢失。Redis 提供 RDB 与 AOF 两种持久化方案,把内存数据保存至磁盘;RDB 做定时全量备份,AOF 记录每条写指令,两者配合保障数据安全,适配单机、主从、哨兵集群环境。
1.2 环境参数
|----------|-------------------------------|
| 项目 | 参数 |
| 操作系统 | CentOS Linux release 7.9‑2009 |
| Redis 版本 | redis‑5.0.10 |
| RDB 文件 | dump.rdb |
| AOF 文件 | appendonly.aof |
| 数据目录 | /usr/local/redis/data |
二、RDB 持久化(快照模式,全量备份)
2.1 工作原理
按照设定规则,将内存全部数据生成快照,保存为 rdb 二进制文件;文件紧凑,适合长期备份;故障恢复速度快。
触发方式分为自动触发 和手动触发。
2.2 配置参数(redis.conf)
|--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| ini # RDB文件名称 dbfilename dump.rdb # 数据存放目录 dir /usr/local/redis/data # 持久化规则:格式 save 秒数 更改次数 # 300秒之内,数据改动10次,自动生成快照 save 300 10 # 60秒改动100次触发快照 save 60 100 # 持久化失败时,停止Redis写入(防止数据丢失) stop-writes-on-bgsave-error yes # rdb文件开启压缩,节省磁盘空间 rdbcompression yes # 校验rdb文件完整性 rdbchecksum yes |
2.3 手动 RDB 持久化命令
|-----------------------------------------------------------------------|
| redis # 后台子进程备份,生产环境推荐,不阻塞主线程 BGSAVE # 前台执行备份,阻塞Redis进程,业务环境禁止使用 SAVE |
2.4 RDB 优缺点
- 优点:文件体积小,恢复速度快,适合定时异地备份;
- 缺点:两次快照之间新增数据没有保存,宕机会丢失这段时间数据,无法做到秒级数据保护。
三、AOF 持久化(日志模式,增量备份)
3.1 工作原理
记录 Redis 每一条写命令(set、hset、incr 等),追加写入 appendonly.aof 文件;重启 Redis 时,重新执行 aof 日志命令,恢复数据。
3.2 AOF 核心配置
|------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| ini # 开启AOF持久化,默认关闭 appendonly yes # aof日志文件名 appendfilename "appendonly.aof" # 三种刷盘策略(最重要参数) # always:每一条写命令立刻同步磁盘,数据零丢失,磁盘IO压力最大 # everysec:每秒刷写一次,默认配置,最多丢失1秒数据,性能平衡 # no:交给操作系统自动刷盘,丢失数据不可控 appendfsync everysec # AOF文件过大时自动重写,合并日志指令,减少文件体积 auto-aof-rewrite-percentage 100 auto-aof-rewrite-min-size 64mb |
3.3 AOF 日志重写机制
长期运行后 aof 文件越来越大,大量过期指令占用空间;Redis 开启重写,读取当前内存数据,生成一套全新指令集合,覆盖旧日志,精简文件大小,不会丢失有效数据。
手动触发重写命令:
|--------------------|
| redis BGREWRITEAOF |
3.4 AOF 优缺点
- 优点:默认每秒同步,最多丢失 1 秒数据,数据安全性极高;
- 缺点:日志文件体积比 RDB 更大,故障恢复速度慢于 RDB。
四、混合持久化(Redis4.0 + 推荐方案)
4.1 原理
先保存一份 RDB 全量快照,之后增量数据使用 AOF 记录;重启时先加载 RDB 快照,再追加 AOF 增量日志,兼顾恢复速度与数据安全。
4.2 开启混合持久化
|------------------------------|
| ini aof-use-rdb-preamble yes |
五、故障恢复实操流程
5.1 只用 RDB 恢复数据
- 停止 Redis 服务;
- 将完好的 dump.rdb 放入 dir 数据目录;
- 启动 Redis,自动加载 rdb 文件恢复数据。
5.2 只用 AOF 恢复数据
关闭 RDB,开启 AOF,启动服务自动读取 appendonly.aof 恢复数据。
5.3 混合持久化恢复
优先加载 RDB 快照,再执行 AOF 增量日志,生产环境标准方案。
六、主从架构下持久化部署规范
- 主节点开启持久化,防止主库宕机数据全部丢失;
- 从节点禁止开启 RDB 自动备份,避免从库快照文件混乱;
- 定时将主库 RDB 文件拷贝至备份服务器,做异地备份。
七、动态修改持久化参数(不用重启服务)
|------------------------------------------------------------------------------------------------------------------------------------------------------------|
| redis # 开启AOF持久化 CONFIG SET appendonly yes # 修改刷盘策略 CONFIG SET appendfsync everysec # 手动触发AOF重写 BGREWRITEAOF # 查看持久化配置 CONFIG GET save CONFIG GET append* |
八、ks.cfg 脚本部署,初始化开启持久化
|---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| shell %post yum install -y gcc gcc-c++ make cd /usr/local/src wget https://download.redis.io/releases/redis-5.0.10.tar.gz tar -zxf redis-5.0.10.tar.gz cd redis-5.0.10 make MALLOC=libc make install PREFIX=/usr/local/redis # 修改配置开启混合持久化 sed -i '/appendonly no/a appendonly yes' /usr/local/redis/conf/redis.conf sed -i '/# aof-use-rdb-preamble no/a aof-use-rdb-preamble yes' /usr/local/redis/conf/redis.conf %end |
九、高频故障总结
故障 1:服务器断电,RDB 丢失最近一段时间数据
- 原因:RDB 为定时快照,两次快照之间数据只存在内存;
- 解决:开启 AOF 持久化,使用 everysec 模式,降低数据丢失量。
故障 2:AOF 文件损坏,Redis 无法启动
- 原因:磁盘异常断电导致日志文件损坏;
- 修复命令:redis‑check‑aof --fix appendonly.aof修复文件。
故障 3:AOF 文件体积持续暴涨,磁盘占满
- 原因:没有开启 AOF 自动重写;
- 解决:开启 auto‑aof‑rewrite 参数,定时精简日志文件。
故障 4:重启 Redis 数据没有恢复
- 原因:rdb、aof 文件存放目录配置错误,或者文件权限不足;
- 解决:核对 dir 目录路径,修改文件权限为 redis 用户。