尚硅谷redis7 90-92 redis集群分片之集群扩容

news2025/6/4 1:57:54

90 redis集群分片之集群扩容

三主三从不够用了,进行扩容变为4主4从

问题:1.新建两个redis实例,怎么加入原有集群?2.原有的槽位分3段,又加进来一个槽位怎么算?

新建6387、6388两个服务实例配置文件+新建后启动

首先新建redisCluser6387.conf、redisCluser6388.conf文件:以redisCluser6387.conf为例

bind 0.0.0.0
daemonize yes
protected-mode no
port 6387
logfile "/myredis/cluster/cluster6387. log"
pidfile /myredis/cluster6387. pid
dir /myredis/cluster
dbfilename dump6387.rdb
appendonly yes
appendfilename "appendonly6387.aof"
requirepass 111111
masterauth 111111

cluster-enabled yes
cluster-config-file nodes-6387. conf
cluster-node-timeout 5000

启动87/88两个新的节点实例

此时他们自己都是独立的master

将新增的6387节点(空槽号)作为master节点加入原集群

将新增的6387作为master节点加入原有集群
redis-cli -a 密码 -- cluster add-node 市己实际IP地址:6387 自己实际IP地址:6381
6387 就是将要作为master新增节点
6381 就是原来集群节点里面的领路人,相当于6387拜拜6381的码头从而找到组织加入集群
redis-cli -a 111111 -- cluster add-node 192.168.111.174:6387 192.168.111.175:6381

检查集群情况第1次

使用 redis-cliRedis 集群节点进行健康检查(cluster check)

部分含义
redis-cliRedis 的命令行客户端工具
-a 111111使用密码 111111 连接(如果 Redis 开启了密码验证)
--cluster check检查集群状态
192.168.111.185:6381指定集群中任意一个节点(IP 和端口)作为入口

重新分派槽号(reshard)

命令:redis-cli -a 密码 -- cluster reshard IP地址:端口号
redis-cli -a 密码 -- cluster reshard 192.168.111.175:6381

部分含义
redis-cliRedis 客户端
-a 密码指定连接密码
--cluster reshard表示要对集群执行“重新分片”操作(即迁移 slot)
192.168.111.175:6381集群中任意一个节点(作为入口)

作用是:对 Redis 集群进行手动分片(reshard)操作,让某些槽(slots)从一个节点迁移到另一个节点。执行该命令后,它不会立刻迁移,而是进入交互模式,你需要输入更多信息。

执行流程(进入交互模式)后会问你:
  1. 要迁移多少个 slot?(如 1000)

    How many slots do you want to move (from 1 to 16384)?由于16384/4=4096 因此这里填4096

  2. 目标节点的 ID?

    谁来接收这些新分出来的槽位?找到6387的槽位ID进行输入

    What is the receiving node ID?

  3. 是否自动选择源节点?

    Please enter all the source node IDs. Type 'all' to use all the nodes as source nodes. 输入all

  4. 确认迁移(yes/no)

          输入yes

检查集群情况第2次

4主3从

槽号如何分派?

6387的槽号是3段,0-1364,5461-6826,10923-12287

为什么6387是3个新的区间,以前的master却还是连续的?
重新分配成本太高,所以前3家各自匀出来一部分,从6381/6382/6383三个旧节点分别匀出1364个坑位给新节点6387

为主节点6387分配从节点6388

命令:redis-cli -a 密码 -- cluster add-node ip:新slave端口 ip:新master端口 -- cluster-slave -- cluster-master-id 新主机节点ID

redis-cli -a 111111 -- cluster add-node 192.168.111.174:6388 192.168.111.174:6387 -- cluster-slave
-- cluster-master-id 4feb6a7ee0ed2b39ff86474cf4189ab2a554a40f ------- 这个是6387的编号,按照自己实际情况 

检查集群情况第3次

91 redis集群分片之集群缩容

