Redis 7.x 系列【26】集群模式动态扩容、动态缩容

有道无术,术尚可求,有术无道,止于术。

本系列Redis 版本 7.2.5

源码地址:https://gitee.com/pearl-organization/study-redis-demo

文章目录

    • 1. 动态扩容
      • 1.1 安装、启动
      • 1.2 加入新节点
      • 1.3 分配哈希槽
      • 1.4 加入从节点
    • 2. 缩容
      • 2.1 删除从节点
      • 2.2 迁移哈希槽
      • 3.3 删除主节点

1. 动态扩容

Redis 集群支持动态增加节点实现扩容,提高集群容量和数据处理能力,接下来演示将之前三主三从扩容为四主四从。

1.1 安装、启动

新加节点网络访问地址如下 (一台服务器):

  • 主节点四:192.168.56.101:7000
  • 从节点四:192.168.56.101:7001

安装、修改配置、启动,这几个步骤和集群部署一样,这里就不赘述了。

1.2 加入新节点

查看节点信息(一台服务器):

[root@localhost bin]# redis-cli -a cluster123456 cluster nodes
Warning: Using a password with '-a' or '-u' option on the command line interface may not be safe.
b5bde236f14f21f530a7095aaef3a98109009324 192.168.56.101:6383@16383 slave e909dc338f4c2fc7687cf4426d3b95956a90a8a8 0 1721384436435 2 connected
724c7b874dc0c37a462cd5ab59325203344f8008 192.168.56.101:6379@16379 myself,slave ce27fa445e987f75bddeeb68fc6fe440678ad1bb 0 1721384432000 7 connected
ce27fa445e987f75bddeeb68fc6fe440678ad1bb 192.168.56.101:6382@16382 master - 0 1721384434000 7 connected 0-5460
e909dc338f4c2fc7687cf4426d3b95956a90a8a8 192.168.56.101:6380@16380 master - 0 1721384435431 2 connected 5461-10922
0f1d8d6459ac4252636cb4b8e1764de9e277411c 192.168.56.101:6390@16390 slave 9f9c30c3f73106e256fdec27264fc8129e1287fd 0 1721384435000 3 connected
9f9c30c3f73106e256fdec27264fc8129e1287fd 192.168.56.101:6381@16381 master - 0 1721384435000 3 connected 10923-16383

此时,集群节点并不包含新节点信息,需要使用 add-node 将新的主节点加入:

[root@localhost bin]# redis-cli -a cluster123456 --cluster add-node 192.168.56.101:7000 192.168.56.101:6380

命令说明:

  • cluster123456 :集群节点认证密码
  • 192.168.56.101:7000:新加入的主节点
  • 192.168.56.101:6380:负责扩容处理的节点(原先集群中的任意主节点)

打印日志日下:

在这里插入图片描述
重新查看集群信息,可以看到新节点:
在这里插入图片描述

1.3 分配哈希槽

新节点此时没有分配哈希槽,需要使用 reshard 命令重新分配集群中的哈希槽:

[root@localhost bin]# redis-cli -a cluster123456  --cluster reshard 192.168.56.101:6380

首先会提示分配多少哈希槽,这里有四个主节点 16384/4=4096 ,所有输入 4096

[OK] All 16384 slots covered.
How many slots do you want to move (from 1 to 16384)? 4096

接着输入新节点的 ID ,将分配的哈希槽给新节点(cluster nodes命令查看):

What is the receiving node ID? a95a0a529f62ff1793bf2c2cfc92ec51c96e1268

接着提示从哪些节点移出这 4096 个哈希槽,这些输入 all 表示从所有节点平摊移出:

Please enter all the source node IDs.
to use all the nodes as source nodes for the hash slots.
Type'done'
entered allthe source nodes IDs.
Source node #1:all

最后会打印一些迁移日志:

在这里插入图片描述
重新查看节点信息,可以看到新节点被分配了哈希槽:
在这里插入图片描述新节点的哈希槽,并不是连续的,分为了三个区间,直接截取了其他节点的部分哈希槽,如果是全部重新分配,需要全部迁移,这样成本高且效率很低。

1.4 加入从节点

接着使用 add-node 命令将新的从节点,加入到集群中:

[root@localhost bin]# redis-cli -a cluster123456 --cluster add-node 192.168.56.101:7001 192.168.56.101:7000 --cluster-slave --cluster-master-id a95a0a529f62ff1793bf2c2cfc92ec51c96e1268

命令说明:

  • cluster123456 :集群节点认证密码
  • 192.168.56.101:7001:新加入的从节点
  • 192.168.56.101:7000:新从节点对应的主节点
  • a95a0a529f62ff1793bf2c2cfc92ec51c96e1268:主节点 ID

打印日志如下:
在这里插入图片描述

重新查询节点信息,可以看到新的主从节点都加入成功:

在这里插入图片描述

2. 缩容

