文档首页/ 分布式缓存服务 DCS/ 用户指南/ 迁移实例数据/ DCS实例间迁移/ 使用迁移任务在线迁移DCS Redis实例
更新时间:2024-10-30 GMT+08:00

使用迁移任务在线迁移DCS Redis实例

在满足DCS源Redis和目标Redis的网络相通、源Redis放通SYNC和PSYNC命令这两个前提下,支持使用在线迁移的方式,将DCS源Redis中的数据全量或增量迁移到目标Redis中。

在线迁移,相当于临时给源端Redis增加一个从节点并且做一次全量同步到迁移机,建议在业务低峰期执行迁移,否则可能导致源端实例CPU瞬时冲高,时延增大。

约束与限制

  • 在线迁移不支持公网方式直接迁移。
  • 在迁移之前,请先阅读迁移方案概览,选择正确的迁移方案,了解当前DCS支持的在线迁移能力,选择适当的目标实例。
  • 将高版本Redis实例数据迁移到低版本Redis实例可能失败。
  • 如果是单机/主备等多DB的源实例迁移到Proxy集群实例,Proxy集群默认仅有一个DB0,请先确保源实例DB0以外的DB是否有数据,如果有,请先参考Proxy集群开启多DB的使用限制及操作方式开启Proxy集群多DB。
  • 如果是单机/主备等多DB的源端实例迁移到Cluster集群实例,Cluster集群不支持多DB,仅有一个DB0,请先确保源端实例DB0以外的DB是否有数据,如果有,请将数据转存到DB0,否则会出现迁移失败,将数据转存到DB0的操作请参考使用Rump在线迁移
  • 进行在线迁移时,建议将源端实例的参数repl-timeout配置为300秒,client-output-buffer-limit配置为实例最大内存的20%。

前提条件

  • 如果您还没有目标Redis,请先创建,创建操作,请参考购买Redis实例
  • 如果您已有目标Redis,则不需要重复创建,为了对比迁移前后数据及预留足够的内存空间,建议在数据迁移之前清空目标实例数据,清空操作请参考清空Redis实例数据

    如果没有清空实例数据,数据迁移后,目标Redis与源Redis实例重复的数据会被覆盖,源Redis没有、目标Redis有的数据会保留。

创建在线迁移任务

  1. 登录分布式缓存服务管理控制台

    如果源Redis与目标Redis所属不同账号下,请使用源Redis所在的账号登录DCS。

  2. 在管理控制台左上角单击,选择源Redis所在的区域。

    仅当在线迁移任务与源Redis为相同账号下相同区域时,在线迁移时选择的源端Redis会自动放通源Redis的SYNC和PSYNC命令。否则无法进行在线迁移。

  3. 单击左侧菜单栏的“数据迁移”。页面显示迁移任务列表页面。
  4. 单击右上角的“创建在线迁移任务”。
  5. 设置迁移任务名称和描述。

    任务名称请以字母开头,长度不小于4位且不超过64位。任务名称只能包含字母、数字、中划线、下划线。

  6. 配置在线迁移任务虚拟机资源的虚拟私有云(VPC)、子网和安全组。

    • 请选择与源Redis或目标Redis相同的VPC。
    • 创建的在线迁移任务会占用一个租户侧IP,即控制台上迁移任务对应的“迁移IP”。如果源端Redis或目标端Redis配置了白名单,需确保配置了迁移IP或关闭白名单限制。
    • 迁移任务所选安全组的“出方向规则”需放通源端Redis和目标端Redis的IP和端口(安全组默认情况下为全部放通,则无需单独放通),以便迁移任务的虚拟机资源能访问源Redis和目标Redis。

检查网络

  1. 检查源Redis、目标Redis、迁移任务资源所在VPC是否在同一个VPC内。

    如果是,则执行配置在线迁移任务;如果不是,执行2

  2. 检查源Redis的VPC、目标Redis的VPC、迁移任务资源所在VPC的网络是否打通,确保迁移任务的虚拟机资源能访问源Redis和目标Redis。

    如果已打通,则执行配置在线迁移任务;如果没打通,则执行3

  3. 执行相应操作,打通网络。

    • 当源Redis和目标Redis都属于DCS同一Region,请参考VPC对等连接说明创建对等连接,打通网络。
    • 当源Redis和目标Redis属于DCS不同Region,请参考云连接创建云连接,打通网络。

