一、背景描述
此次验证来源于生产环境大数据量redis集群在扩容物理节点时候,迁移solt槽点耗时非常高,需要找到一种方法加速数据迁移
二、环境信息
此次测试只需要master节点,所以没有添加slave,只有3个主节点,并且灌入了测试数据,相关信息如下:
![[原创]加速Redis集群扩容slot槽点迁移方法 - 第1张 | 架构迷 [原创]加速Redis集群扩容slot槽点迁移方法 - 第1张 | 架构迷](http://www.jiagou.cc/wp-content/uploads/2026/07/image.png)
三、加速原理
默认我们使用的命令为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张 | 架构迷 [原创]加速Redis集群扩容slot槽点迁移方法 - 第2张 | 架构迷](http://www.jiagou.cc/wp-content/uploads/2026/07/image-1.png)
迁移完成耗时14:00 ~ 14:09 共约9分钟
系统资源消耗如下:
10.100.123.240:
![[原创]加速Redis集群扩容slot槽点迁移方法 - 第3张 | 架构迷 [原创]加速Redis集群扩容slot槽点迁移方法 - 第3张 | 架构迷](http://www.jiagou.cc/wp-content/uploads/2026/07/dca9640590a5789f6b0b464326baa2fa_image-2025-5-26_14-14-55_version1modificationDate1748240096000apiv2.png)
10.100.123.241:
![[原创]加速Redis集群扩容slot槽点迁移方法 - 第4张 | 架构迷 [原创]加速Redis集群扩容slot槽点迁移方法 - 第4张 | 架构迷](http://www.jiagou.cc/wp-content/uploads/2026/07/7e45669c8dbff7bcc9927763d8d624cc_image-2025-5-26_15-20-53_version1modificationDate1748244054000apiv2.png)
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张 | 架构迷 [原创]加速Redis集群扩容slot槽点迁移方法 - 第5张 | 架构迷](http://www.jiagou.cc/wp-content/uploads/2026/07/image-2.png)
迁移完成耗时14:26 ~ 14:29 共约3分钟
迁移完成后,key总数跟迁移前一致:
![[原创]加速Redis集群扩容slot槽点迁移方法 - 第6张 | 架构迷 [原创]加速Redis集群扩容slot槽点迁移方法 - 第6张 | 架构迷](http://www.jiagou.cc/wp-content/uploads/2026/07/image-3.png)
系统资源消耗如下:
10.100.123.240:
![[原创]加速Redis集群扩容slot槽点迁移方法 - 第7张 | 架构迷 [原创]加速Redis集群扩容slot槽点迁移方法 - 第7张 | 架构迷](http://www.jiagou.cc/wp-content/uploads/2026/07/823518d2e7d8a225d1b432424eb2ee70_image-2025-5-26_14-39-19_version1modificationDate1748241560000apiv2.png)
10.100.123.241:
![[原创]加速Redis集群扩容slot槽点迁移方法 - 第8张 | 架构迷 [原创]加速Redis集群扩容slot槽点迁移方法 - 第8张 | 架构迷](http://www.jiagou.cc/wp-content/uploads/2026/07/3d1f5facda98c1ca16c3b2cfef79a2af_image-2025-5-26_14-36-40_version1modificationDate1748241401000apiv2-4.png)
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张 | 架构迷 [原创]加速Redis集群扩容slot槽点迁移方法 - 第9张 | 架构迷](http://www.jiagou.cc/wp-content/uploads/2026/07/image-5.png)
迁移完成耗时14:52 ~ 14:54 共约2分钟
迁移完成后,key总数跟迁移前一致:
![[原创]加速Redis集群扩容slot槽点迁移方法 - 第10张 | 架构迷 [原创]加速Redis集群扩容slot槽点迁移方法 - 第10张 | 架构迷](http://www.jiagou.cc/wp-content/uploads/2026/07/image-6.png)
系统资源消耗如下:
10.100.123.240:
![[原创]加速Redis集群扩容slot槽点迁移方法 - 第11张 | 架构迷 [原创]加速Redis集群扩容slot槽点迁移方法 - 第11张 | 架构迷](http://www.jiagou.cc/wp-content/uploads/2026/07/64c947ffd930bb0d0f8f0bfcac05faf6_image-2025-5-26_14-57-43_version1modificationDate1748242664000apiv2.png)
10.100.123.241:
![[原创]加速Redis集群扩容slot槽点迁移方法 - 第12张 | 架构迷 [原创]加速Redis集群扩容slot槽点迁移方法 - 第12张 | 架构迷](http://www.jiagou.cc/wp-content/uploads/2026/07/65075e5319b910ef49834f6b370bc3ce_image-2025-5-26_14-59-32_version1modificationDate1748242773000apiv2.png)
五、测试结论
- --cluster-pipeline 命令可以加速solt槽点迁移速度,且迁移前后key 总数一致,但是此命令需要redis 5.0以上版本
- --cluster-pipeline =10 (默认)、--cluster-pipeline =100 、--cluster-pipeline =500 3个命令迁移耗时分别为9分钟、3分钟、2分钟
- 迁移耗时并没有根据参数值的增长10倍、50倍而节约相应时间,主要是参数定义的是cluster getkeysinslot命令一次从slot取出的key数量
- 我们模拟的数据量不大,所以单个slot槽点的key值不多,理论情况下,集群数据量越大,key分布越均匀,则--cluster-pipeline 参数越大,数据迁移耗时越短
- 加大--cluster-pipeline参数值 ,系统资源消耗会增长,但是资源消耗增长量并不大
- 如果集群有大量bigkey,则--cluster-pipeline 参数不应设置过大,会加大系统资源消耗,尤其是网卡流量,需要根据实际集群情况设置
- 添加此参数迁移数据,需要在业务低峰期操作,且确保服务器系统有足够资源
- 本文固定链接: http://www.jiagou.cc/1837/
- 转载请注明: 摘星怪 于 架构迷 发表
