
# SSDB到GeminiDB Redis的迁移
SSDB是一款使用C/C++语言开发的高性能NoSQL数据库，和Redis具有相似的API，支持KV，list，map(hash)，zset(sorted set)，qlist(队列)等数据结构，因此得到了广泛的应用。SSDB是一个持久化的KV存储系统，底层使用leveldb作为存储引擎。其业务直接与LevelDB交互，Compaction等操作会对业务读写造成直接的影响。 GeminiDB Redis接口是一款兼容Redis生态的云原生NoSQL数据库，基于共享存储池的多副本强一致机制，以保证数据的安全性和可靠性。GeminiDB Redis接口使用RocksDB作为存储引擎，其性能与leveldb相比有了很大的提升, 并解决了leveldb主动限制写的问题，同时实现了冷热分离，减小了存储层的操作对性能造成的影响。
本章节主要介绍SSDB到GeminiDB Redis接口的迁移方案。
#### 迁移原理
ssdb-port作为源端SSDB数据库的主节点的从节点（replica）运行，通过主从复制的方式进行数据迁移。将获取到的数据解析、转换为Redis支持的格式，并发送到配置文件中指定的Redis实例，迁移过程如下图所示。全量同步完成后，SSDB中新增的数据也会同步到Redis实例中。
图1迁移原理   
![](https://support.huaweicloud.com/redisug-nosql/zh-cn_image_0000001699264436.png "点击放大")
#### 使用须知
- ssdb-port作为SSDB主节点的从节点，只读取全量和增量数据，无数据受损风险。
- 由于在源端使用ssdb-port迁移工具，源端SSDB性能会受到一定的影响。
- 全量迁移和增量迁移可以不停服，数据全部迁入GeminiDB Redis后需要短暂停服。
 
#### 前提条件
在GeminiDB Redis实例所在的VPC网络中创建ECS实例，部署迁移工具ssdb-port，保证源端SSDB实例和目标端GeminiDB Redis实例网络互通。
#### 操作步骤
如需进行SSDB到GeminiDB Redis的迁移，您可以在管理控制台右上角，选择"[工单 \> 新建工单](https://console.huaweicloud.com/ticket/#/ticketindex/createIndex)"，联系客服进行处理。
#### 迁移后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)
     
   
   
   
   
 
#### 迁移性能参考
- 环境：源端SSDB和ssdb-port同时部署在华为云4U16GB的弹性云服务器上，目标端为8U16GB，3节点GeminiDB Redis实例。
- 预置数据：使用memtier_benchmark工具预置100GB数据。
- 迁移性能：约3000qps。
 
