
# DCS数据迁移概述
DCS控制台界面支持的数据迁移方式有在线迁移和离线迁移（备份文件导入）两种方式，其中，在线迁移支持增量数据迁移。
- 在线迁移，涉及到SYNC/PSYNC命令，适用于源Redis放通了SYNC/PSYNC命令的场景。支持将源Redis中的数据全量迁移或增量迁移到目标Redis中。 进行在线迁移时，迁移执行机会向源端地址发送PSYNC命令，其原理可参考[Replication介绍](https://redis.io/topics/replication)，该命令会引起源端执行fork系统调用，对时延产生影响，其影响范围可参考[Redis官网](https://redis.io/topics/latency#latency-generated-by-fork)。
  
- 离线迁移，适用于源Redis和目标Redis网络不连通、源Redis不支持SYNC/PSYNC命令的场景。需要将数据备份文件导入到OBS，DCS从OBS桶中读取数据，将数据迁移到华为云Redis中；或直接将备份文件导入到DCS实例中。
由于用户对Redis的使用环境和场景各有差异，具体的迁移方案需要用户根据实际需求完善与细化。迁移耗时也与数据量大小、源Redis部署出处、网络带宽等相关，具体耗时需要在演练过程中记录与评估。
在迁移实例前需要分析业务系统使用到的缓存相关命令（DCS实例支持的命令请参见[开源命令兼容性](https://support.huaweicloud.com/productdesc-dcs/dcs-pd-200312003.html)），在演练阶段对命令逐一验证。如有需要，可[提交工单](https://console.huaweicloud.com/ticket/#/ticketindex/createIndex)联系客服。
![](https://support.huaweicloud.com/usermanual-dcs/public_sys-resources/caution_3.0-zh-cn.png)
- 当前数据迁移功能为公测免费，开始收费时间会另行通知。
- 数据迁移是一项重要且严肃的工作，准确性与时效性要求非常高，且与具体业务和操作环境相关。
- 本文提供的案例仅供参考，实际迁移应考虑具体的业务场景和需求，请勿直接套用。
- 本文提供的迁移操作，部分命令中包含了实例密码，这会导致密码记录到操作系统中，请注意保护密码不被泄露，并及时清除历史操作记录。
 
#### DCS支持的迁移能力
- **DCS Redis**：指的是华为云分布式缓存服务的Redis。
- **自建Redis**：指的是在云上、其他云厂商、本地数据中心自行搭建Redis。
- √表示支持，×表示不支持。
- 源端为**其他云厂商** **Redis** 时，只有在满足和目标**DCS Redis** 的网络相通、源Redis已放通SYNC和PSYNC命令这两个前提下，才可以使用在线迁移的方式，将源Redis中的数据全量迁移或增量迁移到目标Redis中，但其他云厂商的部分实例可能存在无法在线迁移的问题，可以采用离线或其它迁移方案，具体请参考[迁移方案说明](https://support.huaweicloud.com/usermanual-dcs/dcs-migration-090626002.html)。
表1DCS支持的迁移能力 
|    迁移类型    |                                                                                               源端                                                                                               |    目标端：DCS服务    |||
|    迁移类型    |                                                                                               源端                                                                                               |
|---|---|---|---|---|
| 单机/主备/读写分离 | Proxy集群                                                                                                                                                                                        | Cluster集群 |
| **备份文件导入** | AOF文件                                                                                                                                                                                          | √         | √ | √ |
| **备份文件导入** | RDB文件                                                                                                                                                                                          | √         | √ | √ |
| **在线迁移**   | DCS Redis：单机/主备/读写分离 说明： 当源端为读写分离实例时，仅支持"源Redis类型"选择"云服务Redis"。 | √         | √ | √ |
| **在线迁移**   | DCS Redis：Proxy集群 说明： 当源端为Proxy集群实例时，仅支持"源Redis类型"选择"云服务Redis"。  | √         | √ | √ |
| **在线迁移**   | DCS Redis：Cluster集群                                                                                                                                                                            | √         | √ | √ |
| **在线迁移**   | 自建Redis                                                                                                                                                                                        | √         | √ | √ |
| **在线迁移**   | 其他云厂商Redis                                                                                                                                                                                     | √         | √ | √ |
   
#### 迁移流程
图1迁移流程示意图   
![](https://support.huaweicloud.com/usermanual-dcs/zh-cn_image_0000001894069500.png "点击放大")
1. 迁移评估。
   获取当前待迁移的缓存数据信息（可参考[表2]记录以下信息），包括：
   - 实例数量
   
   - 各实例配置的数据库数量
   
   - 各数据库的key数量
   
   - 业务用到的数据库
   
   - 各实例数据占用空间
   
   - Redis版本
   
   - Redis实例类型
   
   - 业务与各实例的连接关系
    
   ![](https://support.huaweicloud.com/usermanual-dcs/public_sys-resources/note_3.0-zh-cn.png)
   - 连接待迁移Redis后，执行**info keyspace**命令可以查看数据分布情况，确认有数据的数据库编号以及数据库中的key数量。记录各数据库存储的key的数量可供迁移验证对比。
   
   - 连接待迁移Redis后，执行**info memory**命令，参考"used_memory_human"的返回值可以查看源Redis数据占用空间。请确认用于中转的ECS可用磁盘空间和目标实例规格与剩余可用内存是否足够（不小于源Redis数据大小）。
    
   根据获取到的信息规划DCS目标缓存实例，包括：
   - 缓存实例数量
   
   - 缓存实例的内存规格（不小于源Redis内存规格）
   
   - 缓存实例的版本（不低于源Redis版本）
   
   - 缓存实例类型
   
   - 缓存实例与业务所属网络规划（VPC/子网/安全组）
     
2. 迁移准备。
   当完成迁移评估后，需要准备以下内容：
   1. 移动存储介质 用于在网络不通（自建数据中心场景）的情况下以复制方式传输数据。
      
   
   2. 网络资源 按照业务规划创建虚拟私有云与子网。
      
   
   3. 服务器资源 [购买弹性云服务器](https://console.huaweicloud.com/ecm/?locale=zh-cn#/ecs/createVm)，承载Redis客户端。用于导出或导入缓存数据。
      弹性云服务器的规格建议不低于8C16G。
      
   
   4. DCS缓存实例 按照迁移规划[购买缓存实例](https://console.huaweicloud.com/dcs/#/dcs/createCache)，如果实例数量超过用户默认配额，请[提交工单](https://console.huaweicloud.com/ticket/#/ticketindex/createIndex)联系客服。
      
   
   5. 相关工具安装 包括SSH、FTP等工具。
      
   
   6. 信息收集 信息收集包括参与人员联系方式，弹性云服务器登录信息，缓存实例信息与数据库信息等。
      
   
   7. 整体迁移方案 制定总体迁移计划，包括人员安排、演练方案、迁移方案、验证方案、业务切换方案、回退方案。
      每一份方案需要有细化到可执行的操作步骤，以及可标记任务结束的里程碑。
      
     
3. 迁移演练。
   迁移演练的主要目的如下：
   1. 验证迁移工具与过程的可行性。
   
   2. 发掘迁移过程中遇到的问题，并做出有效的改进。
   
   3. 评估迁移耗时。
   
   4. 优化迁移步骤，验证部分工作并行的可行性，提高迁移效率。
     
4. 备份。 在迁移前，需要先行备份，包括但不限于缓存数据、Redis配置文件，用于应急。
   
5. 迁移。 在完成一到两轮的迁移演练，并根据演练过程中发现的问题进行优化后，正式开始数据迁移。
   迁移过程应该细化到每一步可执行的步骤，有明确的开始与结束确认动作。
   
6. 数据验证。
   数据验证可以包括以下几方面：
   - 各数据库的key分布是否与原来或者迁移预期一致。
   
   - 关键Key的检查。
   
   - Key的过期时间检查。
   
   - 实例是否能够正常备份和恢复。
     
7. 业务切换。
   1. 当缓存数据完成迁移，且验证无误后，业务可以正式切换缓存数据的连接，恢复对外。
   
   2. 如果涉及到缓存数据库编号的变化，业务还需修改编号的选择配置。
   
   3. 如果业务整体由数据中心或其他云厂商迁移到华为云，业务和缓存数据的迁移可并行。
    
8. 业务验证。
   1. 业务应用与DCS缓存实例的连通。
   
   2. 通过业务操作对缓存数据的增删改查。
   
   3. 如果条件满足，进行压测，确认性能满足业务峰值压力。
    
9. 回退。 当遇到演练中没有及时发现的问题，导致数据迁移后无法供业务使用，且短期无法解决，则涉及到业务回退。
   由于源Redis数据仍然存在，因此只需业务完成回退，重新接入源Redis实例即可。
   在完成回退后，可继续从演练甚至准备阶段重新开始，解决问题。
   
   
评估和准备阶段收集的信息填写，请参考下表：
 表2迁移信息收集 
| 迁移源                                                                      | 信息项           | 说明                                                                                                                                                                                                                                |
|:---|:---|:---|
| 源Redis （列出所有待迁移的实例）                     | 源Redis实例的IP地址 | -                                                                                                                                                                                                                                 |
| 源Redis （列出所有待迁移的实例）                     | Redis访问密码（如有） | -                                                                                                                                                                                                                                 |
| 源Redis （列出所有待迁移的实例）                     | 总数据量大小        | 执行**info memory**命令，参考used_memory_human的值得到总数据量大小。 用于评估迁移方案、DCS缓存实例规格、ECS可用磁盘空间等是否满足，以及预估迁移耗时（业务中断时间）。                                                                                               |
| 源Redis （列出所有待迁移的实例）                     | 不为空的数据库编号     | info keyspace命令查询得到。 用于确认迁移是否涉及多数据库，非AOF文件方式迁移，部分开源工具可能需要逐库处理导出和导入。 DCS缓存实例中，单机和主备实例支持0-255共256个数据库，集群默认只提供一个数据库。                                               |
| 源Redis （列出所有待迁移的实例）                     | 各数据库的key数量    | 用于迁移后进行数据完整性验证。                                                                                                                                                                                                                   |
| 源Redis （列出所有待迁移的实例）                     | 数据类型          | CDM迁移服务当前支持Hash和String两种数据格式，如果源数据含有list、set之类数据，请采用第三方迁移工具。                                                                                                                                                                      |
| 华为云ECS（弹性云服务器） 如果待迁移实例较多，可准备多台ECS并行迁移   | 弹性IP地址        | 选择与DCS缓存实例网络互通的弹性云服务器进行数据导入，确保导入过程网络稳定。 带宽建议选取高配，提升数据传输效率。                                                                                                                                        |
| 华为云ECS（弹性云服务器） 如果待迁移实例较多，可准备多台ECS并行迁移   | 系统登录用户/密码     | -                                                                                                                                                                                                                                 |
| 华为云ECS（弹性云服务器） 如果待迁移实例较多，可准备多台ECS并行迁移   | CPU/内存        | 部分迁移工具支持多线程并行导入，使用高规格ECS，能提升导入速度。                                                                                                                                                                                                 |
| 华为云ECS（弹性云服务器） 如果待迁移实例较多，可准备多台ECS并行迁移   | 可用磁盘空间        | ECS需要预留足够的可用磁盘空间，存储压缩文件以及解压后的缓存数据文件。 注：为提高数据传输效率，对于较大的数据文件，建议压缩后再传输到弹性云服务器。                                                                                                                       |
| DCS缓存实例 （根据源Redis实例数与数据量情况选择合适的规格与实例数） | 实例连接地址        | -                                                                                                                                                                                                                                 |
| DCS缓存实例 （根据源Redis实例数与数据量情况选择合适的规格与实例数） | 实例连接端口        | -                                                                                                                                                                                                                                 |
| DCS缓存实例 （根据源Redis实例数与数据量情况选择合适的规格与实例数） | 实例访问密码        | -                                                                                                                                                                                                                                 |
| DCS缓存实例 （根据源Redis实例数与数据量情况选择合适的规格与实例数） | 实例类型          | -                                                                                                                                                                                                                                 |
| DCS缓存实例 （根据源Redis实例数与数据量情况选择合适的规格与实例数） | 实例规格/可用内存     | -                                                                                                                                                                                                                                 |
| 网络配置                                                                     | VPC           | 提前规划VPC，确保应用服务、DCS缓存实例等处于相同VPC中。                                                                                                                                                                                                  |
| 网络配置                                                                     | 子网            | -                                                                                                                                                                                                                                 |
| 网络配置                                                                     | 安全组或白名单       | 由于Redis 3.0和Redis 4.0及以上版本实例部署模式不一样，控制访问方式也不一样，需要制定相应的安全组或白名单规则，确保网络连通。具体请参考[配置安全组](https://support.huaweicloud.com/dcs_faq/dcs-faq-0713002.html)或者[配置白名单](https://support.huaweicloud.com/usermanual-dcs/dcs-ug-190812001.html)。 |
| ...                                                                      | ...           | *其他配置信息*。                                                                                                                                                                                                                         |
   
