本文为您介绍通过redis-shake将数据从华为云分布式缓存服务Redis迁移到阿里云云数据库Redis版。

说明 如果源Redis绑定了弹性公网IP,可以通过DTS迁移到阿里云,具体操作请参见使用DTS将华为云分布式缓存服务Redis迁移至阿里云

背景信息

redis-shake是阿里云自研的开源工具,支持对Redis数据进行解析(decode)、恢复(restore)、备份(dump)、同步(sync/rump)。 本文将分别介绍使用redis-shake的rump模式和restore模式将华为云分布式缓存服务 Redis 实例迁移到阿里云云数据库Redis版。
说明
  • rump模式和restore模式均不支持增量迁移,迁移前请停止对源库写入数据。
  • 如需了解更多redis-shake相关信息,请参见redis-shake Github主页FAQ

前提条件

  • 在阿里云平台创建了可以通过内网互通的ECS实例和目的Redis实例。
  • 在华为云平台创建了可以通过内网互通的ECS实例和源Redis实例。
  • 阿里云ECS实例操作系统为Linux。
  • 使用rump模式迁移需要华为云ECS实例绑定弹性公网IP。
  • 使用restore模式迁移需要对待迁移的Redis数据进行备份。

迁移模式说明

模式 说明
rump redis-shake以SCAN的方式从源端Redis获取全量数据,写入到目的端,实现数据迁移。
restore redis-shake可以将RDB文件中保存的数据恢复到Redis实例中,实现数据恢复或者迁移。

rump模式操作步骤

  1. 登录华为云ECS实例,将源Redis实例映射到云服务器公网。
    说明
    • Windows操作系统的云服务器可以直接在CMD中执行如下命令:
      netsh interface portproxy add v4tov4 listenaddress=<华为云ECS的私网IP地址> listenport=6379 connectaddress=<源Redis的连接地址> connectport=6379
    • Linux操作系统的云服务器设置端口映射的方式请参见外网连接
  2. 在阿里云ECS中下载redis-shake
    说明 建议您下载最新发布的版本。
  3. 解压redis-shake.tar.gz
    # tar -xvf redis-shake.tar.gz
    说明 解压获得的redis-shake为64位Linux系统所需的二进制文件,redis-shake.conf为redis-shake的配置文件,您将在下个步骤对其进行修改。
  4. 修改redis-shake配置文件,rump模式涉及的主要参数的说明如下。
    表 1. redis-shake rump模式参数说明
    参数 说明 示例值
    source.address 源端Redis的连接地址与服务端口。 118.**.**.146:6379
    source.password_raw 源端Redis的连接密码。 SourcePass233
    target.address 目的端Redis的连接地址与服务端口。 r-j6cxxxxxxxxxxxxx.redis.rds.aliyuncs.com
    target.password_raw 目的端Redis的连接密码。 TargetPass233
    rewrite 如果目的Redis有与RDB文件中相同的key,是否覆盖,可选值:
    • true(覆盖);
    • false(不覆盖)。
    说明 默认为true,建议对目的Redis中的有效数据进行完善的备份再执行恢复。如设置为false且存在数据冲突则会出现异常提示。
    true
    scan.key_number 每次SCAN获取的key的个数,不配置则默认为100。 100
    qps 用于限制传输速度。
    说明 如果希望1秒同步不超过1000个key,可以设置为qps=1000
    200000
  5. 使用如下命令进行迁移。
    # ./redis-shake -type=rump -conf=redis-shake.conf
    说明 此命令需在二进制文件redis-shake和配置文件redis-shake.conf所在的目录中执行,否则请在命令中指定正确的文件路径。
    图 1. rump模式迁移示例

    使用redis-shake将华为云分布式缓存服务Redis迁移至阿里云_从第三方数据库迁移到云数据库Redis版_数据迁移_用户指南_云数据库 Redis 版 阿里云技术文档 第1张
    说明 出现上图中的提示即表示数据迁移完成。您可以使用redis-full-check进行数据校验,确保两端数据一致,详细步骤请参见校验迁移后的数据

restore模式操作步骤

  1. 登录华为云分布式缓存服务控制台,单击左侧缓存管理
  2. 缓存管理页面,单击需要迁移的Redis实例名称。
  3. 单击备份与恢复 > 下载,在下载备份文件页面单击复制URL
    说明 支持下载备份文件的Redis版本请参见华为云分布式缓存服务文档。

    使用redis-shake将华为云分布式缓存服务Redis迁移至阿里云_从第三方数据库迁移到云数据库Redis版_数据迁移_用户指南_云数据库 Redis 版 阿里云技术文档 第2张
  4. 登录可以连接目标 Redis 实例的ECS。
  5. 在ECS中下载源 Redis 实例的备份文件。
    wget -O 'redis.rdb' "https://下载文件路径”
  6. 在ECS中下载redis-shake
    说明 建议您下载最新发布的版本。
  7. 解压redis-shake.tar.gz
    tar -xvf redis-shake.tar.gz
    说明 解压获得的redis-shake为64位Linux系统所需的二进制文件,redis-shake.conf为redis-shake的配置文件,您将在下个步骤对其进行修改。
  8. 修改配置文件redis-shake.conf,restore模式涉及的主要参数说明如下。
    表 2. redis-shake restore模式参数说明
    参数 说明 示例
    target.address 目的Redis的连接地址与端口号。 r-bp1xxxxxxxxxxxxx.redis.rds.aliyuncs.com:6379
    source.password_raw 目的Redis的连接密码。 TargetPass233
    说明 如使用非默认账号连接云数据库Redis版实例,密码格式为account:password
    rdb.input 备份文件(RDB文件)的路径,可使用相对路径或绝对路径。 /root/redis.rdb
    target.db 要将数据恢复到的db,默认为0。例如,要将所有数据恢复到目的Redis的db10,则需将此参数的值设置为10。当该值小于0时,数据将恢复至db0。 0
    rewrite 如果目的Redis有与RDB文件中相同的key,是否覆盖,可选值:
    • true(覆盖);
    • false(不覆盖)。
    说明 默认为true,建议对目的Redis中的有效数据进行完善的备份再执行恢复。如设置为false且存在数据冲突则会出现异常提示。
    true
    parallel RDB文件同步中使用的并发线程数,用于提高同步性能。
    说明
    • 最小值为1
    • 最大值取决于服务器性能
    • 推荐值为64
    64
    说明 其它参数如无特殊情况保持默认即可。
  9. 使用如下命令进行迁移。
    ./redis-shake -type=restore -conf=redis-shake.conf
    说明 此命令需在二进制文件redis-shake和配置文件redis-shake.conf所在的目录中执行,否则请在命令中指定正确的文件路径。
  10. 日志中出现restore: rdb done表示数据恢复完成,按Ctrl+C退出执行即可。
    使用redis-shake将华为云分布式缓存服务Redis迁移至阿里云_从第三方数据库迁移到云数据库Redis版_数据迁移_用户指南_云数据库 Redis 版 阿里云技术文档 第3张