redis-migrate-tool工具实现异构redis集群的数据迁移

陆俊智
2023-12-01

redis-migrate-tool

redis-migrate-tool是唯品会开源的redis迁移工具,可以实现热迁移,实现aof/rdb文件迁移,可以全量或增量迁移,可以异构集群迁移,可以辅助check迁移后的数据质量,简直好用!
git地址:https://github.com/vipshop/redis-migrate-tool

迁移任务描述

两个测试服务器集群,需要将8亿数据从3节点集群迁移到5节点集群。
源集群:3主0从 172.18.5.9:6010 172.18.5.10:6020 172.18.5.11:6030
目的集群:5主0从 172.18.5.14:6060 172.18.5.15:6070 172.18.5.16:6080 172.18.5.35:6090 172.18.5.36:6100

因为特殊需求,测试服务器的配置比较高,物理机、全SSD盘、1T内存。

迁移过程

集群参数修改

首先该工具必须保持到源集群和目的集群的长连接,如果设置了redis的timeout参数,请将其关闭:

redis-cli -c -p 6010 -h 172.18.5.9 config set timeout 0
redis-cli -c -p 6020 -h 172.18.5.10 config set timeout 0
redis-cli -c -p 6030 -h 172.18.5.11 config set timeout 0

redis-cli -c -p 6060 -h 172.18.5.14 config set timeout 0
redis-cli -c -p 6070 -h 172.18.5.15 config set timeout 0
redis-cli -c -p 6080 -h 172.18.5.16 config set timeout 0
redis-cli -c -p 6090 -h 172.18.5.35 config set timeout 0
redis-cli -c -p 6100 -h 172.18.5.36 config set timeout 0

启动迁移任务

将迁移工具安装在172.18.5.14:/app/redis-migrate-tool
注意该工具耗用内存,不能安装在源集群的服务器上
配置文件/app/redis-migrate-tool/rmt.conf:

[source]
type: redis cluster
servers : 
-172.18.5.9:6010

[target]
type: redis cluster
servers :
-172.18.5.14:6060

[common]
listen: 0.0.0.0:8888
step: 3
threads: 30
mbuf_size: 1024

启动迁移任务:src/redis-migrate-tool -c rmt.conf -o log -d
执行后迁移任务会作为后台服务运行

监控迁移状态

# 看日志
vim log

# 看迁移任务的状态
redis-cli -c -p 8888 info

检查数据一致性

# 源数据量
redis-cli -c -p 6010 -h 172.18.5.9 dbsize
redis-cli -c -p 6020 -h 172.18.5.10 dbsize
redis-cli -c -p 6030 -h 172.18.5.11 dbsize

# 目的数据量
redis-cli -c -p 6060 -h 172.18.5.14 dbsize
redis-cli -c -p 6070 -h 172.18.5.15 dbsize
redis-cli -c -p 6080 -h 172.18.5.16 dbsize
redis-cli -c -p 6090 -h 172.18.5.35 dbsize
redis-cli -c -p 6100 -h 172.18.5.36 dbsize

# 抽样检查数据质量
src/redis-migrate-tool -c rmt.conf -o log -C redis_check

迁移结果

迁移8亿数据,耗时79分钟。

运行无误,最后的日志输出:

[2019-03-26 12:58:21.941] rmt_redis.c:1643 rdb file node172.18.5.10:6020-1553575005969542-590513.rdb write complete
[2019-03-26 13:18:28.633] rmt_redis.c:6601 Rdb file for node[172.18.5.11:6030] parsed finished, use: 1387 s.
[2019-03-26 13:18:33.586] rmt_redis.c:6709 All nodes' rdb file parsed finished for this write thread(0).
[2019-03-26 13:21:26.079] rmt_redis.c:6601 Rdb file for node[172.18.5.9:6010] parsed finished, use: 1391 s.
[2019-03-26 13:21:31.791] rmt_redis.c:6709 All nodes' rdb file parsed finished for this write thread(1).
[2019-03-26 13:25:13.356] rmt_redis.c:6601 Rdb file for node[172.18.5.10:6020] parsed finished, use: 1611 s.
[2019-03-26 13:25:18.501] rmt_redis.c:6709 All nodes' rdb file parsed finished for this write thread(2).

注意

  • 只有源和目的都是redis节点或者redis集群的时候才能使用redis_check做数据质量检查,并不支持aof和rdb
  • redis节点必须将timeout设置为0,否则报错
  • 该工具的报错非常简洁,不利于debug
 类似资料: