8.3.7 备份策略与合规保留
在Redis运维中,备份策略与合规保留需同时满足业务恢复目标与监管要求。应明确RPO/RTO、数据重要等级与保留周期,结合RDB/AOF与外部备份方案形成分层策略,避免单点与覆盖式丢失。
原理与架构草图
备份策略设计要点
- 分层备份:本地冷备(RDB/AOF文件)+ 远端备份(对象存储/异地机房),降低介质故障风险。
- 多版本保留:按日/周/月保留快照,避免逻辑误删后无可用历史版本。
- 一致性窗口:在业务低峰触发RDB或AOF重写,减少性能抖动与数据不一致。
- 自动化与可验证:定期自动备份并执行恢复演练,确保备份可用性。
RDB/AOF备份与归档示例(含命令解释)
# 1) 触发RDB快照:BGSAVE异步生成dump.rdb
redis-cli -h 127.0.0.1 -p 6379 BGSAVE
# 预期:返回 Background saving started
# 2) 触发AOF重写:压缩AOF日志,减少体积
redis-cli -h 127.0.0.1 -p 6379 BGREWRITEAOF
# 预期:返回 Background append only file rewriting started
# 3) 备份目录准备
sudo mkdir -p /data/redis_backup/{daily,weekly,monthly}
sudo chown redis:redis /data/redis_backup -R
# 4) 备份脚本:打包当前RDB/AOF并生成校验
cat >/usr/local/bin/redis_backup.sh <<'EOF'
#!/bin/bash
set -e
DATE=$(date +%F)
REDIS_DIR=/var/lib/redis
BK_DIR=/data/redis_backup/daily
TAR=${BK_DIR}/redis-${DATE}.tar.gz
# 打包RDB/AOF
tar -czf "$TAR" -C "$REDIS_DIR" dump.rdb appendonly.aof
# 生成校验
sha256sum "$TAR" > "${TAR}.sha256"
# 保留7天
find "$BK_DIR" -name "redis-*.tar.gz" -mtime +7 -delete
find "$BK_DIR" -name "redis-*.sha256" -mtime +7 -delete
EOF
chmod +x /usr/local/bin/redis_backup.sh
# 5) 执行备份并检查结果
/usr/local/bin/redis_backup.sh
ls -lh /data/redis_backup/daily
# 6) 备份上传到对象存储(示例:使用rclone同步)
# rclone配置在 /root/.config/rclone/rclone.conf
rclone sync /data/redis_backup/daily remote:redis-backup/daily
合规保留与不可篡改示例
# 1) 远端启用版本控制(以对象存储为例,命令仅示意)
# 预期:开启版本控制后,覆盖写会保留历史版本
ossutil bucket-versioning --bucket oss://redis-backup --status Enabled
# 2) WORM保留策略(示意)
ossutil bucket-retention --bucket oss://redis-backup --days 365
恢复演练示例(包含步骤与预期)
# 1) 停止Redis,避免写入
sudo systemctl stop redis
# 2) 解压备份
tar -xzf /data/redis_backup/daily/redis-2024-08-01.tar.gz -C /var/lib/redis
# 3) 校验完整性
sha256sum -c /data/redis_backup/daily/redis-2024-08-01.tar.gz.sha256
# 预期:OK
# 4) 启动Redis
sudo systemctl start redis
# 5) 验证数据
redis-cli -h 127.0.0.1 -p 6379 DBSIZE
redis-cli -h 127.0.0.1 -p 6379 get some_key
常见排错与处理
- 备份文件为空或过小:确认RDB/AOF路径(CONFIG GET dir、CONFIG GET dbfilename),检查磁盘空间与权限。
- BGSAVE失败:查看/var/log/redis/redis-server.log,常见原因是fork失败或磁盘满。
- AOF重写失败:检查appendonly是否启用,确认appendonly.aof权限。
- 对象存储同步失败:检查网络、凭证与rclone配置;可使用rclone lsd remote:验证连接。
命令解释要点
- BGSAVE:后台生成RDB快照,避免阻塞主线程。
- BGREWRITEAOF:重写AOF,压缩历史命令。
- sha256sum -c:验证备份文件未被篡改或损坏。
- rclone sync:确保远端与本地保持一致,适合灾备同步。
练习
1. 设定RPO=5分钟,设计RDB+AOF混合策略,并给出cron计划与保留周期。
2. 模拟删除关键Key后,使用备份恢复到指定时间点,记录RTO与恢复步骤。
3. 编写脚本将每周备份转存到weekly目录,并保留12周。
4. 故意修改备份文件内容,验证sha256sum -c能否正确报警并记录处理流程。