Redis 备份与恢复(RDB、AOF、replica 和 cluster)
Redis难度: 中级耗时: 30–60 分钟为已安装的 Redis 或 Valkey(单实例、带 Sentinel 的 master/replica 或 Redis Cluster)建立备份机制,并说明如何从备份恢复。逐步完成 RDB(save 规则、BGSAVE、LASTSAVE、复制 dump.rdb)和 AOF(BGREWRITEAOF,7.x 的多文件 appendonlydir)备份、从 replica 备份、在 Cluster 中备份所有 master、在临时实例上测试恢复、避开 AOF 优先陷阱的原地恢复,以及通过 systemd timer / cron 实现带保留期和远程副本的定时备份;最终得到一个定期运行且已验证可恢复的备份。复制(Sentinel、Cluster)不能代替备份:误删的数据会传播到所有 replica。安装和日常运维见其他 Redis 指南。
架构: 单实例、replica 或 Redis Cluster 服务器(Redis 7.2 / 8.x、Valkey)
开始之前
- … 正在运行,且配置文件 … 中定义了 requirepass(密码从该文件读取)。安装应按照 DBAtlas …Redis Cluster…Redis Sentinel… 指南中的路径完成;如有不同,请相应调整路径。
- … 位于与数据盘分离的磁盘或网络共享上;可用空间至少为内存中数据大小(used_memory)乘以保留天数。此外,数据目录中必须有足以写入新 RDB 的可用空间供 BGSAVE 使用。
- BGSAVE/BGREWRITEAOF 通过 fork 运行:根据写入强度(copy-on-write)需要额外内存。必须设置 vm.overcommit_memory = 1;否则 fork 会以 "Can't save in background: fork: Cannot allocate memory" 失败。
- 备份所用的命令(CONFIG、BGSAVE、LASTSAVE、BGREWRITEAOF…、CLUSTER、SYNC…)未被 rename-command 禁用,且密码所属用户(default)可以执行这些命令。
- 具有 root 或 sudo 权限。如需原地恢复,已申请维护窗口并通知了应用团队。
指南阶段
- 当前持久化设置 — 查看持久化和角色信息 · 设置 RDB save 规则 · 在线启用 AOF · 准备备份目录
- RDB 备份 — 确认 replica 数据是最新的 · 用 BGSAVE 生成最新 RDB · 将 dump.rdb 复制到备份目录并验证 · 列出 Cluster 的 master · 从每个 master 获取 RDB(--rdb)
- AOF 备份 — 压缩 AOF(BGREWRITEAOF) · 备份 appendonlydir · 验证 AOF 文件
- 测试恢复(临时实例) — 在临时实例上打开 RDB · 与源比对并关闭临时实例 · 在临时实例上打开 AOF 备份
- 原地恢复 — 停止服务并将现有文件移到一旁 · 放回 RDB 备份 · 暂时关闭 AOF · 放回 AOF 备份 · 启动服务并验证数据 · 在线重新启用 AOF …
- 定时备份与保留 — 编写备份脚本 · 使脚本可执行 · 准备到远程服务器的 SSH 访问 · 创建 systemd service 和 timer · 手工触发定时备份并验证 · 编写 cron 任务 …
- 监控 — 监控持久化状态和备份时长 · 定期恢复演练