
# 升级Redis 3.0实例到高版本实例
#### 方案概述
Redis开源社区自2019年5月19日发布Redis 3.0最后一个小版本后，一直未对Redis 3.0进行更新。华为云DCS也于2021年3月发布了停售DCS Redis 3.0的公告。
鉴于Redis 3.0版本较老，开源社区已不再对其进行更新，DCS提供的Redis 4.0/5.0/6.0/7.0高版本兼容Redis 3.0，建议用户尽快将DCS Redis 3.0升级到高版本。
DCS部分区域已支持Redis 3.0一键升级到高版本的能力，如[图1]所示。具体操作请参见[升级Redis 3.0实例大版本](https://support.huaweicloud.com/usermanual-dcs/dcs_03_0017.html)。
图1升级大版本   
![](https://support.huaweicloud.com/dcs_faq/zh-cn_image_0000002343898232.png "点击放大")
如果用户所在区域不支持直接升级实例大版本，可以通过数据迁移将低版本实例中的数据迁移到高版本，从而实现Redis版本升级。本章节介绍如何通过数据迁移+交换实例IP的方式升级Redis 3.0实例到高版本。
#### 约束与限制
- DCS Redis 3.0实例支持绑定弹性IP公网访问，Redis 4.0及以上版本的实例不支持直接绑定弹性IP，公网访问方式需通过ELB实现，开启Redis 4.0及以上版本实例公网访问的方式请参考[开启Redis公网访问并获取公网访问地址](https://support.huaweicloud.com/usermanual-dcs/dcs_03_0011.html)，如果用户业务依赖公网访问，升级前请先进行评估。
- 通过数据迁移的方式升级Redis版本，对客户业务可能有以下影响：
  - 数据同步完成后，需要交换源Redis与目标Redis实例的IP地址，交换IP地址时会有一分钟内只读和30秒左右的中断。
  
  - 如果升级后实例与原实例密码不一致，数据同步完成后，需要切换访问Redis的密码，切换时需要停止业务。因此，建议升级前后实例密码保持一致。
   
- 建议在业务低峰期进行实例升级操作。
 
#### 前提条件
- 创建与Redis 3.0相同VPC和子网，相同实例类型、相同访问密码、且规格不小于原实例规格的高版本Redis实例（建议创建Redis 5.0及以上版本）。例如，用户需要将Redis 3.0 16GB主备实例升级到Redis 5.0版本，则需要提前创建一个不小于16GB的Redis 5.0主备实例。 创建Redis实例的操作，请参考[创建DCS Redis缓存实例](https://support.huaweicloud.com/usermanual-dcs/dcs-ug-0713002.html)。
  
- 手动备份Redis 3.0源实例数据。备份数据的操作，请参考[如何导出Redis实例数据？](https://support.huaweicloud.com/dcs_faq/dcs-faq-0427075.html)。
 
#### 迁移实例数据
1. 登录[分布式缓存服务管理控制台](https://console.huaweicloud.com/dcs)。
2. 在管理控制台左上角单击![](https://support.huaweicloud.com/dcs_faq/zh-cn_image_0000002012846169.png)，选择源Redis所在的区域。
3. 单击左侧菜单栏的"数据迁移"。页面显示迁移任务列表页面。
4. 单击右上角的"创建在线迁移任务"。
5. 设置迁移任务名称和描述。
6. 配置在线迁移任务虚拟机资源的VPC、子网和安全组。 
   - 迁移任务需要与源Redis和目标Redis实例网络互通，请选择与Redis实例相同的VPC。
   
   - 迁移任务创建后，会占用一个租户侧IP，即控制台上迁移任务对应的"迁移机IP"，如果目标Redis配置了IP白名单，需要放通迁移机IP。
   
   - 迁移任务所选安全组的"出方向规则"需放通源端Redis和目标端Redis的IP和端口（安全组默认情况下为全部放通，则无需单独放通），以便迁移任务的虚拟机资源能访问源Redis和目标Redis。
   
   
   
   
7. 在线迁移任务创建完成后，单击在线迁移任务右侧"操作"列的"配置"，配置在线迁移的源Redis、目标Redis等信息。
8. 迁移方法请选择"全量迁移＋增量迁移"，仅当选择"全量迁移＋增量迁移"的迁移方法时，支持通过控制台交换源端与目标端实例的IP地址。如果选择"全量迁移"，需要手动切换业务连接Redis的IP地址。
   
   表1在线迁移方法说明 
   | 迁移类型      | 描述                                                                                                                                                                                                                                                                                                                           |
   |:---|:---|
   | 全量迁移      | 该模式为Redis的一次性迁移，适用于可中断业务的迁移场景。全量迁移过程中，**如果源Redis有数据更新，这部分更新数据不会被迁移到目标Redi** **s**。                                                                                                                                                                                                                                           |
   | 全量迁移＋增量迁移 | 该模式为Redis的持续性迁移，适用于对业务中断敏感的迁移场景。增量迁移阶段通过解析日志等技术， 持续保持源Redis和目标端Redis的数据一致。 增量迁移，**迁移任务会在迁移开始后，一直保持迁移中状态，不会自动停止**。需要您在合适时间，在"操作"列单击"停止"，手动停止迁移。停止后，源端数据不会丢失，只是目标端不再写入数据。增量迁移在传输链路网络稳定情况下是秒级时延，具体的时延情况依赖于网络链路的传输质量。 |
      
   
   
9. 仅当迁移方法选择"全量迁移+增量迁移"时，支持选择是否启用"带宽限制"。 
   如果启用带宽限制功能，当数据同步速度达到带宽限制时，将限制同步速度的继续增长。
   
   
10. 选择是否"自动重连"。如开启自动重连模式，迁移过程中在遇到网络等异常情况时，会无限自动重连。 
    自动重连模式在无法进行增量同步时，会触发全量同步，增加带宽占用，请谨慎选择。
    
    
11. "源Redis实例"和"目标Redis实例"，请分别选择需要升级的Redis 3.0实例和新建的高版本Redis实例。
12. 如果源Redis和目标Redis为密码访问模式，请分别在"源Redis实例密码"和"目标Redis实例密码"处输入实例密码后，单击密码右侧的"测试连接"，检查实例密码是否正确、网络是否连通。如果源Redis和目标Redis为免密访问模式，无需输入密码，直接单击"测试连接"。
13. 在"源DB"和"目标DB"中，可以选择是否需要指定具体迁移的DB。例如源端输入5，目标端输入6时，表示迁移源Redis DB5中的数据到目标Redis的DB6。当源端不指定DB，目标端指定DB时，表示默认迁移源端的全部数据到目标端指定的DB；当目标端不指定DB时，表示默认迁移到与源端对应的DB。本次操作"源DB"和"目标DB"置空即可。
14. 单击"下一步"。
15. 确认迁移信息，然后单击"提交"，开始执行迁移任务。 
    可返回迁移任务列表中，观察对应的迁移任务的状态，迁移成功后，任务状态显示"成功"。
    - 如果出现迁移失败，建议单击迁移任务名称，进入迁移任务详情页面，通过"迁移日志"排查迁移失败的原因。
    
    - 如果是全量迁移＋增量迁移，全量迁移后会一直处于增量迁移中的状态。
    
    - 如需手动停止迁移中的任务，勾选迁移任务左侧的方框，单击迁移任务上方的"停止"，即可停止迁移。
    
    - 勾选停止迁移或迁移失败的迁移任务，单击迁移任务上方的"重启"，可重新进行迁移。如果重启迁移任务后迁移失败，建议单击"配置"，重新配置在线迁移任务后重试。
    
    - 单次最多支持勾选50个在线迁移任务，批量停止、删除、或重启迁移任务。
    
    
    
    
 
#### 迁移后验证
数据迁移前如果目标Redis中数据为空，迁移完成后，可以通过以下方式确认数据的完整性：
1. 连接源Redis和目标Redis。连接Redis的方法请参考[Redis-cli客户端连接Redis](https://support.huaweicloud.com/usermanual-dcs/dcs-ug-0713004.html)。
2. 输入info keyspace，查看keys参数和expires参数的值。 ![](https://support.huaweicloud.com/dcs_faq/zh-cn_image_0293255709.png)
   
3. 对比源Redis和目标Redis的keys参数分别减去expires参数的差值。如果差值一致，则表示数据完整，迁移正常。
注意：如果是全量迁移，迁移过程中源Redis更新的数据不会迁移到目标实例。
#### 交换DCS实例IP
当DCS源Redis与目标Redis满足以下条件时，支持交换源Redis与目标Redis的IP地址。交换实例IP后，客户端代码无需修改源端实例的访问地址，即可自动连接到目标Redis。
- 源端和目标端必须是基础版Redis，且不能是Cluster集群实例。企业版实例和Cluster集群实例不支持实例交换IP。
- 源端是Redis 3.0实例，需要先联系后台管理人员开通Redis 3.0实例交换IP的白名单，并且仅当Redis 3.0作为源端实例，目标端为Redis 4.0及以上基础版实例时，支持交换实例IP。
- 开启公网访问后的源实例或目标实例，不支持控制台交换IP，只能手动更换业务连接Redis的IP地址。
- 实例[选择迁移方法]步骤时，必须选择的是"**全量迁移＋增量迁移**"，如果是"全量迁移"的方式，则不支持交换实例IP。
- 源Redis与目标Redis实例的端口需要一致。
![](https://support.huaweicloud.com/dcs_faq/public_sys-resources/notice_3.0-zh-cn.png)
1. 交换IP过程中，会自动停止在线迁移任务。
2. 源端实例为Redis 3.0，交换IP地址时，会有一分钟内只读和30秒左右的中断。
3. 请确保您的客户端应用具备重连机制和处理异常的能力，否则在交换IP后有可能需要重启客户端应用。
4. 如果源端是主备实例，交换IP时不会交换备节点IP，请确保应用中没有直接引用备节点IP。
5. 如果应用中有直接引用域名，请选择交换域名，否则域名会挂在源实例中。
6. 请确保目标Redis和源Redis密码一致，否则交换IP后，客户端会出现密码验证错误。
7. Redis3.0实例交换IP地址后，需要将源实例的安全组配置同步至目标实例的白名单配置中。
 
1. 在"数据迁移 \> 在线迁移"页面，当迁移任务状态显示为"增量迁移中"时，单击操作列的"更多 \> 交换IP"打开交换IP弹框。
2. 在交换IP弹框中的交换域名区域，选择是否交换域名。 
   ![](https://support.huaweicloud.com/dcs_faq/public_sys-resources/note_3.0-zh-cn.png)
   - 如果客户端使用域名连接Redis，必须选择交换域名，否则客户端应用需要修改使用的域名。
   
   - 如果没有选择交换域名，则只交换实例的IP地址。
    
   
   
3. 单击"确定"，交换IP任务提交成功，当迁移任务的状态显示为"IP交换成功"，表示交换IP任务完成。
 
#### 业务功能验证
- 验证业务功能是否正常。例如，检查客户端访问Redis是否有报错。
- 观察关键性能监控指标是否异常。例如，活跃客户端连接数、每秒并发操作数、CPU使用率、内存使用率等监控参数。
 
