本文为您介绍如何将数据从AWS ElastiCache for Redis实例迁移到阿里云ApsaraDB for Redis实例。

前提条件

目标Redis实例的版本社区版(4.0或5.0版本)或企业版(5.0版本)。如果尚未创建实例,请参见步骤1:创建实例

Redis-shake介绍

Redis-shake是阿里云自研的开源Redis数据传输工具,支持对Redis数据进行解析(decode)、恢复(restore)、备份(dump)和同步(sync或rump),易于部署,灵活高效。本案例通过使用Redis-shake的restore(恢复)模式,将本地RDB文件中的数据恢复至云数据库Redis,从而实现数据迁移上云。

说明

注意事项

  • 执行该操作前建议停止将数据继续写入AWS ElastiCache for Redis。
  • 执行该操作前请提前做好数据备份并规划好业务停机时间。
  • 如果目标库的数据逐出策略(maxmemory-policy)配置为noeviction以外的值,可能导致目标库的数据与源库不一致。关于数据逐出策略详情,请参见Redis数据逐出策略介绍
  • 如果源库中的某些Key使用了过期(expire)机制,由于可能存在Key已过期但未被及时删除的情形,所以在目标库中查看(如通过info命令)到的Key数量会比源库的Key数量少。
    说明 源和目标库中,未设置过期机制或未过期的Key数量是一致的。

步骤一:将AWS ElastiCache for Redis导出为RDB文件

  1. 创建备份到特定集群。单击左侧导航栏中的Redis,选择需要备份的集群名称,单击备份资源名称里选择需要备份的集群,填写备份名称后单击创建快照
  2. 将备份文件导出到AWS S3存储桶。单击左侧导航栏中的备份,选择需要导出的备份文件,单击上方的复制,填写新缓存快照标识符名称,选择目标S3位置,单击右下角复制,导出过程将开始。
  3. 您可以在S3存储桶中找到导出的RDB文件。
  4. 从S3存储桶下载RDB文件。

步骤二:通过Redis-shake将RDB文件迁移至阿里云

  1. 确认Redis-shake待安装的位置,并完成下述操作:
    说明 推荐在ECS实例上安装Redis-shake,通过专有网络连接源和目标Redis实例,可获得更低的网络延迟和更高的安全性。
    Redis-shake待安装位置 需完成的操作
    ECS实例(推荐)
    1. 确保ECS实例与Redis实例属于同一专有网络(即实例基本信息中的专有网络ID一致)。
      说明
    2. 获取ECS实例的内网IP地址。具体操作,请参见查询ECS实例的IP地址
    3. 将ECS实例的内网IP地址添加至Redis实例的白名单中。具体操作,请参见设置白名单
    本地设备
    1. Redis实例默认仅提供内网连接地址,通过公网连接时您需要手动申请公网连接地址。具体操作,请参见申请公网连接地址
    2. 在本地设备上执行curl ipinfo.io |grep ip命令,获取其公网IP地址,返回示例如下:查看公网IP结果
    3. 将本地设备的公网IP地址添加至Redis实例的白名单中。具体操作,请参见设置白名单
  2. 安装Redis-shake。
    1. 登录待安装Redis-shake的设备,例如ECS实例或本地设备。
    2. 执行下述命令下载Redis-shake文件:
      wget 'http://docs-aliyun.cn-hangzhou.oss.aliyun-inc.com/assets/attach/120287/cn_zh/1608173646665/redis-shake-v2.0.3.tar.gz'
      说明 本文以2.0.3版本为例演示操作流程,您也可以安装其他版本。更多信息,请参见RedisShake版本列表
    3. 执行下述命令解压Redis-shake文件:
      tar xzf redis-shake-v2.0.3.tar.gz
  3. 在安装了Redis-shake的设备上,执行数据迁移。
    1. 将源Redis实例的RDB备份文件下载到该设备中。
      说明 您可以使用命令wget <RDB文件下载链接>将RDS文件下载至ECS实例,也可以使用MobaXterm Personal Edition客户端,通过SFTP协议将下载到本地的RDB文件上传到阿里云ECS实例。
    2. 执行下述命令进入解压后的目录并修改配置文件:
      cd redis-shake-v2.0.3/ && vim redis-shake.conf
      说明 执行命令后,系统将进入编辑界面,输入a可进入编辑模式。
      表 1. 主要参数说明
      参数 是否必填 说明 示例
      source.rdb.input 备份文件(RDB文件)的相对路径或绝对路径。
      说明 多个文件请使用英文分号(;)分隔。
      /root/tools/RedisShake/demo.rdb
      target.address 目标Redis实例的连接地址与端口号,连接地址和端口号之间使用英文冒号(:)分隔。关于如何获取连接地址和端口号,请参见查看连接地址
      • ECS实例通过专有网络连接:需获取Redis实例的专有网络连接地址。
      • 本地设备通过公网连接:需获取Redis实例的公网连接地址。
      r-bp1wcw2rlw76acc5k****.redis.rds.aliyuncs.com:6379
      target.password_raw 目标Redis实例的账号(需具备读写权限)及其密码,账号和密码之间使用英文冒号(:)分隔。关于如何创建账号,请参见创建与管理账号 testaccount:Rp829dlwa
      key_exists 当源库中的Key与目标库中的Key相同时,采取的数据写入策略,取值:
      • rewrite:覆盖写入至目标库。
      • none:默认值,停止运行Redis-shake程序并提示冲突的Key。
      • ignore:直接跳过当前迁移的Key,保留目标库的数据,继续执行数据迁移。
      rewrite
      parallel Redis-shake执行迁移的并发线程数,适当调大该值可提高同步性能。
      说明 默认值为32,最小值为1,最大值取决于Redis-shake所在服务器的性能。
      32
      说明 其他参数如无特殊需求无需配置,如需了解更多,请查看redis-shake.conf文件中各参数的注释。
    3. 按下Esc键退出编辑模式,输入:wq并按回车键保存配置并退出编辑界面。
    4. 执行下述命令启动Redis-shake,开始执行数据迁移:
      ./redis-shake.linux -type=restore -conf=redis-shake.conf
      Redis-shake将在屏幕上打印运行的日志信息。
      说明 如果出现提示报错,相关原因及解决方法,请参见常见问题
  4. 日志中出现restore: rdb done表示数据恢复完成,此时使用Ctrl+C组合键停止运行Redis-shake。
    图 1. 执行示例