首页 > 首页 > 数据库 > 非关系型数据库 > Redis > [原创]加速Redis集群扩容slot槽点迁移方法
2026
07-27

[原创]加速Redis集群扩容slot槽点迁移方法

一、背景描述

此次验证来源于生产环境大数据量redis集群在扩容物理节点时候,迁移solt槽点耗时非常高,需要找到一种方法加速数据迁移

二、环境信息

此次测试只需要master节点,所以没有添加slave,只有3个主节点,并且灌入了测试数据,相关信息如下:

[原创]加速Redis集群扩容slot槽点迁移方法 - 第1张  | 架构迷

三、加速原理

默认我们使用的命令为redis-cli --cluster reshard 10.100.123.240:7310

此次我们采用 --cluster-pipeline 参数操作

  • 定义cluster getkeysinslot命令一次取出的key数量,不传的话使用默认值为10

此次我们分别测试此参数为100、500的值时候,迁移速度以及对系统负载、系统流量的影响

四、验证过程

1、正常迁移( --cluster-pipeline = 10 )

迁移命令:/data1/redis_cluster_2/bin/redis-cli --cluster reshard 10.100.123.240:7310

从主节点10.100.123.240:7310 迁移5461个slot槽点到10.100.123.241:7311

[原创]加速Redis集群扩容slot槽点迁移方法 - 第2张  | 架构迷

迁移完成耗时14:00  ~  14:09  共约9分钟

系统资源消耗如下:

10.100.123.240:

[原创]加速Redis集群扩容slot槽点迁移方法 - 第3张  | 架构迷

10.100.123.241:

[原创]加速Redis集群扩容slot槽点迁移方法 - 第4张  | 架构迷

2、加速迁移( --cluster-pipeline = 100 )

迁移命令:/data1/redis_cluster_2/bin/redis-cli --cluster  reshard --cluster-pipeline 100 10.100.123.240:7310

从主节点10.100.123.241:7310 迁移5462个slot槽点到10.100.123.240:7311

[原创]加速Redis集群扩容slot槽点迁移方法 - 第5张  | 架构迷

迁移完成耗时14:26  ~  14:29  共约3分钟

迁移完成后,key总数跟迁移前一致:

[原创]加速Redis集群扩容slot槽点迁移方法 - 第6张  | 架构迷

系统资源消耗如下:

10.100.123.240:

[原创]加速Redis集群扩容slot槽点迁移方法 - 第7张  | 架构迷

10.100.123.241:

[原创]加速Redis集群扩容slot槽点迁移方法 - 第8张  | 架构迷

3、加速迁移( --cluster-pipeline = 500 )

迁移命令:/data1/redis_cluster_2/bin/redis-cli --cluster reshard --cluster-pipeline 500 10.100.123.240:7310

从主节点10.100.123.240:7311 迁移5462个slot槽点到10.100.123.241:7310

[原创]加速Redis集群扩容slot槽点迁移方法 - 第9张  | 架构迷

迁移完成耗时14:52  ~  14:54  共约2分钟

迁移完成后,key总数跟迁移前一致:

[原创]加速Redis集群扩容slot槽点迁移方法 - 第10张  | 架构迷

系统资源消耗如下:

10.100.123.240:

[原创]加速Redis集群扩容slot槽点迁移方法 - 第11张  | 架构迷

10.100.123.241:

[原创]加速Redis集群扩容slot槽点迁移方法 - 第12张  | 架构迷

五、测试结论

  • --cluster-pipeline 命令可以加速solt槽点迁移速度,且迁移前后key 总数一致,但是此命令需要redis 5.0以上版本
  • --cluster-pipeline =10 (默认)、--cluster-pipeline =100 、--cluster-pipeline =500 3个命令迁移耗时分别为9分钟、3分钟、2分钟
    1. 迁移耗时并没有根据参数值的增长10倍、50倍而节约相应时间,主要是参数定义的是cluster getkeysinslot命令一次从slot取出的key数量
    2. 我们模拟的数据量不大,所以单个slot槽点的key值不多,理论情况下,集群数据量越大,key分布越均匀,则--cluster-pipeline 参数越大,数据迁移耗时越短
  • 加大--cluster-pipeline参数值 ,系统资源消耗会增长,但是资源消耗增长量并不大
    1. 如果集群有大量bigkey,则--cluster-pipeline 参数不应设置过大,会加大系统资源消耗,尤其是网卡流量,需要根据实际集群情况设置
    2. 添加此参数迁移数据,需要在业务低峰期操作,且确保服务器系统有足够资源

最后编辑:
作者:摘星怪
这个作者貌似有点懒,什么都没有留下。

留下一个回复

你的email不会被公开。