8.6.3 备份策略与恢复演练
备份策略需覆盖全量、增量与实时三类能力,结合业务RTO/RPO设计。全量备份用于长期归档与灾难恢复;增量/差异备份缩短窗口;实时备份通过复制链路与AOF/RDB联动降低RPO。备份对象应包含:RDB、AOF、配置文件、ACL、脚本、拓扑与实例元数据,并记录版本与关键参数变更。
原理草图(备份三副本与恢复链路):
备份策略示例(本地+远端+异地三副本,含压缩与校验):
# 1) 生成RDB快照(主库低峰或从库执行)
redis-cli -h 127.0.0.1 -p 6379 BGSAVE
# 2) 复制RDB/AOF/配置/ACL/脚本到备份目录
BK_DIR=/data/backup/redis/$(date +%F)
mkdir -p "$BK_DIR"
cp /var/lib/redis/dump.rdb "$BK_DIR/"
cp /var/lib/redis/appendonly.aof "$BK_DIR/"
cp /etc/redis/redis.conf "$BK_DIR/"
cp /etc/redis/users.acl "$BK_DIR/" 2>/dev/null
cp -r /var/lib/redis/scripts "$BK_DIR/" 2>/dev/null
# 3) 打包压缩并生成校验
tar -czf "${BK_DIR}.tar.gz" -C /data/backup/redis "$(basename "$BK_DIR")"
sha256sum "${BK_DIR}.tar.gz" > "${BK_DIR}.tar.gz.sha256"
# 4) 上传到远端对象存储(以S3/MinIO为例)
mc alias set backup https://minio.example.com ACCESS_KEY SECRET_KEY
mc cp "${BK_DIR}.tar.gz" backup/redis-full/$(hostname)/
# 5) 复制到异地冷备(rsync到异地主机)
rsync -av "${BK_DIR}.tar.gz" backup@dr.example.com:/data/dr/redis/
关键配置示例(AOF与RDB组合降低RPO):
# /etc/redis/redis.conf
appendonly yes
appendfilename "appendonly.aof"
appendfsync everysec
save 900 1
save 300 10
save 60 10000
rdbcompression yes
恢复演练流程(RDB + AOF 组合恢复):
# 0) 演练环境准备(隔离网络与权限)
systemctl stop redis
# 1) 清理旧数据目录
rm -f /var/lib/redis/dump.rdb /var/lib/redis/appendonly.aof
# 2) 解压恢复包
tar -xzf /data/backup/redis/2024-01-01.tar.gz -C /data/restore/
cp /data/restore/2024-01-01/dump.rdb /var/lib/redis/
cp /data/restore/2024-01-01/appendonly.aof /var/lib/redis/
cp /data/restore/2024-01-01/redis.conf /etc/redis/
# 3) 启动并观察加载耗时
systemctl start redis
journalctl -u redis -n 100 --no-pager
# 4) 校验数据一致性(示例:键数量与关键业务键)
redis-cli DBSIZE
redis-cli GET business:order:latest
# 5) AOF重写(验证重写耗时)
redis-cli BGREWRITEAOF
集群/哨兵演练关键步骤示例:
# 集群节点重建并加入
redis-cli --cluster add-node 10.0.0.11:6379 10.0.0.10:6379
redis-cli --cluster reshard 10.0.0.10:6379
# 哨兵重新发现与故障转移验证
redis-cli -p 26379 SENTINEL masters
redis-cli -p 26379 SENTINEL failover mymaster
排错清单与处理命令:
# 1) 备份失败:磁盘空间不足
df -h /data/backup/redis
# 处理:清理历史或扩容
find /data/backup/redis -type f -mtime +7 -delete
# 2) RDB加载失败:权限或文件损坏
ls -l /var/lib/redis/dump.rdb
sha256sum -c /data/backup/redis/2024-01-01.tar.gz.sha256
# 3) AOF加载慢:rewrite卡住或磁盘IO高
redis-cli INFO persistence | egrep "aof_|loading"
iostat -x 1 5
命令解释要点(可用于巡检与演练记录):
- BGSAVE:后台生成RDB快照,避免阻塞主线程。
- appendfsync everysec:AOF每秒刷盘,平衡性能与RPO。
- BGREWRITEAOF:压缩AOF,减少恢复时间。
- redis-cli DBSIZE:快速核对键总量。
练习与演练任务:
1. 在从库执行全量备份,上传对象存储并核对校验值,记录耗时与文件大小。
2. 关闭实例后仅用RDB恢复,记录加载时间与内存峰值(redis-cli INFO memory)。
3. 启用AOF后再恢复一次,比较RDB与AOF恢复耗时差异。
4. 在测试集群上执行一次reshard,验证槽位迁移与业务可用性。
5. 制作季度演练报告模板,包含RTO/RPO、成功率、瓶颈与改进项。