本文为您介绍通过redis-shake将数据从腾讯云Redis实例迁移到阿里云云数据库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实例。
  • 在腾讯云平台创建了可以通过内网互通的云服务器和Redis实例。
  • 阿里云ECS的系统为Linux。
  • 使用rump模式迁移需要腾讯云服务器拥有公网地址。
  • 使用restore模式迁移需要对待迁移的Redis数据进行备份。

迁移模式说明

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

rump模式操作步骤

  1. 登录腾讯云服务器,将源Redis实例映射到云服务器公网。
    说明
    • Windows操作系统的云服务器可以直接在CMD中执行如下命令:
      netsh interface portproxy add v4tov4 listenaddress=<腾讯云服务器的私网IP地址> listenport=6379 connectaddress=<源Redis的连接地址> connectport=6379
    • Linux操作系统的云服务器设置端口映射的方式,请参见如何通过公网连接Redis实例
  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
  4. 执行下述命令进入解压后的目录并修改配置文件:
    cd redis-shake-v2.0.3/ && vim redis-shake.conf
    说明 执行命令后,系统将进入编辑界面,输入a可进入编辑模式。
    表 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
    key_exists 当源库中的Key与目标库中的Key相同时,采取的数据写入策略,取值:
    • rewrite:覆盖写入至目标库。
    • none:默认值,停止运行Redis-shake程序并提示冲突的Key。
    • ignore:直接跳过当前迁移的Key,保留目标库的数据,继续执行数据迁移。
    rewrite
    scan.key_number 每次SCAN获取的key的个数,不配置则默认为100。 100
    scan.special_cloud 用于支持特殊版本云Redis的迁移。 tencent_cluster
    说明 该示例值适用于源端为腾讯云Redis集群版实例的迁移。
    qps 用于限制传输速度。
    说明 如果希望1秒同步不超过1000个key,可以设置为qps=1000
    200000
  5. 按下ECS键退出编辑模式,输入:wq并按回车键保存配置并退出编辑界面。
  6. 使用如下命令进行迁移。
    ./redis-shake.linux -type=rump -conf=redis-shake.conf
    图 1. rump模式迁移示例
    说明 出现上图中的提示即表示数据迁移完成。您可以使用redis-full-check进行数据校验,确保两端数据一致,详细步骤请参见校验迁移后的数据

restore模式操作步骤

  1. 登录腾讯云云数据库Redis控制台,单击备份与恢复
  2. 单击备份列表页签,找到目标备份,单击下载并单击复制
  3. 在阿里云ECS中下载源Redis实例的RDB文件。
    wget -O <redis.rdb> <腾讯云Redis实例下载地址> 
    说明 腾讯云Redis实例的RDB文件名中包含特殊字符,特殊字符会导致下载后无法对RDB文件进行操作的情况,请在下载时修改RDB文件名称。
  4. 执行下述命令下载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版本列表
  5. 执行下述命令解压Redis-shake文件:
    tar xzf redis-shake-v2.0.3.tar.gz
  6. 执行下述命令进入解压后的目录并修改配置文件:
    cd redis-shake-v2.0.3/ && vim redis-shake.conf

    restore模式涉及的主要参数说明如下:

    表 2. redis-shake restore模式参数说明
    参数 说明 示例
    rdb.input RDB文件的路径,可使用相对路径或绝对路径。 /root/demo.rdb
    target.address 目的Redis的连接地址与端口号。 r-bp1xxxxxxxxxxxxx.redis.rds.aliyuncs.com:6379
    source.password_raw 目的Redis的连接密码。 TargetPass233
    说明 如使用非默认账号连接云数据库Redis版实例,密码格式为account:password
    target.db 要将数据恢复到的db,默认为0。例如,要将所有数据恢复到目的Redis的db10,则需将此参数的值设置为10。当该值小于0时,表示不启用,源端db0将同步到目的端的db0,源端db3将同步到目的端的db3。 0
    key_exists 当源库中的Key与目标库中的Key相同时,采取的数据写入策略,取值:
    • rewrite:覆盖写入至目标库。
    • none:默认值,停止运行Redis-shake程序并提示冲突的Key。
    • ignore:直接跳过当前迁移的Key,保留目标库的数据,继续执行数据迁移。
    rewrite
    parallel RDB文件同步中使用的并发线程数,用于提高同步性能。
    说明
    • 最小值为1
    • 最大值取决于服务器性能
    • 推荐值为64
    64
  7. 按下ECS键退出编辑模式,输入:wq并按回车键保存配置并退出编辑界面。
  8. 使用如下命令进行迁移。
    ./redis-shake.linux -type=restore -conf=redis-shake.conf
  9. 日志中出现restore: rdb done表示数据恢复完成,按Ctrl+C退出执行即可。