更新时间:2024-07-29 GMT+08:00

使用RedisShake在线迁移其他云厂商Redis

RedisShake是一款开源的Redis迁移工具,在Rump模式下,RedisShake可以以scan的方式从源端Redis获取全量数据,写入到目的端,实现数据迁移。这种迁移方式不依赖于SYNC和PSYNC,可以广泛应用于自建Redis、云Redis之间的迁移。

本文将介绍如何利用RedisShake的Rump模式,以在线全量的迁移方式,一次性将其他云厂商Redis迁移至DCS中。

图1 本方案数据流向示意图

约束与限制

  • Rump模式不支持增量数据迁移,建议您先停止源端Redis的写入再进行迁移,防止数据不一致。
  • 该方案配置只支持同DB映射迁移,异DB映射迁移该方案配置不适用。
  • 源端为多DB使用(有非DB0的DB使用),DCS为集群实例时,该方案不支持(DCS 集群实例目前只支持DB0模式)。

前提条件

  • 已在目标端云服务创建Redis实例
  • 已在目标端云服务创建用于运行RedisShake的弹性云服务器(ECS),创建的ECS需要选择与Redis实例相同的VPC,并且需要绑定弹性公网IP。

迁移步骤

  1. 分别在ECS和源端转发服务器上安装Nginx,本文以ECS操作系统为Centos7.x为例进行安装,不同操作系统命令稍有不同。

    1. 执行以下命令,添加Nginx到yum源。
      sudo rpm -Uvh http://nginx.org/packages/centos/7/noarch/RPMS/nginx-release-centos-7-0.el7.ngx.noarch.rpm
    2. 添加完之后,执行以下命令,查看是否已经添加成功。
      yum search nginx
    3. 添加成功之后,执行以下命令,安装Nginx。
      sudo yum install -y nginx
    4. 执行以下命令安装stream模块。
      yum install nginx-mod-stream --skip-broken
    5. 启动Nginx并设置为开机自动运行。
      sudo systemctl start nginx.service
      sudo systemctl enable nginx.service
    6. 在本地浏览器中输入服务器地址(ECS公网IP地址),查看安装是否成功。

      如果出现下面页面,则表示安装成功。

  2. 在源端Redis添加源端转发服务器的白名单。
  3. 在源端转发服务器配置安全组。

    1. 获取ECS的公网IP地址。
    2. 配置源端转发服务器安全组入方向,添加ECS的公网IP地址,并放开来自ECS访问请求的端口(以6379为例)。

  4. 配置源端转发服务器的Nginx转发配置。

    1. 登录Linux源端转发服务器,执行命令打开并修改配置文件。
      cd /etc/nginx
      vi nginx.conf
    2. 转发配置示例如下:
      stream {
          server {
              listen 6379;
              proxy_pass {source_instance_address}:{port};
          }
         }

      其中,6379为源端转发服务器本机监听端口,{source_instance_address}和{port}为源端Redis实例的连接地址和端口。

      配置目的:通过访问源端转发服务器本机监听端口6379,访问源端Redis。

      注意:以上配置必须配置在如下图所示的位置。

      图2 配置位置要求
    3. 重启Nginx服务。
      service nginx restart
    4. 验证启动是否成功。
      netstat -an|grep 6379

      端口在监听状态,Nginx启动成功。

      图3 验证结果

  5. 配置ECS的Nginx转发配置。

    1. 登录LinuxECS,执行命令打开并修改配置文件。
      cd /etc/nginx
      vi nginx.conf
    2. 配置示例如下:
      stream {
          server {
              listen 6666;
              proxy_pass {source_ecs_address}:6379;
          }
         }

      其中,6666为ECS本机监听端口,{source_ecs_address}为源端转发服务器公网IP地址,6379为源端转发服务器Nginx的监听端口。

      配置目的:通过访问ECS本机监听端口6666,访问源端转发服务器。

      注意:以上配置必须配置在如下图所示的位置。

      图4 配置位置要求
    3. 重启Nginx服务。
      service nginx restart
    4. 验证启动是否成功。
      netstat -an|grep 6666

      端口在监听状态,Nginx启动成功。

      图5 验证结果

  6. 在ECS执行以下命令测试6666端口的网络连接。

    redis-cli -h {target_ecs_address} -p 6666 -a {password}

    其中,{target_ecs_address}为ECS公网IP地址,6666为ECS监听端口,{password}为源端Redis密码,如无密码可不填。

    图6 连接示例

  7. 准备迁移工具RedisShake。

    1. 登录ECS。
    2. 在ECS中执行以下命令下载RedisShake,本文以下载2.0.3版本为例进行说明。您可以根据实际需要下载其他RedisShake版本
      wget https://github.com/tair-opensource/RedisShake/releases/download/release-v2.0.3-20200724/redis-shake-v2.0.3.tar.gz
    3. 执行命令解压RedisShake文件。
      tar -xvf redis-shake-v2.0.3.tar.gz

  8. 配置RedisShake的配置文件。

    1. 执行命令进入解压后的目录。
      cd redis-shake-v2.0.3
    2. 修改配置文件redis-shake.conf。
      vim redis-shake.conf

      修改源端Redis信息配置:

      • source.type

        源端redis实例类型,单机、主备、proxy集群实例都选择standalone,cluster实例选择cluster。

      • source.address

        ECS公网IP地址和映射源端转发服务器的端口(ECS监听端口6666),用英文冒号隔开。

      • source.password_raw

        源端待迁移Redis实例的密码,如未设置密码,无需填写。

      修改目标端DCS信息配置:

      • target.type

        Redis实例类型,单机、主备、proxy集群实例都选择standalone,cluster实例选择cluster。

      • target.address

        Redis实例的连接地址和端口,用英文冒号隔开。

      • target.password_raw

        Redis实例的密码,如未设置密码,无需填写。

    3. 按下Esc键退出编辑模式,输入:wq按回车键保存配置并退出编辑界面。

  9. 执行命令启动RedisShake并使用rump(在线全量)模式开始数据迁移。

    ./redis-shake.linux -conf redis-shake.conf -type rump
    图7 迁移过程
    图8 迁移结果

  10. 迁移完成后,请使用redis-cli工具连接源Redis和目标Redis,确认数据的完整性。

    1. 分别连接源Redis和目标Redis。

      连接操作请参考使用redis-cli连接Redis实例

    2. 输入info keyspace,查看keys参数和expires参数的值。
    3. 对比源Redis和目标Redis的keys参数分别减去expires参数的差值。如果差值一致,表示数据完整,迁移正常。

  11. 删除RedisShake配置文件。