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).