全部产品

自建 Redis 实例到阿里云 Redis 实例的迁移方案

更新时间:2019-01-24 11:42:10

使用 数据传输 DTS 可以进行从自建 Redis 实例到云 Redis 的数据迁移。从自建 Redis 实例到云 Redis 的数据迁移支持增量数据同步功能,可以实现在本地应用不停写的情况下,平滑完成 Redis 的数据迁移。

注意:由于进行 Redis 迁移时,需迁移源端支持执行 psync 或者 sync 命令,因此当前 Redis 的迁移仅支持从自建 Redis 实例进行数据迁移,暂时无法对源端为云 Redis 实例的迁移提供支持。

本小节简单介绍使用 数据传输 DTS(以下简称 DTS)进行自建 Redis 实例->云 Redis 实例数据迁移的迁移流程。

迁移类型简介

从自建 Redis 实例到云 Redis 实例的数据迁移,可以支持全量数据迁移+增量数据迁移,全量数据迁移及增量数据迁移的功能及限制如下。

  • 全量数据迁移

    DTS 将自建 Redis 中现有的 Key 全部迁移到阿里云 Redis 实例中。

  • 增量数据迁移

    增量数据迁移将迁移过程中,自建 Redis 实例的更新 key 同步到阿里云 Redis 实例。最终,自建 Redis 和云 Redis 实例进入动态数据复制的过程。通过增量数据迁移,可以实现在自建 Redis 实例正常提供服务的同时,平滑完成自建 Redis 实例->云 Redis 实例的数据迁移。

迁移功能

Redis 增量迁移支持的命令包括:
APPEND
BITOP, BLPOP, BRPOP, BRPOPLPUSH
DECR, DECRBY, DEL
EVAL, EVALSHA,EXEC, EXPIRE, EXPIREAT
FLUSHALL, FLUSHDB
GEOADD, GETSET
HDEL, HINCRBY, HINCRBYFLOAT, HMSET, HSET, HSETNX
INCR, INCRBY, INCRBYFLOAT
LINSERT, LPOP, LPUSH, LPUSHX, LREM, LSET, LTRIM
MOVE, MSET, MSETNX, MULTI
PERSIST, PEXPIRE, PEXPIREAT, PFADD, PFMERGE, PSETEX,PUBLISH
RENAME, RENAMENX, RESTORE,RPOP, RPOPLPUSH, RPUSH, RPUSHX
SADD, SDIFFSTORE, SELECT, SET, SETBIT, SETEX, SETNX, SETRANGE, SINTERSTORE, SMOVE, SPOP, SREM, SUNIONSTORE
ZADD, ZINCRBY, ZINTERSTORE, ZREM, ZREMRANGEBYLEX, ZUNIONSTORE, ZREMRANGEBYRANK, ZREMRANGEBYSCORE

迁移前置条件

迁移的源端前置需求

通过 DTS 进行迁移的源端前置需求包括:

  • DTS 能够在源端运行 psync 或者 sync 命令。
  • DTS 支持有公网 IP 的本地自建 Redis 实例,ECS 中自建的 Redis 实例,通过专线(高速链路)接入阿里云 VPC 的自建 Redis 实例,或者通过 VPN 接入阿里云 VPC 的自建 Redis 实例作为迁移的源端。
  • 暂不支持 Redis 4.0 版本作为源端的迁移。

注意:由于进行 Redis 迁移时,需要迁移源端支持执行 psync 或者 sync 命令,因此当前 Redis 的迁移仅支持从自建 Redis 实例进行数据迁移,暂时无法对源端为云 Redis 实例的迁移提供支持。如需以云 Redis 实例为源端进行迁移,请联系阿里云 Redis 实例的技术支持。

DTS 能够支持的源端接入方式包括:

  • 如果待迁移的 Redis 实例能够直接提供 IP:Port 的连接方式,则 DTS 可以直接接入待迁移的 Redis 实例。
  • 如果待迁移的 Redis 实例是通过专线(高速链路)接入阿里云 VPC 的自建 Redis 实例,可以通过 DTS 进行通过专线接入阿里云的本地自建数据库上云迁移任务的配置,您可以参考 通过专线接入阿里云的本地自建数据库的上云迁移 进行配置。
  • 如果待迁移的 Redis 实例是通过 VPN 连接到阿里云 VPC 的 Redis 实例,那么需要架设代理,进行数据转发,提供可供 DTS 访问的 IP:Port 连接方式。具体方式见 nginx 代理搭建示例 章节。

迁移的目标端前置需求

通过 DTS 进行迁移的目标端前置需求包括:

  • DTS 支持阿里云端经典网络和 VPC 网络的 Redis 实例,有公网 IP 的本地自建 Redis 实例,ECS 中自建的 Redis 实例或者专线接入阿里云 VPC 的自建 Redis 实例作为迁移的目标。

为了确保增量迁移正常启动,建议调整源Redis实例的下列参数,具体参数配置如下:
client-output-buffer-limit slave 0 0 0 <br/>

