温馨提示×

Linux Redis备份策略是什么

小樊
44
2025-12-26 07:32:52
栏目: 云计算

Linux Redis备份策略

一 策略总览

  • 在生产环境中,建议采用以RDB快照做定时冷备为主、AOF保障近实时落盘为辅、异地容灾兜底的“多层”策略;若使用 Redis 4.0+,可开启混合持久化 aof-use-rdb-preamble以兼顾恢复速度与数据安全性。RDB 适合做周期性全量备份与快速恢复,AOF 记录写操作,故障时可重放,二者可同时开启,Redis 重启时默认以 AOF 为主进行恢复。对于关键业务,建议同时保留本地与远程/云端备份副本,并定期校验与演练恢复流程。

二 持久化选型与配置要点

  • RDB(快照)
    • 触发方式:手动执行 SAVE(阻塞)/BGSAVE(后台);或在配置中设置自动快照策略(如 save 900 1、save 300 10、save 60 10000)。RDB 文件默认名为 dump.rdb,存放目录由 dir 指定(常见为 /var/lib/redis)。RDB 生成成本较高,不宜过频,异常退出不会触发快照。
  • AOF(追加日志)
    • 开启方式:配置 appendonly yes;落盘策略 appendfsync 建议设为 everysec(每秒落盘,性能与可用性平衡)。AOF 会定期重写(auto-aof-rewrite-percentage、auto-aof-rewrite-min-size),以压缩体积。
  • 混合持久化(Redis 4.0+)
    • 配置 aof-use-rdb-preamble yes,AOF 重写时将先写入 RDB 格式头部,再追加增量命令,兼顾启动速度与数据完整性。

三 定时冷备与异地容灾

  • 本地定时快照备份(RDB)
    • 思路:用脚本在业务低峰触发 BGSAVE,待快照完成后将 dump.rdb 拷贝到备份目录,并按时间做分层保留(如近48小时/近30天);使用 crontab 调度。示例(关键片段):
      • 每小时备份并保留48小时
        0 * * * * /usr/local/redis/copy/redis_rdb_copy_hourly.sh
        
      • 每天备份并保留30天
        0 0 * * * /usr/local/redis/copy/redis_rdb_copy_daily.sh
        
      • 脚本要点:创建以时间命名的目录(如 %Y%m%d%H%Y%m%d),拷贝当前 dump.rdb,清理过期目录;备份完成后可同步至远端存储(如 rsync/scp)。
  • 远程/云端备份
    • 建议将每小时/每日备份自动同步到云对象存储或备用服务器,实现异地容灾;保留多份副本与多时间点,降低单点故障风险。

四 备份校验与恢复流程

  • 校验
    • RDB 文件可用 redis-check-rdb 校验完整性;AOF 文件异常可用 redis-check-aof --fix 修复。定期抽样恢复演练,确保备份可用。
  • 恢复
    • 场景A(仅用 RDB 冷备恢复)
      • 停止 Redis → 备份并清空当前 AOF/RDB → 将备份 dump.rdb 放到 dir 指定目录并命名为 dbfilename → 启动 Redis 校验数据;如需 AOF,后续可在运行中开启 CONFIG SET appendonly yes,让 Redis 将内存数据回写到新 AOF。
    • 场景B(AOF 为主,RDB 为兜底)
      • 优先使用 AOF 自动恢复;若 AOF 损坏,先修复再启动;若无可用 AOF 且仅有 RDB,按“场景A”流程用 RDB 恢复,再按需开启 AOF 回写补齐日志。
    • 注意
      • 恢复前确认 dirdbfilename 配置;AOF 与 RDB 同时开启时,Redis 默认以 AOF 为主,做 RDB 冷备恢复时通常需要临时关闭 AOF 以避免被空 AOF 覆盖。

五 关键配置与脚本示例

  • 关键配置(示例)
    # RDB快照策略(可按业务调优)
    save 900 1
    save 300 10
    save 60 10000
    
    # 数据目录与文件名
    dir /var/lib/redis
    dbfilename dump.rdb
    
    # AOF
    appendonly yes
    appendfsync everysec
    auto-aof-rewrite-percentage 100
    auto-aof-rewrite-min-size 64mb
    
    # 混合持久化(Redis 4.0+)
    aof-use-rdb-preamble yes
    
  • 触发快照与拷贝(示例)
    # 1) 触发后台快照
    redis-cli BGSAVE
    
    # 2) 等待快照完成后拷贝(示例路径,按实际修改)
    cp /var/lib/redis/dump.rdb /backup/redis/dump_$(date +%F_%H%M).rdb
    
  • 定时任务(示例)
    # 每小时一次 RDB 冷备,保留48小时
    0 * * * * /usr/local/redis/copy/redis_rdb_copy_hourly.sh
    
    # 每天一次 RDB 冷备,保留30天
    0 0 * * * /usr/local/redis/copy/redis_rdb_copy_daily.sh
    
    提示:脚本内应先确认 BGSAVE 已完成再拷贝,避免拿到不完整快照;拷贝完成后可 rsync/scp 到远端做异地备份。

0