CentOS Redis 数据迁移步骤
一 准备与一致性控制
- 明确持久化方式:查看是否开启 AOF(存在 appendonly.aof 即开启)。迁移以 RDB 为主时,建议先让源库生成一致性快照;以 AOF 为主时,可直接使用 AOF 文件或先执行 BGREWRITEAOF 重写获得干净快照。
- 低峰期操作并尽量短暂停写:可在维护窗口内执行,减少对业务影响。
- 版本与兼容性:尽量保持源与目标 Redis 版本相近;跨大版本迁移时优先用 RDB 快照或逐键 DUMP/RESTORE,更稳妥。
- 目标库准备:确认目标实例的 持久化策略、内存、最大客户端数 等配置满足需求。
二 方法一 离线迁移 RDB 快照(最常用、速度快)
- 源库生成快照
- 非阻塞方式:执行 BGSAVE,等待快照生成(可在日志中确认完成)。
- 阻塞方式:执行 SAVE(仅在可接受短暂停写时使用)。
- 查找并拷贝 RDB 文件
- 常见路径:/var/lib/redis/dump.rdb(以实际配置为准)。
- 拷贝到目标机器:例如 scp 到 /var/lib/redis/。
- 目标库导入
- 方案A(停机导入,最稳妥):
- systemctl stop redis
- 备份旧文件:mv /var/lib/redis/dump.rdb /var/lib/redis/dump.rdb.bak
- 放入新 RDB:cp /path/dump.rdb /var/lib/redis/dump.rdb
- 权限:chown redis:redis /var/lib/redis/dump.rdb;chmod 660 /var/lib/redis/dump.rdb
- systemctl start redis
- 方案B(不停机导入,需关闭 AOF 避免被覆盖):
- 动态关闭 AOF:redis-cli CONFIG SET appendonly no
- 动态设置数据目录与文件名并落盘:
- redis-cli CONFIG SET dir /var/lib/redis
- redis-cli CONFIG SET dbfilename dump.rdb
- redis-cli CONFIG REWRITE
- 重启 Redis 让新 RDB 生效
- 数据验证后,再开启 AOF:redis-cli CONFIG SET appendonly yes(如需持久化到配置文件,重启前改回配置并 CONFIG REWRITE)。
三 方法二 在线迁移 不停写(复制或逐键迁移)
- 主从复制方式(适合不停机、跨机房/跨网段)
- 目标实例配置为源实例的 从节点(replicaof 或 slaveof),等待 全量同步 + 部分同步 完成。
- 校验数据一致后,在业务低峰执行 切换/故障转移(如配合 Sentinel/手动提升从库为主)。
- DUMP/RESTORE 逐键迁移(适合小规模或选择性迁移)
- 单键:
- 源:redis-cli DUMP key > key.rdb
- 目标:cat key.rdb | redis-cli -h target -p 6379 RESTORE key 0
- 批量:在源端获取键列表,循环 DUMP 并在目标端 RESTORE(注意客户端并发与超时)。
- MIGRATE 命令(原子搬运键,适合点对点迁移)
- 示例:redis-cli MIGRATE target_host target_port “” 0 10000 COPY REPLACE KEYS key1 key2
- 说明:COPY 保留源键,REPLACE 覆盖目标键,支持一次迁移多个键。
四 方法三 集群迁移 Redis Cluster
- 基本思路:在新集群环境搭建完成后,将旧集群的 master 节点 作为新集群的 新节点加入,通过 cluster meet 加入集群,然后使用 redis-trib.rb reshard 或 CLUSTER REBALANCE 将 slots 从旧节点迁移到新节点,观察迁移进度与集群状态,最终将旧节点 del-node 下线。
- 要点:迁移过程中关注 slot 分布、数据量、网络带宽 与 业务访问,必要时分批次迁移并保留回滚窗口。
五 验证与回滚
- 数据校验
- 基础:dbsize、info keyspace、随机 keys 抽样 GET/STRLEN/LLEN 等。
- 精确:对比源/目标 key 数量 与 重要 key 值/过期时间。
- 回滚预案
- RDB 方案:保留旧 RDB(如 dump.rdb.bak),异常时停止目标库、恢复原 RDB 并重启。
- 复制方案:切换回原主或从原主重新建立复制。
- 常见坑与建议
- 目标库开启 AOF 时,直接覆盖 RDB 后重启可能再次从空内存重建 AOF,导致数据“丢失”;应先关闭 AOF、导入 RDB、验证后再开启 AOF。
- 权限与路径:确保目标 RDB 文件属主为 redis:redis、目录可写,且 dir/dbfilename 配置正确。
- 大 Key/大 Value:逐键或分片迁移时控制批量与超时,避免阻塞与超时。
- 定期演练与备份:建立 定时 RDB 备份 与 恢复演练 机制,确保备份可用。