1先清除从节点6388
2清出来的槽号重新分配给6381
3再删除6387
4 恢复成3主3从

目的:6387和6388下线

检查集群情况第一次,先获得从节点6388的节点ID

redis-cli -a 密码 -- cluster check 192.168.111.174:6388

从集群中将4号从节点6388删除

命令:redis-cli -a 密码 -- cluster del-node ip:从机端口 从机6388节点ID

redis-cli -a 111111 -- cluster del-node 192.168.111.174:6388 218e7b8b4f81be54ff173e4776b4f4faaf7c13da

将6387的槽号清空,重新分配,本例将清出来的槽号都给6381

redis-cli -a 111111 -- cluster reshard 192.168.111.175:6381

使用密码 111111 登录到 Redis 集群中的节点 192.168.111.175:6381,并对该 Redis 集群执行 手动分片迁移(reshard)操作

# 启动 reshard 工具
redis-cli -a 111111 --cluster reshard 192.168.111.175:6381

# 提示输入要迁移多少个槽(例如 1000)
How many slots do you want to move (from 1 to 16384)? 4096

# 提示输入目标节点的 Node ID(槽位迁移到哪个节点上)
What is the receiving node ID? 6381结点id,由它接受空出来的槽位

# 提示输入源节点 ID(要从哪些节点迁移槽位,可输入 all)
Please enter all the source node IDs.         6387结点id,告知删除6387
Type 'all' to use all the nodes as source nodes. all

Source node #1:4feb6a7ee0ed2b39ff86474cf4189ab2a554a40f
Source node #2:done

# 最后确认是否执行
Do you want to proceed with the proposed reshard plan (yes/no)? yes
 

检查集群情况第二次

redis-cli -a 111111 -- cluster check 192.168.111.175:6381

4096个槽位都指给6381,它变成了8192个槽位,相当于全部都给6381了,不然要输入3次,一锅端

6387变成了6381的从机

将6387删除

命令:redis-cli-a密码 -- cluster del-node ip:端口 6387节点ID

redis-cli -a 111111 -- cluster del-node 192.168.111.174:6387 4feb6a7ee0ed2b39ff86474cf4189ab2a554a40f

检查集群情况第三次,6387/6388被彻底祛除

redis-cli -a 111111 -- cluster check 192.168.111.175:6381

92 redis集群分片之小总结

集群常用操作命令和CRC16算法分析

不在同一个slot槽位下的多键操作支持不好,通识占位符登场

mget k1 k2 k3  //在集群环境下报错

不在同一个slot槽位下的键值无法使用mset,mget等多建操作

可以通过{}来定义同一组的概念,使Key中{}内相同内容的键值对放到一个slot槽位去。

将3个k整体打包到同一个组z存放到8157这一个槽位上。此时可以读取:


Redis集群有16384个哈希槽,每个key通过CRC16校验后对16384取模来决定放置哪个槽。集群的每个节点负责一部分hash槽

CRC16是由C语言源码编辑的

常用命令

集群是否完整才能对外提供服务的操作设置

        cluster-require-full-coverage

默认YES,现在集群架构是3主3从的redis cluster由3个master平分16384个slot,每个master的小集群负责1/3的slot,对应一部分数据。cluster-require-full-coverage: 默认值yes,即需要集群完整性。方可对外提供服务 通常情况,如果这3个小集群中,任何一个(1主1从)挂了,你这个集群对外可提供的数据只有2/3了,整个集群是不完整的,redis默认在这种情况下,是不会对外提供服务的。
如果你的诉求是,集群不完整的话也需要对外提供服务,需要将该参数设置为no,这样的话你挂了的那个小集群是不行了,但是其他的小集群仍然可以对外提供服务。

CLUSTER COUNTKEYSINSLOT 槽位数字编号

查看该槽位是占位还是空闲 1被占用 0没被占用

 

CLUSTER KEYSLOT 键名称

