
# AWS ElasticCache for Redis数据库到GeminiDB Redis的迁移
#### 迁移原理
AWS ElasticCache for Redis通过备份导出RDB文件后，通过Redis-Shake迁移工具的数据恢复（restore）将数据迁移到GeminiDB Redis。
#### 使用须知
- AWS不支持psync/sync命令，无法增量迁出。
- 迁移前确保部署Redis-shake的ECS与目标端GeminiDB Redis网络通畅。
- 注意放开源端和目标端安全组配置。
 
#### 操作步骤
1. 部署迁移工具。 
   1. 获取工具[Redis-Shake](https://github.com/alibaba/RedisShake/releases/download/release-v2.1.0-20210819/release-v2.1.0-20210819.tar.gz)。
      ![](https://support.huaweicloud.com/redisug-nosql/public_sys-resources/note_3.0-zh-cn.png)
      Redis-Shake工具可下载release版本，解压缩后即可使用。
      
   
   2. 修改配置文件"Redis-Shake.conf"，修改时需要注意以下配置项。 **log.level = info** # 默认日志级别，info级别可以打印出相应的迁移进度，可以用来判断迁移是否结束。
      **source.rdb.input = /xx/xx.rdb** # 数据源RDB文件绝对路径。
      **target.address = \<host\>:6379** # 目标端地址。
      **target.password_raw = \*\*\*\*\***# 目标端口令。
      **target.version = 5.0**# 目标端redis版本。
      **target.type = standalone** # 目标端类型。
      **target.db = 0** # 数据迁移到目标端GeminiDB Redis 的指定数据库上。默认是db0
      **big_key_threshold = 1** # 设置大key阈值
      
   
   3. 按需选配是否覆盖目标端数据。 **key_exists = none**
      
   
   
   ![](https://support.huaweicloud.com/redisug-nosql/public_sys-resources/note_3.0-zh-cn.png)
   当源端和目的端有重复key时需要选配是否覆盖目标端数据，可配置的值为：
   - rewrite：源端覆盖目的端。
   
   - none：一旦发生进程直接退出。
   
   - ignore：保留目的端key，忽略源端的同步key。该值在rump模式下不会生效。
   
   
   由于本次迁移源端是RDB文件，因此预期无重复数据，建议选择none。如迁移过程异常退出，您可以在管理控制台右上角，选择"[工单 \> 新建工单](https://console.huaweicloud.com/ticket/#/ticketindex/createIndex)"，请联系客服处理。
   
   
2. 进行数据迁移。 
   启动迁移命令：
   **./redis-shake.linux -conf=redis-shake.conf -type=restore**
   ![](https://support.huaweicloud.com/redisug-nosql/public_sys-resources/note_3.0-zh-cn.png)
   由于数据源为RDB文件，因此使用restore模式。
   迁移结束后停止进程。
   
   
3. 数据校验。 
   由于数据源为RDB文件，因此需要用户从业务角度对目标端GeminiDB Redis数据进行检查。
   
   
 
#### 迁移后Redis数据一致性校验
迁移完成后，您可以对Redis数据做一致性校验。
![](https://support.huaweicloud.com/redisug-nosql/public_sys-resources/note_3.0-zh-cn.png)
- Redis迁移已完成或者已经进入增量状态。
- 需要ECS实例部署Redis-Full-Check开源工具，并确保与源端、目标端网络互通。
- 如果迁移任务处于增量状态，由于迁移源端和目标端间存在网络时延，无法确保校验时数据一致，如有条件，建议停止对源端的写入后再做校验。
- 业务使用Redis时往往存在给key设置过期时间，迁移时key过期行为会影响数据一致性，如果检验结果不一致，可能是由于key过期时间不一致导致。

- 云厂商DTS在迁移过程中会往目标端Redis写入临时探活key，校验时可能发现非业务数据，属于正常现象。
 
**操作步骤**：
1. 登录ECS实例，确保能连上源端和目标端Redis。
2. 部署[redis-full-check](https://github.com/alibaba/RedisFullCheck/releases?spm=a2c4g.11186623.0.0.7f6e5e58EyObOU)工具。
3. 执行以下命令进行数据校验。 
   /redis-full-check -s {源端IP}:{源端端口} -p {源端密码} -t {目标端IP}:{目标端端口} -a {目标端密码} -m 1
   表1参数说明 
   | 参数 | 参数                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            | 参数示例             |
   |:---|:---|:---|
   | -s | 源端Redis连接地址和端口。                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                               | -s 10.0.0.1:6379 |
   | -p | 源端Redis密码。                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    | -                |
   | -t | 目标端Redis连接地址和端口。                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              | -t 10.0.0.2:6379 |
   | -a | 目标端Redis密码。                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                   | -                |
   | -m | 校验模式： 1. 全量校验所有键值对。  2. 仅校验值的长度。  3. 仅校验key完整性。  4. 全量校验所有键值，但只校验大key的长度。   默认为模式2。 | -m 1             |
   | -q | 最大qps限制，默认15000。                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              | -q 5000          |
   | -d | 校验结果保存的文件名称，默认result.db。                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      | -d result.db     |
      
   
   
4. 查看校验结果文件。 
   校验默认执行三轮，输出三个校验结果文件，一般只需要看最后一个校验结果文件。
   - 执行sqlite3 result.db.3。
   
   - 执行select \* from key。
   
   - 查看是否存在异常的key。 ![](https://support.huaweicloud.com/redisug-nosql/zh-cn_image_0000002154295977.png)
     
   
   
   
   
 