迁移限制条件

通过 DTS 进行迁移的限制条件包括:

  • 对于通过 EVAL 或者 EVALSHA 调用 Lua 脚本,在增量数据迁移时,由于目标端在执行脚本时不会明确返回执行结果,所以 DTS 无法确保该类型脚本的执行成功。
  • 对于 Redis 中的 List 列表,由于 DTS 在调用 sync 或者 psync 进行重传时,不会对目标端已有的数据进行 Flush,所以可能导致重复数据的出现。

迁移任务配置

当上面的所有前置条件都配置完成后,就可以开始正式的数据迁移了。本小节以有公网 IP 的本地自建 Redis 实例到阿里云经典网络云 Redis 实例的数据迁移为例,详细介绍迁移任务配置流程。

一、进入 数据传输 DTS 控制台,点击右上角的创建迁移任务,开始配置迁移任务。

二、 实例连接信息配置

这个步骤主要配置迁移任务名称,有公网 IP 的本地自建 Redis 实例的连接信息及阿里云经典网络 Redis 实例连接信息。其中:

  • 任务名称
    DTS 为每个任务自动生成一个任务名称,任务名称没有唯一性要求。您可以根据需要修改任务名称,建议为任务配置具有业务意义的名称,便于后续的任务识别。
  • 源实例信息
    实例类型:选择 有公网 IP 的自建数据库
    实例区域:对于有公网 IP 的本地自建 Redis 实例,选择跟该 Redis 实例物理距离最近的地域,以便获得更高的迁移性能
    数据库类型: 选择 Redis
    实例模式:默认为 单机,后续 DTS 将支持集群模式的 Redis 实例
    主机名或 IP 地址: 有公网 IP 的本地自建 Redis 实例的访问地址,如果配置了 nginx 代理转发,那么为 nginx 代理转发的访问地址
    端口:有公网 IP 的本地自建 Redis 实例的监听端口。如果配置了 nginx 代理转发,那么为 nginx 代理转发端口
    数据库密码:上面指定的 Redis 实例的访问密码,为非必填项,如果自建 Redis 没有设置密码,那么可以不填

  • 目标实例信息
    实例类型: 选择 Redis 实例
    实例区域: 实例区域为云 Redis 实例所在区域
    Redis实例ID: 配置迁移的目标阿里云 Redis 实例的实例 ID
    数据库密码:上面指定的阿里云 Redis 实例的密码

步骤一

当连接信息配置完成后,即可点击页面右下角的 授权白名单并进入下一步,开始进行迁移库的选择。

三、选择迁移对象及迁移类型

在这个步骤中,需要配置迁移类型及迁移对象。

  • 迁移类型

对于 Redis 实例的迁移,DTS 支持全量数据迁移及增量数据迁移。
如果只需要进行全量数据迁移,那么迁移类型选择:全量数据迁移。
如果需要进行源库不停服迁移,那么迁移类型选择:全量数据迁移+增量数据迁移。

  • 迁移对象

这个步骤需要选择要迁移的库。目前 DTS 只支持对 Redis 实例的整库迁移,所以只能选择要迁移的库,而不能选择要部分 Key。

步骤2

四、预检查

在迁移任务正式启动之前,会先进行前置预检查,只有预检查通过后,才能成功启动迁移。预检查的内容及修复方式可以参考本文末尾的 预检查简介 一节。

如果预检查失败,那么可以点击具体检查项后的按钮,查看具体的失败详情,并根据失败原因修复后,重新进行预检查。
·预检查

五、 启动迁移任务

当预检查通过后,可以启动迁移任务,任务启动成功后,可以在任务列表中查看迁移的具体状态及迁移进度。

至此,完成自建 Redis 实例到阿里云 Redis 实例的数据迁移任务配置。

预检查

DTS 在启动迁移之前,会进行前置预检查,本小节简单介绍 Redis 实例数据迁移的预检查内容:

检查项 检查内容 备注(建议排查项目)
源库连接性检查 检查 DTS 服务器跟自建 Redis 实例的连通性 (1) 填写信息是否有误?如果填写信息有误,请修改后重新预检查
(2) 检查端口是否允许从其他服务器连接访问
目标库连接性检查 检查 DTS 服务器跟目标 Redis 实例的连通性 检查填写信息是否有误,如果有误请先修改后重新预检查
库一对一检查 检查是否存在多个库迁移到一个库的情况 DTS 暂不支持多个库迁移到一个库,如果出现这种情况,那么请先修改任务配置后,重新预检查
目标库是否为空 检查待迁移库在目标 Redis 实例中是否为空 如果检查失败,请先删除目标 Redis 实例中对应库的 Key 后,重新预检查
增量拓扑冲突检查 检查目标 Redis 实例上是否有其他增量迁移任务正在运行 如果检查失败,那么需要结束其他的增量迁移任务后,重新预检查