Redis集群系列九 —— 集群伸缩之扩容

news2024/11/15 13:47:39

集群伸缩

Redis 集群提供了灵活的节点扩容和收缩方案,当有新节点加入时,需要把一部分数据迁移到新节点来达到集群的负载均衡;当旧节点退出时,需要把其上的数据迁移到其他节点上,确保该节点上的数据能够被正常访问。从而达到在不影响集群对外服务的情况下,为集群添加节点进行扩容或对节点进行缩容。

集群伸缩的核心其实是数据的迁移,在 Redis 集群中数据是以 slot 为单位的,Redis 集群的伸缩本质上也就是 slot 在不同机器节点间的迁移。

集群扩容

集群扩容简单来说就是增加节点。使用集群命令查看命令操作,如图:

一定要先了解集群命令的操作,因为接下来使用的语法都的集群命令有关。

添加节点

添加两个节点,分别为 30007、30008 两个节点。配置与前面创建集群类似,不再赘述,不懂的参考 集群搭建。

启动这两个节点,如图:

此时两个节点还是独立的两个节点,如图:

 接下需要将这两个节点添加到集群中。

加入集群

添加主节点

添加 30007 节点为集群中的主节点,执行集群命令如下:

redis-cli --cluster add-node 127.0.0.1:30007 127.0.0.1:30001

说明:第一个节点地址是需要添加的节点地址,第二个节点地址是集群里存在的任意节点地址。

再次查看集群状态,如图:

redis-cli -p 30001 cluster nodes

通过上面的状态信息发现,30007 节点已加入了集群,并成了 master 节点。接下来给 30007 节点添加从节点。

添加从节点

将节点 30008 加入集群,并设为 30007 从节点,执行命令如下:

redis-cli --cluster add-node 127.0.0.1:30008 127.0.0.1:30001 --cluster-slave --cluster-master-id 086be9d60012518ef3d7bb9958f99cbaff6cb567

说明:第一个节点地址是需要添加的节点地址,第二个节点地址是集群里存在的任意节点地址,最后一个参数是添加 30007 节点的 master-id。

再次查看集群状态

redis-cli -p 30001 cluster nodes

节点已经添加完成,但是集群并没有给新添加的节点分配槽位信息。

分配插槽

上面的图中可以看到,30007 和 30008 已正确添加到集群中,接下来就开始分配槽位。

分配插槽的基本思:从现有的某个节点上迁移部分插槽到新的节点上。我们将 30001、30002、30003 三个节点中的槽位分别迁出一些槽位给 30007。

假设平均分配每个节点的槽位,那么计算公式为: (16384/4)=4096 个槽位。

执行命令:

redis-cli --cluster reshard 127.0.0.1:30001

执行命令后会出现第一个提示,输入要转移槽位的数量 4096,为什么是 4096 不是其它的?这个就是上提到的计算公式。

第二个提示是接受槽位的 节点ID。

接下来,Redis 会提问从哪些源节点进行迁移,共有三中方案:

  • all:代表全部,也就是三个节点各转移一部分
  • 具体的id:目标节点的id
  • done:没有了

这里我们选择平均节点的槽位数,所以输入的是“all”。

最后,输入 yes 后开始移动插槽,如图:

迁移完成后,再次查看集群状态,如图:

查看集群详情,如图:

redis-cli --cluster info 127.0.0.1:30001

总结

启动一个集群模式下的 Redis 节点,然后通过与任意一个集群中的节点握手使得新的节点加入集群,最后再向新的节点分配它负责的 slot 以及向其迁移 slot 对应的数据。

由于 Redis 采用 Gossip 协议,所以可以让新节点与任意一个现有集群节点握手,一段时间后整个集群都会知道新节点的加入。

Redis 集群扩容主要分为如下几步:

  1. 准备新节点
  2. 加入集群
  3. 迁移slot到新节点

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/131649.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

ext4 extent详解3之内核源码流程讲解

本文在前两篇《ext4 extent详解1之示意图演示》和《ext4 extent详解2之内核源码详解》讲解ext4 extent 文章的基础上,本文从内核源码、实例演示等角度详细介绍ext4 extent B树的形成过程,希望看过本文的读者能理解ext4 extent B树的工作原理。 1 &#…

6.3 返回类型和return语句

文章目录无返回值函数有返回值函数值是如何被返回的不要返回局部对象的引用或指针引用返回左值列表初始化返回值主函数main的返回值递归返回数组指针声明一个返回数组指针的函数使用尾置返回类型使用decltypereturn语句终止当前正在执行的函数并将控制权返回到调用该函数的地方…

2022年终总结:点滴积累让我不再迷茫

今年是开始写作的第二年,如果说第一年是起步的话,今年就是开始有了一些小收获了,通过点滴积累让我知道积累的充实感,通过一点一点粉丝或阅读量的积累,增加写作的自信。 今年的收获 首先看一下今年的阅读量和粉丝量: …

cheunghonghui的【22年度总结】

cheunghonghui的【22年度总结】 好久好久没写博客了,看了下后台,上一次发表博客已经是一年半之前,趁着年底,抓紧时间写(水)一篇不然就要断更了。 【年度工作总结】 1、迭代了未知bug 2、修复了已知bug …

迎接2023,他真的想说“新年快乐”

😊你好,我是小航,一个正在变秃、变强的文艺倾年。 🔔2023年快要到来啦,再此祝大家诸事顺遂,所见所盼皆如愿。 🔔本文讲解如何使用Java演奏一首歌曲,一起卷起来叭! 众所周…

Faster RCNN网络源码解读(Ⅶ) --- RPN网络代码解析(中)RegionProposalNetwork类解析