查看key应该存在哪个槽位上

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

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

相关文章

离散化算法的二分法应用

我们思考一个问题:其实这里的二分法回归本源也是基于下标映射的原理,只是实现是借助二分的形式。 在排序好的数组中对目标数值进行二分搜索,在 O(logn) 的时间复杂度内找到该数值是整体数据中的第几个。 具体的我们可以如下操作: …

半导体厂房设计建造流程、方案和技术要点-江苏泊苏系统集成有限公司

半导体厂房设计建造流程、方案和技术要点-江苏泊苏系统集成有限公司 半导体厂房的设计建造是一项高度复杂、专业性极强的系统工程,涉及洁净室、微振动控制、电磁屏蔽、特殊气体/化学品管理等关键技术。 一、设计建造流程: 1.需求定义与可行性分析 &a…

一种通用图片红色印章去除的工具设计

朋友今天下午需要处理个事情,问我有没有什么好的办法能够去除,核心问题是要去除图片上的印章。记得以前处理过类似的需求,photoshop操作比较简单,本质是做运算。这种处理方式有很多,比如现在流行的大模型,一…

RapidOCR集成PP-OCRv5_det mobile模型记录

该文章主要摘取记录RapidOCR集成PP-OCRv5_mobile_det记录,涉及模型转换,模型精度测试等步骤。原文请前往官方博客: https://rapidai.github.io/RapidOCRDocs/main/blog/2025/05/26/rapidocr%E9%9B%86%E6%88%90pp-ocrv5_det%E6%A8%A1%E5%9E%8B…

Dify理论+部署+实战

概述 一个功能强大的开源AI应用开发平台,融合后端即服务(Backend as Service)和LLMOps理念,使开发者能够快速搭建生产级的生成式AI应用。 核心优势 直观的用户界面:提供简洁明了的操作界面,使得用户能够…

内网穿透系列五:自建SSH隧道实现内网穿透与端口转发,Docker快速部署

​以下是对这个自建SSH隧道工具的简单介绍: 一款基于OpenSSH构建的内网穿透与端口转发工具,通过SSH隧道技术实现支持所有TCP协议通信,包括SSH、HTTP、HTTPS等各类应用提供灵活部署方式,特别支持Docker容器化快速部署开源工具地址…

桥梁进行3D建模时的数据采集、存储需求及技术参数

