Redis 集群迁移到新服务器如何保留持久化 RDB 文件?

文章导读
Redis 集群迁移到新服务器保留持久化 RDB 文件,最稳妥的方式是在停机窗口内停止服务,完整复制数据目录中的 dump.rdb 和 nodes.conf 文件到新节点。适用场景为允许停机的集群整体搬迁,风险边界在于节点 ID 不变但 IP 变更时,需更新集群配置以避免脑裂或数据丢失。
📋 目录
  1. A 命令速用版
  2. B 为什么会这样
  3. C 分步处理
  4. D 怎么验证是否生效
  5. E 常见坑
  6. F 常见问题
A A

Redis 集群迁移到新服务器保留持久化 RDB 文件,最稳妥的方式是在停机窗口内停止服务,完整复制数据目录中的 dump.rdb 和 nodes.conf 文件到新节点。适用场景为允许停机的集群整体搬迁,风险边界在于节点 ID 不变但 IP 变更时,需更新集群配置以避免脑裂或数据丢失。

先说结论:直接复制 RDB 文件仅适用于冷迁移,必须同步复制集群配置文件 nodes.conf 并保持节点 ID 一致。

  • 适合:允许停机维护的集群整体服务器搬迁或硬件替换场景。
  • 先准备:确认所有节点 BGSAVE 完成,记录当前集群拓扑和节点 ID。
  • 验收:新集群启动后检查 CLUSTER INFO 状态为 ok,槽位分配完整。

命令速用版

以下命令用于触发保存、复制文件和启动服务,需在每台节点依次执行。

redis-cli BGSAVE:触发后台保存,确保内存数据写入 dump.rdb。

scp -r /var/lib/redis/* user@new_server:/var/lib/redis/:递归复制数据目录,包含 RDB 和集群配置。

redis-server /etc/redis/redis.conf:使用原配置文件启动新服务,确保路径和参数一致。

为什么会这样

Redis 集群依赖 nodes.conf 记录槽位映射和节点关系,仅复制 RDB 会导致新节点无法识别集群拓扑。RDB 文件只存储键值数据,不包含集群元数据,缺少 nodes.conf 会导致新节点认为自己是空集群或产生冲突。保持节点 ID 不变是为了让其他存活节点(如果有)或客户端能识别同一逻辑节点,避免触发重新分片。

分步处理

按顺序执行以下步骤,确保数据一致性和集群状态恢复。

Redis 集群迁移到新服务器如何保留持久化 RDB 文件?

第一步:停止写入并保存数据

在应用层停止写入请求,防止迁移过程中产生新数据。在所有主节点执行 redis-cli BGSAVE,等待 Last save time 更新。检查 redis-cli INFO persistence 确认 rdb_last_bgsave_status 为 ok。

第二步:停止 Redis 服务

执行 systemctl stop redis 或发送 redis-cli SHUTDOWN。确保进程完全退出,避免文件锁占用。

第三步:复制数据文件

打包数据目录,通常包含 dump.rdb、nodes.conf 和 appendonly.aof(如果开启 AOF)。使用 rsyncscp 传输到新服务器相同路径。确认文件权限属于 redis 用户,权限模式通常为 640 或 600。

第四步:调整网络配置

Redis 集群迁移到新服务器如何保留持久化 RDB 文件?

如果新服务器 IP 地址变更,修改 redis.conf 中的 bindcluster-announce-ip 参数。不要修改 node-id 或手动编辑 nodes.conf 内容,除非清楚集群重配置流程。

第五步:启动新集群

在所有新节点启动 Redis 服务。观察日志 /var/log/redis/redis.log,确认没有 Cluster state changed 报错。如果集群无法自动恢复,使用 redis-cli `--cluster` fix 尝试修复拓扑。

怎么验证是否生效

通过集群状态命令和数据抽样确认迁移完整性。

执行 redis-cli CLUSTER INFO,检查 cluster_state 是否为 ok,cluster_slots_assigned 是否等于 16384。执行 redis-cli CLUSTER NODES,确认所有节点状态为 connected,没有 fail 标记。随机抽取关键业务 Key,使用 GETEXISTS 验证数据存在性。对比迁移前后 DBSIZE 命令返回的键数量是否一致。

常见坑

列出容易出错的点,提醒哪些场景应该谨慎。

节点 ID 冲突:如果手动复制了 nodes.conf 但修改了节点 ID,会导致集群认为出现了新节点,旧数据可能无法访问。务必保持原有节点 ID 不变。

Redis 集群迁移到新服务器如何保留持久化 RDB 文件?

IP 绑定问题:新服务器 IP 变化后,若未配置 cluster-announce-ip,其他节点仍尝试连接旧 IP,导致集群通信失败。

AOF 与 RDB 混合:如果开启了 AOF 持久化,仅复制 RDB 文件会导致最近一次 RDB 之后的写入丢失。迁移时必须同时复制 appendonly.aof 文件。

权限错误:复制后的文件归属 root 用户,Redis 进程无法读取导致启动失败。启动前需执行 chown -R redis:redis /var/lib/redis

常见问题

只复制 dump.rdb 文件能恢复集群吗?

不能,缺少 nodes.conf 会导致集群拓扑丢失,节点无法识别槽位分配。

迁移过程中可以不停机吗?

可以,但需使用 CLUSTER REPLICATE 或添加新节点resharding 方案,而不是直接复制 RDB 文件。

新服务器配置不同会影响 RDB 加载吗?

只要 Redis 版本兼容且内存足够,硬件配置差异不影响 RDB 文件加载和数据完整性。

nodes.conf 文件可以手动编辑吗?

不建议,手动编辑容易导致校验和错误或拓扑不一致,应通过集群命令修复。