配置在线迁移任务

  1. 创建完在线迁移任务之后,单击该迁移任务右侧的“配置”,配置在线迁移的源Redis、目标Redis等信息。
  2. 选择迁移方法。

    支持“全量迁移”和“全量迁移+增量迁移”两种,“全量迁移”和“全量迁移+增量迁移”的功能及限制如表1所示。

    如果实例迁移后需要交换DCS实例IP,迁移方法必须选择“全量迁移+增量迁移”。

    表1 在线迁移方法说明

    迁移类型

    描述

    全量迁移

    该模式为Redis的一次性迁移,适用于可中断业务的迁移场景。全量迁移过程中,如果源Redis有数据更新,这部分更新数据不会被迁移到目标Redis

    全量迁移+增量迁移

    该模式为Redis的持续性迁移,适用于对业务中断敏感的迁移场景。增量迁移阶段通过解析日志等技术, 持续保持源Redis和目标端Redis的数据一致。

    增量迁移,迁移任务会在迁移开始后,一直保持迁移中状态,不会自动停止。需要您在合适时间,在“操作”列单击“停止”,手动停止迁移。停止后,源端数据不会丢失,只是目标端不再写入数据。增量迁移在传输链路网络稳定情况下是秒级时延,具体的时延情况依赖于网络链路的传输质量。

    图1 选择迁移方法

  3. 仅当迁移方法选择“全量迁移+增量迁移”时,支持选择是否启用“带宽限制”。

    如果启用带宽限制功能,当数据同步速度达到带宽限制时,将限制同步速度的继续增长。

  4. 选择是否“自动重连”。如开启自动重连模式,迁移过程中在遇到网络等异常情况时,会无限自动重连。

    自动重连模式在无法进行增量同步时,会触发全量同步,增加带宽占用,请谨慎选择。

  5. 分别配置“源Redis”和“目标Redis”。

    1. 配置“源Redis类型”和“源Redis实例”:“源Redis类型”请选择“云服务Redis”,并在“源Redis实例”处选择需要迁移的源Redis。
    2. 配置“目标Redis类型”和“目标Redis实例”:
      • 如果目标Redis与迁移任务处于相同VPC,或处于同一区域下已打通网络的不同VPC,“目标Redis类型”请选择“云服务Redis”,并在“目标Redis实例”处选择需要迁移的目标Redis。
      • 如果目标Redis与迁移任务处于不同区域,“目标Redis类型”请选择“自建Redis”,并在“目标Redis实例”处输入目标Redis的IP地址和端口。如果目标Redis为Cluster集群,需要输入集群所有主节点的IP端口,用英文逗号隔开。例如:192.168.1.1:6379,192.168.0.0:6379
    3. 分别配置“源Redis实例密码”和“目标Redis实例密码”:如果是密码访问模式实例,在输入连接实例的密码后,单击密码右侧的“测试连接”,检查实例密码是否正确、网络是否连通。如果是免密访问的实例,请直接单击“测试连接”。
    4. 在“源DB”或“目标DB”中,您可以选择是否需要指定具体迁移的DB。例如源端输入5,目标端输入6时,表示迁移源Redis DB5中的数据到目标Redis的DB6。当源端不指定DB,目标端指定DB时,表示默认迁移源端的全部数据,到目标端指定的DB;当目标端不指定DB时,表示默认迁移到与源端对应的DB。
      • 当源端为多DB,目标端为单DB的DCS实例时(单DB的实例只有DB0),需要源端的所有数据都在DB0,或者指定仅迁移源端某一DB中的数据并将目标端DB指定为0,否则会迁移失败。
      • DCS Redis的DB数请参见Redis实例是否支持多DB方式?

  6. 单击“下一步”。
  7. 确认迁移信息,然后单击“提交”,开始执行迁移任务。

    可返回迁移任务列表中,观察对应的迁移任务的状态,迁移成功后,任务状态显示“成功”。

    如果出现迁移失败,建议单击迁移任务名称,进入迁移任务详情页面,通过“迁移日志”排查迁移失败的原因。

    • 如果是全量迁移+增量迁移,全量迁移后会一直处于增量迁移中的状态。
    • 如需手动停止迁移中的任务,勾选迁移任务左侧的方框,单击迁移任务上方的“停止”,即可停止迁移。
    • 勾选停止迁移或迁移失败的迁移任务,单击迁移任务上方的“重启”,可重新进行迁移。如果重启迁移任务后迁移失败,建议单击“配置”,重新配置在线迁移任务后重试。
    • 单次最多支持勾选50个在线迁移任务,批量停止、删除、或重启迁移任务。

