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

使用RedisShake工具离线迁移自建Redis Cluster集群

RedisShake是一款开源的Redis迁移工具,支持Cluster集群的在线迁移与离线迁移(备份文件导入)。DCS Cluster集群与Redis Cluster集群设计一致,数据可平滑迁移。

本文以Linux系统环境为例,介绍如何使用RedisShake工具将自建的Redis Cluster离线迁移到DCS Cluster集群。

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

前提条件

  • 已创建DCS Cluster集群Redis,创建Redis的方法,请参见创建实例

    创建的目标Redis内存规格不能小于源Redis。

  • 已创建弹性云服务器ECS,创建弹性云服务器的方法,请参见《弹性云服务器用户指南》。ECS请选择与DCS Cluster集群实例相同虚拟私有云、子网和安全组。

获取源Redis和目标Redis节点信息

  1. 分别连接源端和目标端Redis。连接Redis的方法请参考使用redis-cli连接Redis实例
  2. 在线迁移Cluster集群时需要将Cluster集群各个节点数据分别迁移。执行如下命令分别查询源端和目标Cluster集群的所有节点的IP地址与端口:
    redis-cli -h {redis_address} -p {redis_port} -a {redis_password} cluster nodes

    {redis_address}为Redis的连接地址,{redis_port}为Redis的端口,{redis_password}为Redis的连接密码。

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

安装RedisShake

  1. 登录弹性云服务器ECS。
  2. 在ECS中执行以下命令下载RedisShake。本文以下载2.1.2版本为例,您可以根据实际需要下载其他RedisShake版本
    wget https://github.com/tair-opensource/RedisShake/releases/download/release-v2.1.2-20220329/release-v2.1.2-20220329.tar.gz
  3. 执行命令解压RedisShake文件。
    tar -xvf redis-shake-v2.1.2.tar.gz

如果源Cluster部署在数据中心内网,则需在内网服务器上安装RedisShake,并参考导出备份文件导出源Cluster备份文件,然后将备份文件上传到云服务器。

导出备份文件

  1. 执行命令进入解压后的RedisShake文件目录。
    cd redis-shake-v2.0.3
  2. 编辑RedisShake工具配置文件redis-shake.conf,补充源端所有master节点的连接信息。
    vim redis-shake.conf
    修改内容如下:
    source.type = cluster
    #如果无密码,本项不填
    source.password_raw = {source_redis_password}
    #源Cluster集群所有master节点的IP地址与端口,以分号分隔
    source.address = {master1_ip}:{master1_port};{master2_ip}:{master2_port}…{masterN_ip}:{masterN_port}

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

  3. 执行以下命令导出源Redis集群的RDB格式备份文件。
    ./redis-shake -type dump -conf redis-shake.conf

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

    execute runner[*run.CmdDump] finished!

导入备份文件

  1. 将导出的RDB备份文件(含多个)上传到与云服务器上。云服务器与目标端DCS Cluster集群实例的网络连通。
  2. 编辑RedisShake工具配置文件redis-shake.conf。补充目标端所有master节点的连接信息。
    vim redis-shake.conf
    修改内容如下:
    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.

迁移后验证

  1. 数据同步结束后,连接DCS Cluster集群,连接Redis的方法请参考使用redis-cli连接Redis实例
  2. 通过info命令查看Keyspace中的Key数量,确认数据是否完整导入。

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

  3. 迁移验证完成后,删除RedisShake配置文件。