桥梁进行3D建模时的数据采集、存储需求及技术参数 1公里桥梁进行3D建模时的数据采集、存储需求及技术参数的详细分析 1. 照片数量估算 关键影响因素 桥梁类型:梁桥/拱桥/斜拉桥(结构复杂度不同) 建模精度:工程级(1-…

Transformer架构技术学习笔记:从理论到实战的完整解析

引言:重新定义序列建模的里程碑 2017年,Vaswani等人在论文《Attention Is All You Need》中提出的Transformer架构,彻底改变了自然语言处理领域的游戏规则。与传统RNN/LSTM相比,Transformer具有三大革命性特征: 全注意…

1、python代码实现与大模型的问答交互

一、基础知识 1.1导入库 torch 是一个深度学习框架,用于处理张量和神经网络。modelscope是由阿里巴巴达摩院推出的开源模型库。 AutoTokenizer 是ModelScope 库的类,分词器应用场景包括自然语言处理(NLP)中的文本分类、信息抽取…

Java开发经验——阿里巴巴编码规范实践解析6

摘要 本文深入解析了阿里巴巴编码规范在数据库设计和Java开发中的实践应用。详细阐述了数据库字段命名、类型选择、索引命名等规范,以及Java POJO类的对应规范。强调了字段命名的重要性,如布尔字段命名规则、表名和字段名的命名禁忌等。同时&#xff0c…

工业自动化实战:基于 VisionPro 与 C# 的机器视觉 PLC 集成方案

一、背景介绍 在智能制造领域,机器视觉检测与 PLC 控制的无缝集成是实现自动化生产线闭环控制的关键。本文将详细介绍如何使用 C# 开发上位机系统,实现 Cognex VisionPro 视觉系统与西门子 S7 PLC 的数据交互,打造高效、稳定的工业检测方案。…

C++ —— B/类与对象(中)

🌈个人主页:慢了半拍 🔥 创作专栏:《史上最强算法分析》 | 《无味生》 |《史上最强C语言讲解》 | 《史上最强C练习解析》|《史上最强C讲解》 🏆我的格言:一切只是时间问题。 ​ 目录 一、类的6个默认成员…

AXI协议乱序传输机制解析:提升SoC性能的关键设计

AXI 协议 Out-of-Order 传输机制 概述 AXI (Advanced eXtensible Interface) 协议支持乱序传输 (Out-of-Order) 机制,这是一种重要的性能优化特性,允许数据传输不按照发起顺序完成,从而提高总线带宽利用率和系统整体性能。 基本原理 通道…

Qt实现csv文件按行读取的方式

Qt实现csv文件按行读取的方式 场景:我有一个保存数据的csv文件,文件内保存的是按照行保存的数据,每行数据是以逗号为分隔符分割的文本数据。如下图所示: 现在,我需要按行把这些数据读取出来。 一、使用QTextStream文本流的方式读取 #include <QFile>void readfil…

进行性核上性麻痹健康护理全指南:从症状管理到生活照护

进行性核上性麻痹&#xff08;PSP&#xff09;是一种罕见的神经退行性疾病&#xff0c;主要影响运动、平衡及眼球运动功能&#xff0c;常表现为步态不稳、吞咽困难、眼球上视受限、情绪改变等。由于目前尚无根治方法&#xff0c;科学的健康护理对延缓病情进展、提升患者生活质量…

openFuyao开源发布,建设多样化算力集群开源软件生态

openFuyao 开源发布 随着 AI 技术的高速发展&#xff0c;算力需求呈爆发式增长&#xff0c;集群已成为主流生产方式。然而&#xff0c;当前集群软件生态发展滞后于硬件系统&#xff0c;面临多样化算力调度困难、超大规模集群软件支撑不足等挑战。这些问题的根源在于集群生产的…

第四十五节:目标检测与跟踪-Meanshift/Camshift 算法

引言 在计算机视觉领域,目标跟踪是实时视频分析、自动驾驶、人机交互等应用的核心技术之一。Meanshift和Camshift算法作为经典的跟踪方法,以其高效性和实用性广受关注。本文将从原理推导、OpenCV实现到实际案例,全面解析这两种算法的核心思想与技术细节。 一、Meanshift算法…

Docker Desktop无法在windows低版本进行安装

问题描述 因工作需要&#xff0c;现在一台低版本的window系统进行Docker Desktop的安装&#xff0c;但是安装过程当中出现了报错信息 系统版本配置 原因分析&#xff1a; 关于本机查看了系统的版本号&#xff0c;版本号如下为1909,但是docker Desktop要求的最低的win10版本…

2025年- H56-Lc164--200.岛屿数量(图论,深搜)--Java版

1.题目描述 2.思路 &#xff08;1&#xff09;主函数&#xff0c;存储图结构 &#xff08;2&#xff09;主函数&#xff0c;visit数组表示已访问过的元素 &#xff08;3&#xff09;辅助函数&#xff0c;用递归&#xff08;深搜&#xff09;&#xff0c;遍历以已访问过的元素&…

自证式推理训练:大模型告别第三方打分的新纪元

1. 传统验证体系的困境与技术跃迁的必然性 1.1 传统验证器的局限性 现有强化学习框架依赖显式验证器对答案进行二值化判定&#xff0c;这种模式在数学、代码等可验证领域表现优异。某厂内部数据显示&#xff0c;传统R1-Zero方法在代码生成任务中准确率达92%&#xff0c;但切换…