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

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

RedisShake是一款开源的Redis迁移工具,支持Cluster集群的在线迁移与离线迁移(备份文件导入)。当部署在其他云厂商Redis服务上的Cluster集群数据,无法在线迁移时,可以选择离线迁移。

与在线迁移相比,离线迁移适用于源实例与目标实例的网络无法连通的场景,或者源端实例部署在其他云厂商Redis服务中,无法实现在线迁移。

本文以Linux系统环境为例,介绍如何使用RedisShake工具进行Cluster集群数据离线迁移。

前提条件

  • 已在目标端云服务创建Redis实例,注意创建的Cluster集群内存规格不能小于源端Cluster集群。
  • 已在目标端云服务创建用于运行RedisShake的弹性云服务器(ECS),创建的ECS需要选择与Redis实例相同的VPC、子网和安全组。

迁移步骤

  1. 使用Redis-cli连接目标端Redis实例,获取目标端Cluster集群的Master节点IP地址与端口。
    redis-cli -h {target_redis_address} -p {target_redis_port} -a {target_redis_password} cluster nodes
    • {target_redis_address}:目标Redis实例的连接地址。
    • {target_redis_port}:目标Redis实例的连接端口号。
    • {target_redis_password}:目标Redis实例的连接密码。

    在命令返回的结果中,获取所有master节点的IP端口,如下如所示:

  2. 在准备好的ECS上安装迁移工具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

    如果源端集群部署在数据中心内网,还需在内网服务器上安装RedisShake,并参考下述步骤进行数据导出,然后将数据文件上传到云服务器。

  3. 从源端Redis控制台导出RDB文件,如果无法导出RDB文件,请联系源端技术支持获取。
  4. 导入RDB文件。
    1. 将导出的RDB文件(含多个)上传到云服务器上。云服务器与目标端DCS Cluster集群实例的网络连通。
    2. 编辑RedisShake工具配置文件redis-shake.conf。
      vim redis-shake.conf
      补充目标端所有master节点的连接信息:
      target.type = cluster
      #如果无密码,本项不填
      target.password_raw = {target_redis_password}
      #目标Cluster集群所有master节点的IP地址与端口,以分号分隔
      target.address = {master1_ip}:{master1_port};{master2_ip}:{master2_port}…{masterN_ip}:{masterN_port}
      #需要导入的rdb文件列表,用分号分隔
      rdb.input = {local_dump.0};{local_dump.1};{local_dump.2};{local_dump.3}

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

    3. 使用如下命令导入RDB文件到目标Cluster集群:
      ./redis-shake -type restore -conf redis-shake.conf

      执行日志中出现如下信息时导入备份文件完成:

      Enabled http stats, set status (incr), and wait forever.
  5. 迁移后验证。

    数据同步结束后,可使用redis-cli工具连接目标端DCS Cluster集群,通过info命令查看Keyspace中的Key数量,确认数据是否完整导入。

    如果数据不完整,可使用flushall或者flushdb命令清理实例中的缓存数据后重新同步。