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 一段时间(回滚备用)
```
