前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Redis集群收缩

Redis集群收缩

作者头像
吉林乌拉
发布2019-11-09 17:18:11
9810
发布2019-11-09 17:18:11
举报
文章被收录于专栏:吉林乌拉吉林乌拉

概念

收缩集群也就是缩减集群节点的规模,也就是需要将部分节点下线。下线节点的流程如下:

流程

1.首先需要确定下线节点是否有负责的槽,如果有则需要将槽迁移到其它节点中,保证节点下线后整个集群槽节点映射的完整性。

2.当下线节点不再负责槽或者本身是从节点时,就可以通过集群內其它节点忘记下线节点,这样当所有的节点都忘记了下线节点则该节点就可以正常关闭了。


下线迁移槽

下线节点需要把自己负责的槽迁移到其它节点,原理和上一篇介绍的集群扩容迁移槽一样。下面我们把6381和6383节点下线。

6381是主节点,并且如上图所示,我们知道该节点负责槽8192-12287。按照我们上面介绍的流程,我们在下线节点之前需要将该节点负责的槽迁移到其它节点中。并且收缩集群和集群扩容正好是相反的,我们需要将6381节点变为源节点,其它主节点变为目标节点。我们在迁移槽时,还是使用redis-trib reshard命令。因为reshard命令只能有一个目标节点,所以我们要迁移4096槽时,需要执行3次reshard命令。因为要保证迁移槽均匀的迁移到其它节点上,所以我们将上面4096个槽分别迁移1365、1365、1366个槽。

下面我们将6381的槽迁移到6379中:

当槽迁移完成后,我们可以查看6379节点已经负责了新迁移的槽了。


下面我们用同样的方式,我们将1365的槽迁移到6380中:

查看6380节点现在负责的槽。


我们还是用同样的方式,将1366的槽迁移到6382中:

继续查看6382节点负责的槽。

并且通过上图所示,我们已经知道了6381节点现在已经不负责任何槽了。下面我们继续流程的第二步骤,也就是将要下线的节点槽迁移完成后,还需要让集群忘记该下线的节点。


忘记节点

因为我们之前介绍过集群内的节点是不停的通过Gossip消息彼此交换节点状态,所以要让集群内其它节点忘记下线节点就是要让其它节点不再与要下线的节点进行Gossip消息交换。在Redis中我们使用cluster forget {downNodeId}命令。

当节点接受到cluster forget {downNodeId}命令后,会把nodeId指定的节点加入到禁用列表中,在禁用列表内的节点不再发送Gossip消息。禁用列表的有效期是60秒,超过60秒节点会继续参与消息交换。所以让要集群内其它节点忘记下线节点就是在这60秒之内操作。在实际的操作中如果使用cluster forget {downNodeId}命令下线节点时,因为会涉及到大量节点命令交互,并且还有60秒的限制,所以有可能会造成遗漏。所以在实际的操作中我们不会使用cluster forget {downNodeId}命令下线节点。我们会使用redis-trib.rb del-node {host:port} {downNodeId}命令。

备注:建议在使用redis-trib.rb del-node {host:port} {downNodeId}命令下线节点时,优先下线从节点,然后在下线主节点,以免不必要的复制发生。所以下面我们优先下线6383节点其次下线和6381节点。

当节点下线后,我们可以在次查看集群节点状态,我们此时发现刚刚的那个6381节点已经没有在集群中了。

这就是Redis收缩集群的全部内容,说白了也就是下线部分集群节点功能。这在我们实际的开发中很有必要,掌握集群扩容和收缩集群,可以为我们在实际的场景中做出从容应对。

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2019-11-07,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 吉林乌拉 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 概念
  • 流程
  • 下线迁移槽
  • 忘记节点
相关产品与服务
云数据库 Redis
腾讯云数据库 Redis(TencentDB for Redis)是腾讯云打造的兼容 Redis 协议的缓存和存储服务。丰富的数据结构能帮助您完成不同类型的业务场景开发。支持主从热备,提供自动容灾切换、数据备份、故障迁移、实例监控、在线扩容、数据回档等全套的数据库服务。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档