全部产品
数据传输服务DTS

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

更新时间:2017-06-07 13:26:11   分享:   

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

本小节简单介绍使用DTS进行Redis->云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

迁移前置条件

VPC Redis或通过专线接入阿里云VPC的自建Redis

如果待迁移的redis是通过专线接入阿里云vpc的自建redis,或是专有网络的云Redis实例,那么需要架设代理,进行数据转发。
为了让DTS能够访问专有网络Redis/通过专线接入阿里云的自建Redis, 需要在VPC内选择一台有公网EIP的ECS,并在ECS上部署nginx,通过nginx进行代理转发。
对于专有网络的Redis实例,ECS所在的VPC必须同专有网络Redis在同一个VPC,对于通过专线接入阿里云的自建Redis,ECS所在的VPC必须为专线对端的阿里云VPC。
下面介绍如何使用nginx进行redis的转发配置,让DTS服务器可以访问专有网络内的redis实例。

(1) nginx部署
首先在ECS服务器上,通过如下命令部署nginx。

  1. yum install nginx

(2) nginx转发配置

安装完nginx,修改nginx配置文件 /etc/nginx/nginx.conf , 设置后端监听redis。 注释掉配置文件中http的相关配置,添加tcp的配置内容。需要注释掉的http配置内容如下:

http配置内容

需要在配置文件中添加tcp配置内容:

  1. stream{
  2. upstream backend{
  3. hash $remote_addr consistent;
  4. #设置后端Redis连接串和端口,失败超时时间为10s,最多尝试3次。
  5. server r-bp1b294374634044.redis.rds.aliyuncs.com:6379 max_fails=3 fail_timeout=10s;
  6. }
  7. server{
  8. # nginx访问端口
  9. listen 3333;
  10. #指定nginx连接后端服务器的超时时间,指定为20s。
  11. proxy_connect_timeout 20s;
  12. #距离上一次成功访问(连接或读写)后端服务器的时间超过了5分钟就判定为超时,断开此连接。
  13. proxy_timeout 5m;
  14. #将TCP连接及数据收发转向叫“backend”的后端服务器。
  15. proxy_pass backend;
  16. }
  17. }

例如,需要访问的redis的连接地址为: r-bp1b294374634044.redis.rds.aliyuncs.com:6379, nginx代理转发端口为3333,那么tcp相关配置如下:

tcp配置

(3) 通过转发接口访问redis

当完成上面的配置后,运行nginx即成功启动nginx代理服务。
假设nginx部署的ECS服务的EIP为:114.55.89.152,那么可以直接用redis_cli访问nginx转发端口,测试代理转发是否正常。

nginx测试

如上图所示,可以通过访问nginx代理转发端口来访问Redis实例。
下面配置DTS迁移任务时,对于专有网络Redis实例或对于通过专线接入阿里云的自建Redis,直接配置nginx代理的连接地址即可。
DTS支持vpc后,对于专有网络Redis实例或者通过专线接入阿里云的自建Redis无需再架设代理。DTS支持vpc的产品时间参考官网通知。

云Redis实例

由于老版本的云Redis实例(即Kvstore)不支持config get 命令,无法直接使用DTS将云Redis实例迁移到其他Redis实例。如果您需要支持云Redis实例到其他Redis实例的迁移,需提交工单,申请迁移源实例(云Redis)的版本升级。请注意:源实例的版本升级会存在实例闪断风险。升级完成后,可以直接使用DTS配置云Redis实例到其他Redis实例的数据迁移。

迁移任务配置

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

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

二、 实例连接信息配置

这个步骤主要配置 迁移任务名称,自建Redis连接信息及云Redis实例连接信息。其中:

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

  • 目标实例信息
    实例类型: Redis实例
    实例区域: 实例区域为云Redis实例所在区域
    Redis实例ID: 配置迁移的目标云Redis实例的实例ID
    数据库密码:访问Redis实例的密码

步骤一

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

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

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

  • 迁移类型

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

  • 迁移对象

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

步骤2

四、预检查

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

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

预检查

五、 启动迁移任务

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

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

预检查

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

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