工具介绍

redis-port 是一款开源的数据批量传输工具,主要用于 Redis 节点间的数据同步。更多 redis-port 介绍可参考官方文档

约束限制

由于 redis-port 暂不仅支持 RDB Version 9。故 redis-port 仅适用于源集群版本为 Redis 4.x 及以前版本的数据迁移。

前提条件

  • Redis Standalone 集群状态为活跃

  • 已获取远端 Redis 数据库信息。

操作步骤

步骤一:安装 redis-port

  1. 确保安装 redis-port 的客户端服务器与 Redis Standalone 集群之间网络通畅。

  2. 在客户端服务器上下载并安装 redis_port。

    • Linux 操作系统,可执行以下命令行。

      wget https://github.com/CodisLabs/redis-port/releases/download/v2.0-beta/redis-port-v2.0-beta-go1.10.1-linux.tar.gz
      tar -xvf redis-port-v2.0-beta-go1.10.1-linux.tar.gz
    • Windowx 操作系统,可从官网下载安装。

  3. 该工具下载解压后,即可直接使用,无需编译。

步骤二:使用 redis-port

  • 集群间数据同步

    用户可以使用 redis-port 将源 Redis Standalone 的数据迁移至目标 Redis Standalone。

    注意

    确保源 Redis Standalone 集群与目标 Redis Standalone 集群之间的网络通畅。

    1. 在安装有 redis-port 的服务器上,执行如下命令行。

      ./redis-sync -m <password>@<源 Redis 地址:端口号> -t <目标 Redis 地址:端口号>

      命令行参数说明

      参数 说明

      <password>

      源 Redis Standalone 集群 default 用户密码,若没有配置,可不输入。

      <源 Redis 地址:端口号>

      填写源 Redis Standalone 集群的访问地址与端口号,可参考前文步骤进行查询。

      <目标 Redis 地址:端口号>

      填写目标 Redis Standalone 集群的访问地址与端口号,可参考前文步骤进行查询。

    2. 命令行输出结果如下所示,当迁移提示完成 100%,表示数据同步完成,可终止程序。

      $ ./redis-sync -m 172.22.4.7:6379-t 172.22.4.16:6379
      2022/01/13 11:54:52 sync.go:76: [INFO] sync: master = "172.22.4.7:6379", target = "172.22.4.16:6379"
      2022/01/13 11:54:52 sync.go:103: [INFO] +
      2022/01/13 11:54:53 sync.go:105: [INFO] -
      2022/01/13 11:54:53 sync.go:103: [INFO] +
      2022/01/13 11:54:54 sync.go:109: [INFO] sync: runid = "628f499fa08c5575a36e96e360ba9785df907fba", offset = 167408
      2022/01/13 11:54:54 sync.go:110: [INFO] sync: rdb file = 44980187 (42.90mb)
      2022/01/13 11:54:54 sync.go:208: [INFO] sync: (r/f,s/f,s) = (read,rdb.forward,rdb.skip/rdb.forward,rdb.skip)
      2022/01/13 11:54:55 sync.go:250: [INFO] sync: rdb = 44980187 - [ 28.66%]   (r/f,s/f,s)=(4525564/101216,0/0,0)    ~  (4.32mb/-,-/-,-)  ~  speed=(4.32mb/101216,0/0,0)
      2022/01/13 11:54:56 sync.go:250: [INFO] sync: rdb = 44980187 - [ 39.44%]   (r/f,s/f,s)=(9375228/212349,0/0,0)    ~  (8.94mb/-,-/-,-)  ~  speed=(4.62mb/111133,0/0,0)
      2022/01/13 11:54:57 sync.go:250: [INFO] sync: rdb = 44980187 - [ 49.64%]   (r/f,s/f,s)=(13962748/317799,0/0,0)   ~  (13.32mb/-,-/-,-)     ~  speed=(4.38mb/105450,0/0,0)
      2022/01/13 11:54:58 sync.go:250: [INFO] sync: rdb = 44980187 - [ 61.01%]   (r/f,s/f,s)=(19074556/431463,0/0,0)   ~  (18.19mb/-,-/-,-)     ~  speed=(4.88mb/113664,0/0,0)
      2022/01/13 11:54:59 sync.go:250: [INFO] sync: rdb = 44980187 - [ 73.24%]   (r/f,s/f,s)=(24579580/557670,0/0,0)   ~  (23.44mb/-,-/-,-)     ~  speed=(5.25mb/126207,0/0,0)
      2022/01/13 11:55:00 sync.go:250: [INFO] sync: rdb = 44980187 - [ 81.99%]   (r/f,s/f,s)=(28511740/648490,0/0,0)   ~  (27.19mb/-,-/-,-)     ~  speed=(3.75mb/90820,0/0,0)
      2022/01/13 11:55:01 sync.go:250: [INFO] sync: rdb = 44980187 - [ 92.77%]   (r/f,s/f,s)=(33361404/757012,0/0,0)   ~  (31.82mb/-,-/-,-)     ~  speed=(4.62mb/108522,0/0,0)
      2022/01/13 11:55:02 sync.go:250: [INFO] sync: rdb = 44980187 - [100.00%]   (r/f,s/f,s)=(38079996/864711,0/0,0)   ~  (36.32mb/-,-/-,-)     ~  speed=(4.50mb/107699,0/0,0)
      2022/01/13 11:55:03 sync.go:250: [INFO] sync: rdb = 44980187 - [100.00%]   (r/f,s/f,s)=(42929660/976820,0/0,0)   ~  (40.94mb/-,-/-,-)     ~  speed=(4.62mb/112109,0/0,0)
  • 导出集群的 RDB 文件

    执行如下命令,可导出 Redis Standalone 集群的 RDB 文件。

    ./redis-dump -n 3 -m <password>@<Redis 地址:端口号> -o <xxx-file.rdb>

    命令行参数说明

    参数 说明

    <password>

    Redis Standalone 集群 default 用户密码,若没有配置,可不输入。

    <Redis 地址:端口号>

    填写 Redis Standalone 集群的访问地址与端口号,可参考前文步骤进行查询。

    <xxx-file.rdb>

    导出后文件名。

    -n

    表示允许多个 CPU 并行处理数据导入。

  • 通过 RDB 文件恢复集群

    执行如下命令,使用 RDB 文件恢复 Redis Standalone 集群。

    ./redis-restore -n 3 -i <xxx-file.rdb> -t <password>@<Redis 地址:端口>  [--db={DB_number}]

    命令行参数说明

    参数 说明

    <password>

    Redis Standalone 集群 default 用户密码,若没有配置,可不输入。

    <Redis 地址:端口号>

    填写待导入 RDB 文件的 Redis Standalone 集群的访问地址与端口号,可参考前文步骤进行查询。

    <xxx-file.rdb>

    导入的 RDB 文件名。

    [--db={DB_number}]

    为可选参数,表示可以单独导入文件中的指定 DB 编号里的缓存数据。

    -n

    表示允许多个 CPU 并行处理数据导入。