分布式缓存服务 DCS-使用Redis-shake工具迁移自建Redis Cluster集群:在线迁移

时间:2024-07-15 20:00:59

在线迁移

在线迁移主要适用于自建Redis Cluster集群迁移到D CS Cluster集群的场景,且两端集群实例能够网络连通,或者有一台中转服务器能够连通两端集群实例。

部署在其他云厂商Redis服务上的Cluster集群数据,由于SYNC、PSYNC命令被云厂商禁用,暂不支持在线迁移。

  1. 在DCS控制台创建Cluster集群实例。

    注意集群的内存规格不能小于源端Cluster集群。

  2. 准备一台云服务器,并安装Redis-shake。

    RedisShake既能访问源端Cluster集群,也需要能访问目标端DCS Cluster集群,需要绑定弹性公网IP。

    建议使用华为云的弹性云服务器(ECS),且ECS与DCS Cluster集群实例配置相同虚拟私有云、子网与安全组。如果源端Cluster集群在本地或者其他云厂商的服务器上自建,则需要允许被公网访问。

    Redis-shake工具可下载release版本,解压缩后即可使用。(此处以下载Redis-shake v2.1.2为例,您可以根据实际需要选择其他Redis-shake版本。)

  3. 获取源集群和目标集群的Master节点和IP。

    在线迁移需要将各个节点数据分别迁移。使用如下命令查询源和目标Cluster集群的所有节点的IP地址与端口:

    redis-cli -h {redis_address} -p {redis_port} -a {redis_password} cluster nodes

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

    安装了Redis后,自带redis-cli命令。如CentOS下安装Redis:yum install redis

  4. 编辑Redis-shake配置文件。

    编辑redis-shake工具配置文件redis-shake.conf,补充源端与目标端所有master节点的连接信息:

    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}
    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}

    保存并退出文件编辑。

  5. 在线迁移,同步数据。

    使用如下命令同步源Redis集群和目标Redis集群数据:

    ./redis-shake -type sync -conf redis-shake.conf

    执行日志中出现如下信息,代表全量数据同步完成,进入增量同步阶段:

    sync rdb done.

    执行日志出现如下信息时,代表增量同步无新增内容,可手动停止同步(Ctrl + C):

    sync:  +forwardCommands=0  +filterCommands=0  +writeBytes=0
    图1 redis-shake在线迁移示意图
  6. 迁移后验证。

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

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

  7. 清理RedisShake配置文件。
support.huaweicloud.com/migration-dcs/dcs-migrate-demo02.html