Redis 集群支持动态删除节点实现缩容,从集群中移除节点,将分配给该节点的哈希槽移动到其他现有节点上。接下来演示将上面的四主四从恢复为三主三从。

2.1 删除从节点

查看将被移除节点的信息:

[root@localhost bin]# redis-cli -a cluster123456 cluster nodes
Warning: Using a password with '-a' or '-u' option on the command line interface may not be safe.
a95a0a529f62ff1793bf2c2cfc92ec51c96e1268 192.168.56.101:7000@17000 master - 0 1721394340000 8 connected 0-1364 5461-6826 10923-12287
78d33242164ad02901903b195f54aaa1b0e14420 192.168.56.101:7001@17001 slave a95a0a529f62ff1793bf2c2cfc92ec51c96e1268 0 1721394340538 8 connected

首先需要删除从节点,使用 del-node 命令,输入从节点的地址、ID

[root@localhost bin]# redis-cli -a cluster123456 --cluster del-node 192.168.56.101:7001 78d33242164ad02901903b195f54aaa1b0e14420

打印日志如下:
在这里插入图片描述

查看节点信息,可以看到从节点已经被移除:

在这里插入图片描述

2.2 迁移哈希槽

删除主节点之前,需要将当前节点中的哈希槽迁移出去,这里直接将被删除节点中的 4096 个哈希槽,全部移入到 6380 节点中,使用 reshard 命令重新分配集群中的哈希槽:

[root@localhost bin]# redis-cli -a cluster123456  --cluster reshard 192.168.56.101:6380

输入4096

[OK] All 16384 slots covered.
How many slots do you want to move (from 1 to 16384)? 4096

接着输入 6380 节点的 ID 接收哈希槽 (cluster nodes命令查看):

What is the receiving node ID? e909dc338f4c2fc7687cf4426d3b95956a90a8a8

接着提示,从哪些节点移出这 4096 个哈希槽,这里输入删除节点的 ID,输入 done ,表示该节点将被删除:

Please enter all the source node IDs.
to use all the nodes as source nodes for the hash slots.
Type'done'
entered allthe source nodes IDs.
Source node #1: e909dc338f4c2fc7687cf4426d3b95956a90a8a8
Source node #2: done

在这里插入图片描述

3.3 删除主节点

使用 del-node 命令删除主节点:

redis-cli -a cluster123456 --cluster del-node 192.168.56.101:7000 a95a0a529f62ff1793bf2c2cfc92ec51c96e1268

查看节点信息,可以看到主节点也被移除了:
在这里插入图片描述

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

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

相关文章

文献解读-群体测序-第二十三期|《一项前瞻性队列研究中膀胱癌的驱动和乘客DNA甲基化非侵入诊断和监测》

关键词:群体测序;基因测序;变异检测; 文献简介 标题(英文):Non-invasive diagnosis and surveillance of bladder cancer with driver and passenger DNA methylation in a prospective cohort…

Ryujinx(Switch模拟器) v1.1.1361 汉化版

Ryujinx 是一款免费、开源的 Nintendo Switch 模拟器,它可以在电脑上模拟 Nintendo Switch 游戏机的运行环境,让玩家们能够在 PC 上畅玩 Switch 游戏。Ryujinx 支持大部分 Nintendo Switch 游戏,包括 The Legend of Zelda: Breath of the Wil…

生成式AI的双重路径:Chat与Agent的融合与竞争

文章目录 每日一句正能量前言整体介绍对话系统(Chat)自主代理(Agent)结论 技术对比技术差异优势与劣势技术挑战结论 未来展望发展趋势Chat与Agent的前景社会和经济影响结论 后记 每日一句正能量 在避风的港湾里,找不到…

【Qt 】JSON 数据格式详解

文章目录 1. JSON 有什么作用?2. JSON 的特点3. JSON 的两种数据格式3.1 JSON 数组3.2 JSON 对象 4. Qt 中如何使用 JSON 呢?4.1 QJsonObject4.2 QJsonArray4.3 QJsonValue4.4 QJsonDocument 5. 构建 JSON 字符串6. 解析 JSON 字符串 1. JSON 有什么作用? &#x…

四、单线程多路IO复用+多线程业务工作池

文章目录 一、前言1 编译方法 二、单线程多路IO复用多线程业务工作池结构三、重写Client_Context类四、编写Server类 一、前言 我们以及讲完单线程多路IO复用 以及任务调度与执行的C线程池,接下来我们就给他结合起来。 由于项目变大,尝试解耦项目&#…

谷粒商城实战笔记-66-商品服务-API-品牌管理-JSR303数据校验

文章目录 一,引入JSR 303依赖二,接口参数启用校验功能三,给字段添加校验注解NotBlank 和 NotNull 的区别NotBlankNotNull比较 四,BindingResult获取校验结果五,自定义错误消息六,其他校验规则 在Web应用程序…

【AIGC】构建自己的谷歌搜索引擎服务并使用

