# redis集群节点缩容

> 作者/来源: UCloud 运营管理员
> 发布时间: 2023-01-11T05:20:00.000Z
> 分类: 推荐奖励
> 标签: 安全, 存储
> 原文链接: http://117.50.162.249:3000/yun/articles/891

---

# redis集群节点缩容

> 来源: https://www.ucloud.cn/yun/129949.html
> 作者: IT那活儿
> 发布日期: 发布于2023-01-11 13:20

redis集群节点缩容

一. 结构及详细说明

**Redis集群大致架构图：**

一组RedisCluster是由多个Redis实例组成，官方推荐使用6实例，其中3个为主节点，3个为从结点。一旦有主节点发生故障的时候，RedisCluster可以选举出对应的从结点成为新的主节点，继续对外服务，从而保证服务的高可用性。那么对于客户端来说，知道对应的key是要路由到哪一个节点呢？原来，RedisCluster把所有的数据划分为16384个不同的槽位，可以根据机器的性能把不同的槽位分配给不同的Redis实例，对于Redis实例来说，他们只会存储部门的Redis数据，当然，槽的数据是可以迁移的，不同的实例之间，可以通过一定的协议，进行数据迁移。

缩容节点就是通过槽的迁移来实现。

![](https://ucloud-blog.cn-bj.ufileos.com/articles/129949/images/129949_000.png)

二. 操作过程

### **1、槽迁移**

收缩集群意味着缩小规模，需要从现有集群中安全下线部分节点。流程说明：  
确认下线节点是否有负责的槽，如果有，需要把槽迁移到其他节点，保证节点下线后整个集群槽节点映射的完整性。  
当下线节点不在负责槽或本身是从节点时，可以通知其他节点忘记下线节点，当所有节点忘记下线节点后该节点可以正常关闭。  
例：下线6381和6384节点  
6381节点负责槽位12288-16383，下线之前需要迁移槽位，源节点需要把自身负责的槽位均匀的迁移到其他主节点上，直接使用redis-trib.tbreshard命令完成槽迁移，每次迁移只能有一个目标节点。

![](https://ucloud-blog.cn-bj.ufileos.com/articles/129949/images/129949_001.png)

./redis-trib.rbreshard 192.168.100.77:6381

![](https://ucloud-blog.cn-bj.ufileos.com/articles/129949/images/129949_002.png)

输入迁移目的节点6379的ID

![](https://ucloud-blog.cn-bj.ufileos.com/articles/129949/images/129949_003.png)

输入迁移源节点6381的ID，输入done确认

![](https://ucloud-blog.cn-bj.ufileos.com/articles/129949/images/129949_004.png)

确认无误后输入yes开始迁移

![](https://ucloud-blog.cn-bj.ufileos.com/articles/129949/images/129949_005.png)

clusternodes可以看到6379接管了1365个槽12288-13652

![](https://ucloud-blog.cn-bj.ufileos.com/articles/129949/images/129949_006.png)

把槽迁移到6380，重复上述过程

![](https://ucloud-blog.cn-bj.ufileos.com/articles/129949/images/129949_007.png)

把槽迁移到6385，重复上述过程

![](https://ucloud-blog.cn-bj.ufileos.com/articles/129949/images/129949_008.png)

可以看到，6381不在负责槽

![](https://ucloud-blog.cn-bj.ufileos.com/articles/129949/images/129949_009.png)

### **2、忘记节点**

使用redis-trib.rb+ del-node + 集群ip:port+ 下线节点ID命令忘记节点 对6381和6384节点进行下线操作

![](https://ucloud-blog.cn-bj.ufileos.com/articles/129949/images/129949_010.png)

192.168.100.77:6379>cluster nodes查看节点已下线

![](https://ucloud-blog.cn-bj.ufileos.com/articles/129949/images/129949_011.png)

三.  总结

1. redis缩容一般有两种方法，一种是在线缩容，一种是离线缩容，从业务的角度来说，在线缩容是最方便的方法，但在线缩容有个问题是，过程中如果某个槽正在操作会导致迁移槽是发送错误，需要人工干预。
2. 离线缩容是比较快速的方法，人工干预比较少由集群自动分配哈希槽，缺点是需停掉业务。

![](https://ucloud-blog.cn-bj.ufileos.com/articles/129949/images/129949_012.png)

END

![](https://ucloud-blog.cn-bj.ufileos.com/articles/129949/images/129949_013.png)