redis-Cluster第四篇集群的伸缩调优

集群伸缩

Redis 集群提供了灵活的节点扩容和收缩方案。在不影响集群对外服务的情况下,可以为集群添加节点进行扩容也可以下线部分节点进行缩容。

1、槽和数据与节点的对应关系

当主节点分别维护自己负责的槽和对应的数据,如果希望加入1个节点实现集群扩容时,需要通过相关命令把一部分槽和数据迁移给新节点。
![
](https://img-blog.csdnimg.cn/2...
上面图里的每个节点把一部分槽和数据迁移到新的节点newredis,每个节点负责的槽和数据相比之前变少了从而达到了集群扩容的目的,集群伸缩=槽和数据在节点之间的移动

扩容操作
1.准备新机器

需要提前准备好新节点并运行在集群模式下,新节点建议跟集群内的节点配置保持一致,便于管理统一。

2.加入集群

通过 redis-trib.rb add-node ip:6397 ip:6391 实现节点添加。

3.迁移槽和数据

加入集群后需要为新节点迁移槽和相关数据,槽在迁移过程中集群可以正常提供读写服务,迁移过程是集群扩容最核心的环节,下面详细讲解。

槽是 Redis 集群管理数据的基本单位,首先需要为新节点制定槽的迁移计划,确定原有节点的哪些槽需要迁移到新节点。迁移计划需要确保每个节点负责相似数量的槽,从而保证各节点的数据均匀,比如之前是三个节点,现在是四个节点,把节点槽分布在四个节点上。

redis-trib 提供了槽重分片功能,命令如下:

redis-trib.rb reshard host:port --from  --to  --slots  --yes --timeout  --pipeline 

参数说明:
·host:port:必传参数,集群内任意节点地址,用来获取整个集群信息。
·--from:制定源节点的 id,如果有多个源节点,使用逗号分隔,如果是all源节点变为集群内所有主节点,在迁移过程中提示用户输入。
·--to:需要迁移的目标节点的id,目标节点只能填写一个,在迁移过程中提示用户输入。
·--slots:需要迁移槽的总数量,在迁移过程中提示用户输入。
·--yes:当打印出 reshard 执行计划时,是否需要用户输入yes确认后再执行 reshard。
·--timeout:控制每次 migrate 操作的超时时间,默认为60000毫秒。
·--pipeline:控制每次批量迁移键的数量,默认为10。
迁移操作

redis-trib.rb reshard ip:6379

打印出集群每个节点信息后,reshard 命令需要确认迁移的槽数量,这里我们根据节点个数输入对应的值:

主从节点设置
扩容之初我们把6397、6398节点加入到集群,节点6397迁移了部分槽和数据作为主节点,但相比其他主节点目前还没有从节点,因此该节点不具备故障转移的能力。

这时需要把节点6398作为6397的从节点,从而保证整个集群的高可用。使用 cluster replicate{masterNodeId}命令为主节点添加对应从节点。

收缩集群

收缩集群意味着缩减规模,需要从现有集群中安全下线部分节点,下线节点过程如下

你可能感兴趣的:(正则表达式,redis,redis-cluster)