
# 使用备份文件离线迁移DCS Redis实例
DCS支持通过备份文件导入的方式离线迁移DCS实例间的数据。
#### 约束与限制
- 开启了SSL的目标实例不支持数据迁移，需要关闭目标实例SSL后再进行迁移，开启或关闭SSL的操作请参考[配置Redis SSL数据加密传输](https://support.huaweicloud.com/usermanual-dcs/dcs-ug-023129.html)。
- 如果目标实例规格小于源实例规格，可能会导致离线迁移失败。
 
 #### 前提条件
- 源Redis实例已执行数据备份并备份成功。
  - 如果是[通过Redis实例离线迁移]，无需下载备份文件到本地，备份数据请参考[手动备份DCS实例数据](https://support.huaweicloud.com/usermanual-dcs/dcs-ug-0312032.html)。
  
  - 如果是[通过OBS桶离线迁移]，需要下载备份文件到本地，请参考[下载DCS实例备份文件](https://support.huaweicloud.com/usermanual-dcs/dcs-ug-0312034.html)。
   
- 已准备目标Redis实例。如果您还没有目标Redis实例，请先创建Redis，参考[购买Redis实例](https://support.huaweicloud.com/usermanual-dcs/dcs-ug-0713002.html)。
  目前Redis高版本支持兼容低版本，因此，同版本或低版本可以迁移到高版本Redis，目标端创建的实例版本不要低于源端Redis版本。
  
- 请确保目标Redis有足够的存储空间，迁移实例前建议清空目标Redis中的数据，清空实例数据的操作请参考[清空Redis实例数据](https://support.huaweicloud.com/usermanual-dcs/dcs-ug-0312018.html)。如果没有清空实例数据，数据迁移后，目标Redis与源Redis实例重复的数据会被覆盖，源Redis没有、目标Redis有的数据会保留。
 
#### 使用备份文件离线迁移DCS Redis实例
- 如果您需要迁移的源Redis与目标Redis为DCS相同账号下相同Region的实例，且源Redis实例非单机实例时，离线迁移请参考[通过Redis实例离线迁移]。
- 如果您需要迁移的源Redis与目标Redis为DCS不同账号或不同Region的实例，或源Redis实例为单机实例时，离线迁移请参考[通过OBS桶离线迁移]。
 
- [通过Redis实例离线迁移]
  
  1. 登录[分布式缓存服务管理控制台](https://console.huaweicloud.com/dcs)。
  
  2. 在管理控制台左上角单击![](https://support.huaweicloud.com/usermanual-dcs/zh-cn_image_0000001549115173.png)，选择源Redis和目标Redis所在的区域。
  
  3. 单击左侧菜单栏的"数据迁移"。页面显示迁移任务列表页面。
  
  4. 单击右上角的"创建备份导入任务"，进入创建备份导入任务页面。
  
  5. 设置迁移任务名称和描述。 
     任务名称请以字母开头，长度不小于4位且不超过64位。任务名称只能包含字母、数字、中划线、下划线。
     
     
  
  6. 源数据"数据来源"选择"Redis实例"。
  
  7. 在"源Redis实例"中选择需要迁移的源端实例。
  
  8. 根据需要指定"源DB（可选）"，您可以指定源Redis备份文件某一个DB中的数据，例如输入5时，则只迁移DB5中的数据；无需指定DB时，请保持置空，即迁移全部DB。
  
  9. 选择"是否多DB Proxy集群"，只有当源Redis数据为DCS Proxy集群实例，且开启了多DB（Proxy实例multi-db参数值为yes）时选择。
  
  10. 在"备份记录"中选择需要迁移的备份文件。
  
  11. "目标Redis实例"请选择[前提条件]中准备的目标Redis。
  
  12. 如果目标Redis是密码访问模式，请输入密码后，单击"测试连接"，检查密码是否正确。免密访问的实例，请直接单击"测试连接"。
  
  13. 根据需要指定"目标DB（可选）"，您可以指定迁移数据到目标Redis的某一个DB中，例如输入5时，则迁移到目标Redis的DB5；不填表示不指定，默认迁移到与源端相同的DB中。 
      ![](https://support.huaweicloud.com/usermanual-dcs/public_sys-resources/caution_3.0-zh-cn.png)
      当源端为多DB，目标端为单DB的DCS实例时（单DB的实例只有DB0），需要源端的所有数据都在DB0，或者指定仅迁移源端某一DB中的数据并将目标端DB指定为0，否则会迁移失败。DCS Redis的DB数请参见[Redis实例是否支持多DB方式？](https://support.huaweicloud.com/dcs_faq/dcs-faq-0427028.html)。
      
      
  
  14. 单击"立即创建"。
  
  15. 确认迁移信息，然后单击"提交"，开始创建迁移任务。 
      返回迁移任务列表，观察对应的迁移任务的状态，任务状态显示"成功"时，迁移成功。
      
      
   
- [通过OBS桶离线迁移]
  
  通过OBS桶离线迁移，您需要先将源Redis的数据备份下载到本地，然后将备份文件上传到与DCS目标Redis同一账号相同区域下的OBS桶中，再创建备份导入迁移任务，从OBS桶中读取数据并将数据迁移到目标Redis中。
  - 上传OBS桶的备份文件支持.aof、.rdb、.zip、.tar.gz四种格式，您可以直接上传.aof和.rdb文件，也可以将.aof和.rdb文件压缩成.zip或.tar.gz文件，然后将压缩后的文件上传到OBS桶。
  
  - 如果源端实例是集群Redis，每个备份文件对应集群中的一个分片，需要下载所有的备份文件，然后逐个上传到OBS桶。在迁移时，需要把所有分片的备份文件选中。
  
  
  1. **在** **目标Redis实例所在的账号和区域** **下创建OBS桶。** 如果已有符合条件的OBS桶，无需重新创建。
     
     在创建过程中，以下两个参数请按要求设置，其他详细的创建步骤，请参考[创建桶](https://support.huaweicloud.com/usermanual-obs/zh-cn_topic_0045829088.html)章节。
     - 选择"区域"。 OBS桶所在区域必须跟Redis目标实例所在区域相同。
       
     
     - 设置"默认存储类别"，存储类别支持"标准存储"和"低频访问存储"。 请不要选择"归档存储"，否则会导致备份文件迁移失败。
       
      
     
     
  
  2. 上传备份文件到OBS桶。如果上传的备份文件小于5GB，请按照以下步骤通过OBS控制台上传备份文件。如果上传的备份文件大于5GB，请按照OBS服务提供的[超过5GB如何上传](https://support.huaweicloud.com/usermanual-obs/zh-cn_topic_0045829661.html)操作指导执行。
     
     1. 在OBS管理控制台的桶列表中，单击创建的桶名称，进入"概览"页面。
     
     2. 在左侧导航栏，单击"对象"。
     
     3. 在"对象"页签下，单击"上传对象"，系统弹出"上传对象"窗口。
     
     4. 指定对象的存储类别。 请不要选择"归档存储"，否则会导致备份文件迁移失败。
        
     
     5. 上传对象。 您可以拖拽本地文件或文件夹至"上传对象"区域框内添加待上传的文件，也可以通过单击"上传对象"区域框内的"添加文件"，选择本地文件添加。
        单次最多支持100个文件同时上传，总大小不超过5GB。
        图1上传对象   
        ![](https://support.huaweicloud.com/usermanual-dcs/zh-cn_image_0000002284623580.png "点击放大") 
     
     6. 选择服务端加密方式，支持选择"SSE-KMS"、"SSE-OBS"或"不开启加密"，详情请参见[服务端加密](https://support.huaweicloud.com/usermanual-obs/obs_03_0088.html)。
     
     7. 单击"上传"。
     
     
     
     
  
  3. 进入分布式缓存服务管理控制台。
  
  4. 单击左侧菜单栏的"数据迁移"进入数据迁移页面。
  
  5. 单击右上角的"创建备份导入任务"。
  
  6. 设置迁移任务名称和描述。 
     任务名称请以字母开头，长度不小于4位且不超过64位。任务名称只能包含字母、数字、中划线、下划线。
     
     
  
  7. 在"源数据"区域，"数据来源"选择"OBS桶"，在"OBS桶名"中选择已上传备份文件的OBS桶。
  
  8. 根据需要指定"源DB（可选）"，您可以指定源端备份文件某一个DB中的数据，例如输入5时，则只迁移DB5中的数据；无需指定DB时，请保持置空，即迁移全部DB。
  
  9. 选择"是否多DB Proxy集群"，只有当源Redis数据为DCS Proxy集群实例，且开启了多DB（Proxy实例multi-db参数值为yes）时选择。
  
  10. 单击"添加备份文件"，选择需要迁移的备份文件。
  
  11. 在"目标数据"区域，选择[前提条件]中准备的"目标Redis实例"。
  
  12. 如果目标Redis是密码访问模式，请输入密码后，单击"测试连接"，检查密码是否正确。免密访问的实例，请直接单击"测试连接"。
  
  13. 根据需要指定"目标DB（可选）"，您可以指定迁移数据到目标Redis的某一个DB中，例如输入5时，则迁移到目标Redis的DB5；不填表示不指定，默认迁移到与源端相同的DB中。 
      ![](https://support.huaweicloud.com/usermanual-dcs/public_sys-resources/caution_3.0-zh-cn.png)
      当源端为多DB，目标端为单DB的DCS实例时（单DB的实例只有DB0），需要源端的所有数据都在DB0，或者指定仅迁移源端某一DB中的数据并将目标端DB指定为0，否则会迁移失败。DCS Redis的DB数请参见[Redis实例是否支持多DB方式？](https://support.huaweicloud.com/dcs_faq/dcs-faq-0427028.html)。
      
      
  
  14. 单击"立即创建"。
  
  15. 确认迁移信息，然后单击"提交"，开始创建迁移任务。 
      可返回迁移任务列表中，观察对应的迁移任务的状态，迁移成功后，任务状态显示"成功"。
      
      
   
#### 迁移后验证
迁移完成后，可以通过以下方式确认数据的完整性：
1. 连接源Redis和目标Redis，连接Redis的方式请参考[Redis-cli客户端连接Redis](https://support.huaweicloud.com/usermanual-dcs/dcs-ug-0713004.html)。
2. 分别对源Redis和目标Redis执行**info keyspace** ，查看keys参数和expires参数的值。
   1. 如果是单机/主备/读写分离/proxy集群实例，执行以下命令：
      ```
      redis-cli -h [ip] -p [port] [-a {password}] info keyspace
      ```
      图2查看单机实例数据   
      ![](https://support.huaweicloud.com/usermanual-dcs/zh-cn_image_0000002530812198.png "点击放大") 
   
   2. 如果是集群实例也可以逐个分片master节点执行info keyspace，这里推荐使用redis-cli 6+版本执行以下命令获取所有redis节点keyspace：
      ```
      redis-cli [-a {password}] --cluster call {分片ip}:{分片port} info keyspace
      ```
      图3查看集群实例数据   
      ![](https://support.huaweicloud.com/usermanual-dcs/zh-cn_image_0000002561892235.png "点击放大") 
    
3. 对比源Redis和目标Redis的keys参数分别减去expires参数的差值（集群实例需要除以2）。如果差值一致，则表示数据完整，迁移正常。
 
#### 相关文档
- 数据迁移相关的API文档，请参见[数据迁移](https://support.huaweicloud.com/api-dcs/DataMigrationManagement.html)。
- 数据迁移相关的常见问题：
  - [DCS实例是否兼容低版本Redis迁移到高版本](https://support.huaweicloud.com/dcs_faq/dcs-migration-0715005.html)
  
  - [迁移或导入备份数据时，相同的Key会被覆盖吗？](https://support.huaweicloud.com/dcs_faq/dcs-faq-11185.html)
  
  - [迁移故障处理](https://support.huaweicloud.com/dcs_faq/dcs-migration-022052301.html)
  
  - [数据迁移失败问题排查](https://support.huaweicloud.com/dcs_faq/dcs-migration-0715004.html)
  
  - [Cluster集群实例使用内置key且跨slot的Lua脚本时迁移失败](https://support.huaweicloud.com/dcs_faq/dcs_07_0001.html)
  
  - [一个数据迁移能迁移到多个目标实例么？](https://support.huaweicloud.com/dcs_faq/dcs-faq-220317.html)
   
 
