RedisShake迁移方案,如何优化处理?

摘要:# Redis 迁移方案 > 使用 RedisShake 工具进行 Redis 数据迁移 ## 目录 - [一、方案概述](#一方案概述) - [二、迁移工具介绍](#二迁移工具介绍) - [三、迁移架构](#三迁移架
# Redis 迁移方案 > 使用 RedisShake 工具进行 Redis 数据迁移 --- ## 目录 - [一、方案概述](#一方案概述) - [二、迁移工具介绍](#二迁移工具介绍) - [三、迁移架构](#三迁移架构) - [四、迁移步骤](#四迁移步骤) - [五、配置文件详解](#五配置文件详解) - [六、监控与验证](#六监控与验证) - [七、Cluster 模式迁移](#七cluster-模式迁移) - [八、注意事项](#八注意事项) --- ## 一、方案概述 ### 1.1 迁移场景 | 场景 | 说明 | |------|------| | AWS ElastiCache → 自建 Redis | 云服务迁移到自建 | | 自建 Redis → AWS ElastiCache | 上云迁移 | | 跨 Region 迁移 | 数据中心迁移 | | 版本升级迁移 | Redis 大版本升级 | ### 1.2 迁移方式对比 | 方式 | 优点 | 缺点 | |------|------|------| | **RedisShake** | 支持在线迁移、增量同步 | 需要额外部署 | | RDB 导入导出 | 简单直接 | 需要停机 | | 主从复制 | 原生支持 | 版本限制 | --- ## 二、迁移工具介绍 ### 2.1 RedisShake - **开源地址**:https://github.com/tair-opensource/RedisShake - **功能**:支持 Redis 数据的同步、迁移、校验 - **特性**: - 支持全量 + 增量同步 - 支持 Cluster 模式 - 支持断点续传 - 支持数据过滤 ### 2.2 下载安装 ```bash # 下载最新版本 wget https://github.com/tair-opensource/RedisShake/releases/download/v4.0.0/redis-shake-linux-amd64.tar.gz # 解压 tar -zxvf redis-shake-linux-amd64.tar.gz cd redis-shake-linux-amd64 ``` --- ## 三、迁移架构 ### 3.1 单实例迁移架构 ``` ┌─────────────────┐ ┌─────────────────┐ │ Source Redis │ │ Target Redis │ │ (ElastiCache) │ │ (Self-hosted) │ │ │ │ │ │ Primary Node │ │ Primary Node │ │ 10.0.1.100 │ │ 10.0.2.100 │ └────────┬────────┘ └────────▲────────┘ │ │ │ ┌─────────────────┐ │ └────────►│ RedisShake │──────────┘ │ │ │ - 全量同步 │ │ - 增量同步 │ │ - 数据校验 │ └─────────────────┘ ``` ### 3.2 Cluster 模式迁移架构 ``` ┌─────────────────────────────────────────────────────────────┐ │ Source Cluster │ ├─────────────────┬─────────────────┬─────────────────────────┤ │ Shard 1 │ Shard 2 │ Shard 3 │ │ Master + Rep │ Master + Rep │ Master + Rep │ └────────┬────────┴────────┬────────┴────────┬────────────────┘ │ │ │ └────────────────┬┴─────────────────┘ │ ┌────────▼────────┐ │ RedisShake │ │ (Cluster) │ └────────┬────────┘ │ ┌────────────────┼────────────────┐ │ │ │ ┌────────▼────────┬───────▼────────┬───────▼──────────────────┐ │ Shard 1 │ Shard 2 │ Shard 3 │ │ Master + Rep │ Master + Rep │ Master + Rep │ ├─────────────────┴────────────────┴──────────────────────────┤ │ Target Cluster │ └─────────────────────────────────────────────────────────────┘ ``` --- ## 四、迁移步骤 ### 4.1 前置检查 ```bash # 1. 检查源 Redis 连接 redis-cli -h <source_host> -p 6379 -a <password> ping # 2. 检查目标 Redis 连接 redis-cli -h <target_host> -p 6379 -a <password> ping # 3. 检查源 Redis 数据量 redis-cli -h <source_host> -p 6379 -a <password> info keyspace # 4. 检查网络连通性 telnet <target_host> 6379 ``` ### 4.2 配置 RedisShake 创建配置文件 `shake.toml`: ```toml [source] # 源 Redis 地址 address = "10.0.1.100:6379" password = "source_password" [target] # 目标 Redis 地址 type = "standalone" address = "10.0.2.100:6379" password = "target_password" ``` ### 4.3 执行迁移 ```bash # 启动 RedisShake ./redis-shake shake.toml # 后台运行 nohup ./redis-shake shake.toml > shake.log 2>&1 & ``` ### 4.4 监控迁移进度 ```bash # 查看日志 tail -f shake.log # 查看同步状态 # RedisShake 会输出同步进度和 QPS ``` --- ## 五、配置文件详解 ### 5.1 完整配置示例 ```toml # shake.toml # ==================== 源端配置 ==================== [source] # Redis 类型:standalone / cluster type = "standalone" # 源 Redis 地址(单机模式) address = "10.0.1.100:6379" # 认证密码 password = "source_password" # TLS 配置(如果需要) tls = false # ==================== 目标端配置 ==================== [target] # Redis 类型 type = "standalone" # 目标 Redis 地址 address = "10.0.2.100:6379" # 认证密码 password = "target_password" # ==================== 高级配置 ==================== [advanced] # 日志级别:debug / info / warn / error log_level = "info" # 日志文件 log_file = "shake.log" # 并发数 parallel = 32 # 批量大小 batch_size = 100 # 是否保留 TTL keep_ttl = true ``` ### 5.2 关键参数说明 | 参数 | 说明 | 推荐值 | |------|------|--------| | `parallel` | 并发数 | 32-64 | | `batch_size` | 批量大小 | 100 | | `keep_ttl` | 保留 TTL | true | | `log_level` | 日志级别 | info | --- ## 六、监控与验证 ### 6.1 迁移过程监控 ```bash # 查看 RedisShake 输出 # 关键指标: # - 同步进度百分比 # - 当前 QPS # - 已同步 key 数量 # - 增量同步延迟 ``` ### 6.2 数据一致性验证 ```bash # 1. 对比 key 数量 redis-cli -h <source> info keyspace redis-cli -h <target> info keyspace # 2. 抽样验证数据 redis-cli -h <source> get sample_key redis-cli -h <target> get sample_key # 3. 使用 RedisShake verify 功能 ./redis-shake verify.toml ``` ### 6.3 验证配置示例 ```toml # verify.toml [source] address = "10.0.1.100:6379" password = "source_password" [target] address = "10.0.2.100:6379" password = "target_password" [verify] # 抽样比例 sample_rate = 0.1 # 是否检查 TTL check_ttl = true ``` --- ## 七、Cluster 模式迁移 ### 7.1 Cluster 配置 ```toml # shake-cluster.toml [source] type = "cluster" # Cluster 任意节点地址,RedisShake 会自动发现所有节点 address = "10.0.1.100:6379" password = "source_password" [target] type = "cluster" address = "10.0.2.100:6379" password = "target_password" ``` ### 7.2 Cluster 迁移注意事项 | 注意项 | 说明 | |--------|------| | **Slot 分配** | 目标集群 slot 分配需与源一致或重新分配 | | **节点数量** | 建议目标集群节点数 ≥ 源集群 | | **内存预留** | 目标集群内存需预留 20% 以上 | | **网络带宽** | 确保足够的跨节点带宽 | --- ## 八、注意事项 ### 8.1 迁移前检查清单 - [ ] 源 Redis 版本确认 - [ ] 目标 Redis 版本兼容性 - [ ] 网络连通性测试 - [ ] 目标 Redis 内存容量确认 - [ ] 迁移时间窗口确定 - [ ] 回滚方案准备 ### 8.2 迁移中注意事项 | 注意项 | 说明 | |--------|------| | **避免大 Key** | 大 Key 会阻塞同步 | | **监控内存** | 目标 Redis 内存使用 | | **网络稳定** | 确保迁移期间网络稳定 | | **业务低峰** | 建议在业务低峰期迁移 | ### 8.3 迁移后验证清单 - [ ] Key 数量一致性 - [ ] 数据抽样验证 - [ ] TTL 正确性验证 - [ ] 应用连接测试 - [ ] 性能基准测试 ### 8.4 常见问题 | 问题 | 解决方案 | |------|----------| | 连接超时 | 检查网络、防火墙、安全组 | | 内存不足 | 扩容目标 Redis 内存 | | 同步延迟大 | 增加 parallel 参数 | | 大 Key 阻塞 | 拆分大 Key 或单独处理 | --- ## 九、切换流程 ### 9.1 平滑切换步骤 ``` 1. 确认增量同步延迟 < 1s │ ▼ 2. 停止源 Redis 写入(应用切换为只读) │ ▼ 3. 等待增量同步完成(延迟 = 0) │ ▼ 4. 最终数据一致性验证 │ ▼ 5. 应用配置切换到目标 Redis │ ▼ 6. 验证应用正常 │ ▼ 7. 停止 RedisShake │ ▼ 8. 保留源 Redis 一段时间(回滚备用) ```