温馨提示×

centos redis备份策略如何制定

小樊
38
2025-12-23 08:48:00
栏目: 云计算

制定目标与总体思路

  • 明确目标:在可接受的**RPO(恢复点目标)RTO(恢复时间目标)**下保障数据安全。对写入频繁的业务优先降低RPO,对可用性要求高的业务优先降低RTO。
  • 策略组合:用RDB快照获取快速恢复点,用AOF追加日志提升数据安全性;两者可同时开启,以兼顾性能与可靠性。
  • 备份介质:本地保留热近备份,配合远程/异地存储实现多点容灾,避免单点故障。
  • 自动化与校验:用Cron定时执行备份脚本,定期做完整性与可用性校验,并保留操作留痕与告警。

持久化选型与配置建议

  • RDB快照
    • 原理:按时间间隔生成数据集的时间点快照(默认文件名为dump.rdb),可手动触发(SAVE/BGSAVE)或按配置自动触发。
    • 优点:生成快、体积小、恢复快;缺点:两次快照间可能有数据丢失;SAVE会阻塞,生产建议用BGSAVE(后台fork子进程生成)。
    • 常用配置示例:save 3600 1、save 300 100、save 60 10000(分别表示在指定秒数内有指定次数写操作时触发)。
  • AOF追加日志
    • 原理:记录每一条写命令,重启时回放恢复。
    • 同步策略:appendfsync 可选always/everysec/no;默认推荐everysec(每秒落盘,性能与安全折中)。
    • 维护:通过BGREWRITEAOF重写压缩AOF,减少体积;可配置自动重写阈值。
  • 双开建议:同时开启RDB与AOF,用RDB做快速恢复点,用AOF保障更细粒度数据不丢;恢复时以AOF为准(若AOF存在且有效)。

备份频率与保留策略示例

  • 场景A(写入频繁,RPO≤1小时)
    • RDB:每小时快照;保留48小时本地 + 同步至远程。
    • AOF:开启,appendfsync everysec;定期BGREWRITEAOF;保留7天以上。
  • 场景B(常规业务,RPO≤24小时)
    • RDB:每日快照;保留7–30天本地 + 远程。
    • AOF:开启,appendfsync everysec;保留7天以上。
  • 场景C(容忍数小时数据丢失)
    • RDB:每日快照;保留7天本地 + 远程。
    • AOF:可选关闭或appendfsync everysec;保留3–7天
  • 自动化与清理:用Cron定时执行备份脚本,按“小时/日”分层目录存放,并自动清理过期备份;示例脚本与定时任务见下文。

备份与恢复操作步骤

  • 备份
    • RDB:建议用BGSAVE触发快照,脚本拷贝dump.rdb到备份目录;注意Redis数据目录由dir指定,备份与恢复需保持一致。
    • AOF:可定期执行BGREWRITEAOF获取干净AOF;备份appendonly.aof文件。
    • 配置与脚本:一并备份**/etc/redis/*.conf及备份脚本;脚本放入/usr/local/redis_backup/**等路径并赋权。
  • 恢复
    • 仅RDB恢复:建议先停止Redis,拷贝备份的dump.rdb至Redis数据目录(由dir指定),再启动;若开启AOF,恢复后可能被AOF空文件覆盖,见下文“双开恢复要点”。
    • 仅AOF恢复:停止Redis,拷贝appendonly.aof至数据目录,启动后由AOF回放恢复。
    • RDB+AOF双开恢复:优先使用AOF恢复(数据更完整);若必须以RDB冷备恢复,需临时关闭AOF,恢复后再开启并持久化配置。
    • AOF损坏修复:可用redis-check-aof --fix修复;修复后重启验证。

自动化脚本与cron示例

  • RDB按小时备份并保留48小时
    • 脚本示例(/usr/local/redis_backup/rdb_backup.sh):
      #!/bin/sh
      BACKUP_BASE="/usr/local/redis_backup"
      CUR_HOUR=$(date +%Y%m%d%H)
      mkdir -p "$BACKUP_BASE/$CUR_HOUR"
      cp /var/lib/redis/dump.rdb "$BACKUP_BASE/$CUR_HOUR/"
      DEL_HOUR=$(date -d "-48 hour" +%Y%m%d%H)
      rm -rf "$BACKUP_BASE/$DEL_HOUR"
      
    • Cron:每小时执行
      0 * * * * /usr/local/redis_backup/rdb_backup.sh
      
  • RDB按日备份并保留30天
    • 脚本示例(/usr/local/redis_backup/rdb_backup_daily.sh):
      #!/bin/sh
      BACKUP_BASE="/usr/local/redis_backup"
      CUR_DAY=$(date +%Y%m%d)
      mkdir -p "$BACKUP_BASE/$CUR_DAY"
      cp /var/lib/redis/dump.rdb "$BACKUP_BASE/$CUR_DAY/"
      DEL_DAY=$(date -d "-30 day" +%Y%m%d)
      rm -rf "$BACKUP_BASE/$DEL_DAY"
      
    • Cron:每日零点执行
      0 0 * * * /usr/local/redis_backup/rdb_backup_daily.sh
      
  • 配置与脚本定时备份
    • 备份配置文件(/backup/redis.conf.bak-YYYYMMDDHHMMSS):
      #!/bin/bash
      BACKUP_DIR="/backup"
      CONFIG_FILE="/etc/redis/redis.conf"
      [ ! -d "$BACKUP_DIR" ] && mkdir -p "$BACKUP_DIR"
      cp "$CONFIG_FILE" "$BACKUP_DIR/redis.conf.bak-$(date +%Y%m%d%H%M%S)"
      
    • Cron:每日2:00执行
      0 2 * * * /path/to/backup_redis.sh
      
  • 安全与校验建议
    • 备份目录与传输链路使用最小权限;关键备份做异地/远程拷贝(如rsync/scp)。
    • 定期抽样恢复演练,校验dump.rdb/appendonly.aof可用性与完整性;脚本加日志与错误告警。

0