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

集群伸缩

Redis 集群提供了灵活的节点扩容和收缩方案。在不影响集群对外服务的状况下,能够为集群添加节点进行扩容也能够下线部分节点进行缩容。
在这里插入图片描述node

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

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

扩容操做
1.准备新机器

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

2.加入集群

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

3.迁移槽和数据

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

槽是 Redis 集群管理数据的基本单位,首先须要为新节点制定槽的迁移计划,肯定原有节点的哪些槽须要迁移到新节点。迁移计划须要确保每一个节点负责类似数量的槽,从而保证各节点的数据均匀,好比以前是三个节点,如今是四个节点,把节点槽分布在四个节点上。
在这里插入图片描述
槽迁移计划肯定后开始逐个把槽内数据从源节点迁移到目标节点.
在这里插入图片描述
数据迁移过程是逐个槽进行的
流程说明:
1)对目标节点发送导入命令,让目标节点准备导入槽的数据。
2)对源节点发送导出命令,让源节点准备迁出槽的数据。
3)源节点循环执行迁移命令,将槽跟数据迁移到目标节点。
在这里插入图片描述
redis-trib 提供了槽重分片功能,命令以下:3d

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

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

redis-trib.rb reshard ip:6379

打印出集群每一个节点信息后,reshard 命令须要确认迁移的槽数量,这里咱们根据节点个数输入对应的值:
在这里插入图片描述
输入某个节点的节点 ID 做为目标节点,目标节点只能指定一个:
What is the receiving node ID xxxx
在这里插入图片描述
以后输入源节点的 ID,这里分别输入相应的节点 ID 最后用 done 表示结束:
数据迁移以前会打印出全部的槽从源节点到目标节点的计划,确认计划无误后输入 yes 执行迁移工做
redis-trib 工具会打印出每一个槽迁移的进度:
在这里插入图片描述
查看节点的信息cluster-node
在这里插入图片描述
输入 redis-trib.rb rebalance ip:port
在这里插入图片描述
主从节点设置
扩容之初咱们把639七、6398节点加入到集群,节点6397迁移了部分槽和数据做为主节点,但相比其余主节点目前尚未从节点,所以该节点不具有故障转移的能力。blog

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

收缩集群

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

相关文章
相关标签/搜索