迁移后验证

迁移完成后,可以通过以下方式确认数据的完整性:

  1. 连接源Redis和目标Redis,连接Redis的方式请参考Redis-cli客户端连接Redis
  2. 分别对源Redis和目标Redis执行info keyspace,查看keys参数和expires参数的值。
    图2 查看实例数据
  3. 对比源Redis和目标Redis的keys参数分别减去expires参数的差值。如果差值一致,则表示数据完整,迁移正常。

如果是全量迁移,迁移过程中源Redis更新的数据不会迁移到目标实例。

交换DCS实例IP(可选)

当DCS源Redis与目标Redis满足以下条件时,支持交换源Redis与目标Redis的IP地址。交换实例IP后,客户端代码无需修改源端实例的访问地址,即可自动连接到目标Redis。

满足交换实例IP的前提条件:

  • Redis 4.0及以上版本的基础版实例支持实例交换IP,企业版实例不支持实例交换IP
  • 如果是Redis 3.0实例,需要先联系后台管理人员开通Redis 3.0实例交换IP的白名单,并且仅当Redis 3.0作为源端实例,目标端为Redis 4.0/5.0/6.0基础版实例时,支持交换实例IP。
  • 开启公网访问后的源实例或目标实例,不支持交换IP。
  • 源Redis与目标Redis必须是单机、主备、读写分离或Proxy集群实例,Cluster集群实例不支持交换实例IP
  • 实例选择迁移方法步骤时,必须选择的是“全量迁移+增量迁移”,如果是“全量迁移”的方式,则不支持交换实例IP。
  • 源Redis与目标Redis实例的端口需要一致。
  1. 交换IP过程中,会自动停止在线迁移任务。
  2. 交换实例IP地址时,会有一分钟内只读和秒级的闪断。如果源端实例为Redis 3.0,交换IP地址时,会有一分钟内只读和30秒左右的中断。
  3. 请确保您的客户端应用具备重连机制和处理异常的能力,否则在交换IP后有可能需要重启客户端应用。
  4. 源实例和目标实例不在同一子网时,交换IP地址后,会更新实例的子网信息。
  5. 如果源端是主备实例,交换IP时不会交换备节点IP,请确保应用中没有直接引用备节点IP。
  6. 如果应用中有直接引用域名,请选择交换域名,否则域名会挂在源实例中。
  7. 请确保目标Redis和源Redis密码一致,否则交换IP后,客户端会出现密码验证错误。
  8. 当源实例配置了白名单时,则在进行IP交换前,保证目标实例也配置同样的白名单。
  9. Redis3.0实例交换IP地址后,需要将源实例的安全组配置同步至目标实例的白名单配置中。
  1. 在“数据迁移>在线迁移”页面,当迁移任务状态显示为“增量迁移中”时,单击操作列的“更多 > 交换IP”打开交换IP弹框。
  2. 在交换IP弹框中,在交换域名区域,选择是否交换域名。

    • 如果客户端使用域名连接Redis,必须选择交换域名,否则客户端应用需要修改使用的域名。
    • 如果没有选择交换域名,则只交换实例的IP地址。

  3. 单击“确定”,交换IP任务提交成功,当迁移任务的状态显示为“IP交换成功”,表示交换IP任务完成。

    IP交换成功后,如果需要切换为原IP,单击操作列的“更多 > 回滚IP”,当任务状态显示为“IP回滚成功”表示IP交换回滚完成。