目录 一、代码作用(rpn_function.py) 二、代码解析 2.1 RegionProposalNetwork类 2.1.1 初始化函数__init__ 2.1.2 正向传播过程forward 2.1.3 concat_box_prediction_layers函数 2.1.4 permute_and_flatten 2.1.5 filter_proposals 2.1.6 _…

2022 许些遗憾 年终总结

目录回首过去展望未来验收 2022年任务清单 ---------------------------》 2023年 flag2023 展望回首过去 此刻,想想这一年,口罩,38.5℃,艰难时刻,终究在2022最后十天被确诊了“阳”,没有备任何药&#xff…

Linux系列——Linux操作系统安装及服务控制(1)

作者简介:一名在校云计算网络运维学生、每天分享网络运维的学习经验、和学习笔记。 座右铭:低头赶路,敬事如仪 个人主页:网络豆的主页​​​​​​ 目录 前言 一.Linux介绍 1.Linux是什么? 2.Linux系统的优点 …

ArcGIS基础实验操作100例--实验31纠正栅格坐标

本实验专栏参考自汤国安教授《地理信息系统基础实验操作100例》一书 实验平台:ArcGIS 10.6 实验数据:请访问实验1(传送门) 高级编辑篇--实验31 纠正栅格坐标 目录 一、实验背景 二、实验数据 三、实验步骤 (1&…

2023新年祝福代码[css动画特效]

目录 前言 一、jQuery之家 二、2023新年祝福页面 2.1 我的博客和祝福语 2.2 我的博客头像和动态烟花 ​编辑 2.3 背景为动图 三、完整效果图 总结 前言 心态还需努力呀在这里祝大家新的一年里愿望都能实现。2022年已经过去,2022年的遗憾、不开心&#xff…

Spring学习笔记(1)

Spring系统架构 Spring Framework是Spring生态圈中最基础的项目,是其他项目的根基。 Spring Framework系统架构 学习线路 核心概念 IoC( Inversion of Control )控制反转 使用对象时,由主动new产生对象转换为由外部提供对象,此过程中对象…

DoIP协议从入门到精通—Alive check

惯例,为避免自己成为高知识低文化的汉子,分享一段喜欢的文字: 一、Socket 概念 在DoIP(Diagnostic on IP)概念中,通信的核心是Socket(套接字,实际通信的载体),是车载以太网在诊断范畴进行通信的句柄,Socket是支持TCP/IP协议的网络通信的基本操作单元。对于Socket: …

python多进程的理解 multiprocessing Process join run

最近看了下多进程。 一种接近底层的实现方法是使用 os.fork()方法,fork出子进程。但是这样做事有局限性的。比如windows的os模块里面没有 fork() 方法。 windows: 。linux: 另外还有一个模块:subprocess。这个没整过&#xff0c…

Canvas学习笔记 | 图片操作

图片素材 本篇文章的示例采用下图进行图片操作演示。 图片原始尺寸为:640px * 640px。 绘制图片 在Canvas中,我们使用drawImage()方法绘制图片。drawImage()方法有如下3种调用方式: 1.drawImage(image, dx, dy) 2.drawImage(image, dx, d…

【Android】带你细看Android input系统中ANR的机制

“本文基于Android13源码,分析Input系统的Anr实现原理“ 在文章之前,先提几个问题: 如果在activity任意周期(onCreate,onResume等),同步执行耗时超过5s(ANR时间)的任务,…

JavaWeb06 AJAX 黑马用Axios实现用户名已存在问题? JSON Vue Element

01-AJAX-概述-替换JSP 02-AJAX-快速入门 03-案例-验证用户是否存在 04-Axios-基本使用&请求方式别名(可读性不强) 练习:用Axios替换AJAX实现用户名是否存在功能 就把原来的.html 2.2步换成下面的响应代码即可 为啥就是不行呢????? 05-JSON-概述和基础语法 06-JSON-…

并发编程——4.共享模型之内存

目录4.共享模型之内存4.1.Java 内存模型4.2.可见性4.2.1.退不出的循环4.2.2.解决办法4.2.3.可见性 vs 原子性4.3.终止模式之两阶段终止模式4.3.1.错误思路4.3.2.两阶段终止模式4.4.同步模式之 Balking4.4.1.定义4.4.2.实现4.5.有序性4.5.1.指令级并行原理4.5.2.案例4.6.原理之 …

LVS详解

一、负载均衡:必不可少的基础手段 1.1 找更多的牛来拉车吧 当前大多数的互联网系统都使用了服务器集群技术,集群即将相同服务部署在多台服务器上构成一个集群整体对外提供服务,这些集群可以是Web应用服务器集群,也可以是数据库服务…

新冠“照妖镜”,体质弱点现原形。你是啥症状?2023年,请好好善待你的身体!

新冠“照妖镜”,体质弱点现原形。你是啥症状? 阳性之后的不同症状,是我们身体发出的【预警信号】。 病毒进入时,最先攻击我们自身最薄弱的地方。 2023年,请好好【善待】你的身体! 症状1 、头疼 出现头痛…

Kurganov-Tadmor二阶中心格式:理论介绍

简介 CFD的核心问题是求解双曲偏微分方程 ∂∂tu(x,t)∂∂xf(u(x,t))0\frac{\partial}{\partial t} u(x, t)\frac{\partial}{\partial x} f(u(x, t))0 ∂t∂​u(x,t)∂x∂​f(u(x,t))0在CFD中,双曲偏微分方程一般使用Godunov型迎风格式求解。但是这种迎风格式往往实…