一、谷歌 谷歌的搜索引擎需要自己创建服务才能启用检索api。(需自行翻墙和创建自己的谷歌账号) 1.1 API服务创建 1)登陆https://console.cloud.google.com/: 2) 选择新建项目,取号项目名即可(比如:Olin…

【Java】/* 异常 */

目录 ​编辑 一、错误和异常的体系 二、异常 2.1 异常的分类 2.2 异常的处理形式 2.3 如何抛出异常 2.4 捕获处理异常 2.5 finally存在的意义 2.6 异常处理流程总结 2.7 自定义异常类 一、错误和异常的体系 1. Java中所有的异常和错误都有对应的类来进行描述。 2. 由…

【日常记录】【JS】JS中查询参数处理工具URLSearchParams

文章目录 1. 引言2. URLSearchParams2.1 URLSearchParams 的构造函数2.2 append() 方法2.3 delete() 方法2.4 entries() 方法2.5 forEach() 方法2.6 get() 方法2.7 getAll() 方法2.8 has() 方法2.9 keys() 方法2.10 set() 方法2.11 toString() 方法2.12 values() 方法 参考链接…

Protobuf序列化原理学习

Protobuf 序列化原理学习 1. 基本概念 消息:由于Protocp Buffer主要用于数据存储、网络通信的场景,将结构化的数据(数据结构或对象)进行序列化,生成二进制串来保存或传输。把要序列化的结构化数据称为**消息**。 T -…

Activiti学习之入门个人任务(07)

这里写目录标题 一、分配任务负责人1.1 固定分配1.2 表达式分配1.2.1 UEL表达式1.2.2 使用流程变量分配任务1.2.3 注意事项 1.3 监听器分配 二、查询任务2.1 查询负责人待办2.2 关联businessKey 三、办理任务 一、分配任务负责人 1.1 固定分配 在进行业务流程建模时指定固定的…

vdb:虚拟数据库

将文件虚拟成数据库,序列化写入、反序列化读取、直接读取。

离散型制造业中,MES系统的应用场景

在离散型制造业中,MES(制造执行系统)系统的应用场景极为丰富且关键,它贯穿于整个生产过程的各个环节,从生产计划到生产执行,再到质量控制和物料管理,都发挥着不可替代的作用。以下是离散制造业中…

本地化部署一个简单的AI大模型,Llama3.1

7 月 23 日消息,Meta 今晚正式发布llama3.1,提供 8B、70B 及 405B 参数版本。 Meta 称 4050 亿参数的 Llama 3.1-405B 在常识、可引导性、数学、工具使用和多语言翻译等一系列任务中,可与 GPT-4、GPT-4o、Claude 3.5 Sonnet 等领先的闭源模型…

收藏:高性价比https证书

在当今的数字化世界中,网络安全已经成为了每个网站所有者的首要关注点,为了保护网站的安全,防止数据被窃取或篡改,使用SSL证书已经成为了一种标准的做法,SSL证书是一种用于加密网站和用户之间数据传输的证书&#xff0…

[240726] Mistral AI 发布新一代旗舰模型 | Node.js 合并 TypeScript 文件执行提案

目录 Mistral AI 发布新一代旗舰模型:Mistral Large 2Node.js 合并 TypeScript 文件执行提案:--experimental-strip-types Mistral AI 发布新一代旗舰模型:Mistral Large 2 Mistral AI 宣布推出新一代旗舰模型 Mistral Large 2,该…

2024新版 黑马程序员《C++零基础入门》笔记——第一章19 cin中文乱码的解决

1.cin中文乱码的解决 2.代码实践 # include "iostream" # include "windows.h" using namespace std;int main() {SetConsoleOutputCP(CP_UTF8);string str;cin >> str;cout << str << endl;return 0; } 注意&#xff0c;勾选之后以后也…

【echarts】中如何设置曲线展示最新值、最大值、最小值

需要用到的属性&#xff1a;图表标注 series-line. markPoint 默认可以通过 type直接标注&#xff1a;‘min’ 最小值、‘max’ 最大值、‘average’ 平均值。 markPoint: {data: [{type: max},{type: min}]}如何展示最新值 如果要展示最新值得话&#xff0c;需要设置 标注…

如何让C++程序自动生成dump文件?以及如何分析dump文件?

目录 1、API函数SetUnhandledExceptionFilter介绍 2、调用SetUnhandledExceptionFilter设置异常处理函数 3、调用MiniDumpWriteDump函数导出包含异常上下文的dump文件 4、dump文件的多种生成方式 5、使用Windbg分析dump文件 6、最后 C++软件异常排查从入门到精通系列教程…

数业智能心大陆:定制你的专属心理健康方案

在快速变化的社会中&#xff0c;随着人们对自我健康认识的不断加深&#xff0c;心理健康已成为影响生活质量的关键因素&#xff0c;许多成年人在其一生中会遇到心理健康问题。在探索人类心理奥秘的旅程中&#xff0c;我们发现&#xff0c;每个人的心理状态和需求都是独一无二的…