使用redis-shake的sync模式,将自建Codis/Redis集群迁移到云数据库Redis版实例。

说明 单节点Redis实例迁移请参见使用redis-shake进行迁移

前提条件

  • 已创建作为迁移目的端的云数据库Redis版实例,创建实例请参见创建实例
  • 已创建用于运行redis-shake的ECS实例,ECS实例为64位的Linux系统,创建ECS实例请参见创建ECS实例
  • ECS实例可以访问目的Redis实例。
    说明
    • 如果ECS实例与目的Redis实例在同一可用区的VPC中,可以在Redis白名单中添加ECS内网IP,添加白名单请参见设置IP白名单
    • 如果ECS实例与目的Redis实例不在同一可用区的VPC中,可以通过外网地址访问,详情请参见外网连接

使用限制

  • sync模式仅支持自建Redis上云、自建Redis与云数据库Redis版的同步以及自建Redis之间的同步等场景。云数据库Redis集群版目前无法作为sync模式的源端。
  • sync模式下源端Redis需支持SYNCPSYNC命令。

redis-shake简介

redis-shake是阿里云自研的开源工具,支持对Redis数据进行解析(decode)、恢复(restore)、备份(dump)、同步(sync/rump)。在sync模式下,redis-shake使用SYNCPSYNC命令将数据从源端Redis同步到目的端Redis,支持全量数据同步和增量数据同步,增量同步在全量同步完成后自动开始。本文以使用sync模式将自建Codis/Redis集群版数据库上云为例进行说明。

说明
  • sync模式支持跨版本同步,如2.8版本实例与4.0版本实例同步。
  • 如需了解更多redis-shake相关信息,请参见redis-shake Github主页FAQ

操作步骤

  1. 登录可以连接云数据库Redis版实例(目的端Redis)的ECS。
  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.conf配置文件,sync模式涉及的主要参数说明如下。
    参数 说明 示例
    source.type 源Codis/Redis的类型。 cluster
    source.address 源Codis/Redis集群的连接地址与服务端口。 10.xx.xx.1:7000;10.xx.xx.1:7002;10.xx.xx.1:7003;10.xx.xx.1:7004
    source.password_raw 源Codis/Redis集群的连接密码。 SourcePass233
    target.type 目的Redis的类型。 proxy
    target.address 目的Redis的连接地址与服务端口,详情请参见查看连接地址 r-bpxxxxxxxxxxxxxxx.redis.rds.aliyuncs.com:6379
    target.password_raw 目的Redis的连接密码,此处为云数据库Redis版实例的密码。 TargetPass233
    rewrite 如果目的Redis有与RDB文件中相同的key,是否覆盖,可选值:
    • true(覆盖);
    • false(不覆盖)。
    说明 默认为true,建议对目的Redis中的有效数据进行完善的备份再执行迁移。如设置为false且存在数据冲突则会出现异常提示。
    true
    target.db

    设置待迁移的数据在目的Redis中的的逻辑数据库名。

    例如,要将所有数据迁移到目的Redis中的DB10,则需将此参数的值设置为10。

    当该值设置为-1时,逻辑数据库名在源Redis和目的Redis中的名称相同,即源Redis中的DB0将被迁移至目的Redis中的DB0,DB1将被迁移至DB1,以此类推。

    0
    parallel RDB文件同步中使用的并发线程数,用于提高同步性能。
    说明
    • 最小值为1;
    • 最大值取决于服务器性能;
    • 推荐值为64。
    64
  5. 使用如下命令进行迁移。
    ./redis-shake -type=sync -conf=redis-shake.conf
    说明 此命令需在二进制文件redis-shake和配置文件redis-shake.conf所在的目录中执行,否则请在命令中指定正确的文件路径。
  6. 查看同步日志确认同步状态,当出现sync rdb done时,全量同步已经完成,同步进入增量阶段。
    图 1. 同步日志

    Redis上云
    说明 Codis/Redis集群版每个节点同步完成都会生成sync rdb done日志信息。
  7. 当所有节点同步完成之后,若+forwardCommands=0,则此时源端没有新的数据写入,同步链路中没有增量数据正在传输,您可以以此为依据选择适当的时机将业务对接到云数据库Redis版。