当前位置: 首页 > news >正文

【Redis进阶】Redis集群

目录

Redis集群的诞生

单节点Redis的局限性

1.存储容量限制

2.性能瓶颈

3.单点故障

4.扩展性能差

分布式系统发展的需要

1.海量数据处理

2.高性能要求

3.弹性扩展能力

Redis集群(cluster)

如图所示案例

Redis集群设计

什么是数据分片(data sharding)

数据访问如何定位到具体的节点

Redis集群工作原理

Redis集群搭建

Redis集群的优缺点

优点

缺点

Redis集群的常见问题及优化


Redis集群的诞生

在前面文章,我们介绍过Redis的主从复制的诞生是为了实现读写分离,提高数据的安全性;

哨兵机制的诞生是为了主节点宕机,可以自动选择一个从节点替换掉主节点,避免了人工干预。

虽然主从复制+哨兵模式采用了多节点,但是它们存在的目的主要是解决容灾问题,并不是性能问题。

随着Redis在各类高并发,高性能系统中的广泛应用,单节点Redis的局限性逐渐显现出来,而Redis集群正式为了解决这些局限性而设计的。

单节点Redis的局限性

1.存储容量限制

  • Redis 是基于内存的存储系统,因此其存储容量受限于单台机器的内存大小。对于一些需要存储海量数据的应用,单节点 Redis 的内存容量很快就会成为瓶颈。

2.性能瓶颈

  • 随着系统规模的扩大,单节点 Redis 的 CPU 和网络带宽可能无法满足不断增加的读写请求。尤其在高并发场景下,单节点 Redis 容易出现性能瓶颈,影响整个系统的响应速度。

3.单点故障

  • 虽然 Redis 提供了主从复制机制,但在单节点模式下,如果主节点出现故障,系统的可用性就会受到影响。即使通过 Redis Sentinel 可以实现自动故障转移,但在大规模应用场景中,仍然需要更高的可靠性和容错能力。

4.扩展性能差

  • 在单节点模式下,Redis 的扩展性有限。当需要扩展存储容量或提升性能时,通常只能通过增加单台机器的硬件资源来实现,而无法通过简单地增加节点来水平扩展。

分布式系统发展的需要

随着互联网应用的迅猛发展,越来越多的系统需要处理海量数据和高并发请求。这些系统的特点包括:

1.海量数据处理

  • 现代应用(如社交网络、电商平台、物联网等)通常需要处理和存储庞大的数据量,这些数据往往需要在内存中进行快速读写操作。

2.高性能要求

  • 许多系统需要提供 7x24 小时不间断的服务,容忍节点故障成为了高可用性的基本要求。

3.弹性扩展能力

  • 随着业务的发展,系统的负载可能会急剧增加。因此,系统需要能够快速、无缝地扩展以应对流量高峰。

正是在这样的大数据高并发的需求之下,Redis 集群方案应运而生。redis集群是对redis的水平扩容,即启动m个redis节点,将整个数据分布存储在这个m个节点中,每个节点存储总数据的1/m。

Redis集群(cluster)

如图所示案例

如图所示:3主3从组成的集群,每台master承担三分之一的请求和数据。集群中节点之间使用gossip协议进行通信,实现了去中心化。

Redis集群设计

提到集群,必然离不开数据分片。

什么是数据分片(data sharding)

数据分片(Data Sharding)是一种将数据集分割成更小的部分(称为"片"或"分片")并分布到多个存储单元(如数据库或服务器)上的技术。每个分片只存储数据集的一部分,从而使得系统能够水平扩展,处理更大规模的数据量和更高的并发请求。

Redis Cluster使用数据分片实现key的存储分布

Redis Cluster将集群划分为16384个槽位,数据库中所有的key进行hash计算后,都会落到16384个槽位中的其中一个槽位。那么key是如何定位到哪个槽位的呢,可以通过公式进行计算:CRC16(key)%16384,得到的值就是槽位;16384个槽位全部分配给cluster中的节点,每个节点维护自己的槽位,同时每个节点也会存储其他节点维护的槽位信息。

数据访问如何定位到具体的节点

如上图所示

  • 1.如果客户端发送过来的key刚好在节点1所维护的范围之内,直接返回结果
  • 2.如果客户端发送过来的key不在节点1所维护的范围之内,节点1会返回moved命令,告诉客户端所请求的key在节点2所维护的槽内,客户端收到命令之后,向正确的节点重新发送获取命令,拿到返回结果。

Redis集群工作原理

1.数据分片

当客户端发送写入请求时,Redis 集群使用 CRC16 算法对键进行哈希运算,得到一个哈希值,然后对 16384 取模,确定该键对应的槽。集群中的某个节点负责这个槽的所有键。

2.请求路由

客户端可以直接连接到集群中的任意节点。当请求的数据不在当前节点上时,该节点会返回一个 MOVED 响应,指引客户端向正确的节点发送请求。

3.故障检测与自动故障转移

Redis 集群中的每个节点都会通过 Gossip 协议交换彼此的状态。如果一个主节点被大多数主节点判定为不可用(称为主观下线,SDOWN),集群会尝试将其从节点提升为主节点,并接管它负责的槽(称为客观下线,ODOWN)。

4.数据一致性

Redis 集群采用异步复制机制,从节点异步地复制主节点的数据。如果主节点故障,部分数据可能丢失,尽管如此,Redis 集群仍然保证大多数情况下的高可用性和数据完整性。

Redis集群搭建

要搭建 Redis 集群,通常需要至少 6 个 Redis 实例(3 个主节点,3 个从节点)。以下是搭建 Redis 集群的基本步骤:

1.准备Redis实例

  • 安装 Redis,并配置多个实例,每个实例配置不同的端口和 cluster-enabled yes 选项。

2.配置节点

  • 每个 Redis 实例的配置文件(如 redis.conf)中需要设置 cluster-enabled yes,并指定 cluster-config-filecluster-node-timeout

3.启动Redis实例

  • 启动所有 Redis 实例,使它们处于独立运行状态。

4.创建集群

  • 使用 Redis 自带的 redis-cli 工具执行 redis-cli --cluster create 命令,将多个 Redis 实例组成一个集群。
  • 在执行此命令时,需要指定主从节点,并划分 16384 个槽给各个主节点。

5.检查集群状态

  • 使用 redis-cli --cluster check 命令检查集群状态,确保所有节点正确配置并互相连接。

Redis集群的优缺点

优点

  • 可扩展性:通过数据分片,Redis 集群能够水平扩展,将数据分布在多个节点上,从而扩展存储容量和吞吐量。

  • 高可用性:通过主从复制和自动故障转移,Redis 集群能够在主节点故障时自动恢复,并继续提供服务。

  • 无中心架构:Redis 集群采用无中心架构,避免了单点故障,使得整个集群更加稳定和健壮。

缺点

  • 复杂性增加:与单节点 Redis 相比,Redis 集群的部署和管理更加复杂,特别是在处理节点故障和数据恢复时。

  • 数据一致性问题:由于采用异步复制,Redis 集群在主节点故障时可能会丢失部分数据。

  • 槽迁移:在动态扩展或缩减集群时,槽的迁移可能会导致暂时性的服务中断。

Redis集群的常见问题及优化

1.避免网络分区

  • 网络分区可能导致集群的部分节点不可用。可以通过设置合理的超时时间和定期的节点检查来减少网络分区的影响。

2.优化读写性能

  • 为了提高读写性能,可以通过增加从节点数量和使用客户端的智能路由机制来优化读写操作的分布

3.数据重分片

  • 在扩展或缩减集群时,需要对槽进行重新分配。为了减少对服务的影响,可以使用 Redis 提供的工具 redis-trib 或者 redis-cli 进行平滑的数据迁移。

4.监控与告警

  • 使用监控工具(如 Redis Sentinel、Prometheus 等)实时监控 Redis 集群的状态,并配置告警策略,及时处理集群中的异常情况。

Redis 集群通过数据分片、主从复制和无中心架构,提供了一种高可用、可扩展的分布式键值存储解决方案。尽管它的部署和管理较为复杂,但对于大规模、高可用性需求的应用场景,Redis 集群是一个强大的工具。通过合理的配置、优化和监控,Redis 集群能够为分布式应用提供强大的数据支持和高性能的存储服务。

相关文章:

【Redis进阶】Redis集群

目录 Redis集群的诞生 单节点Redis的局限性 1.存储容量限制 2.性能瓶颈 3.单点故障 4.扩展性能差 分布式系统发展的需要 1.海量数据处理 2.高性能要求 3.弹性扩展能力 Redis集群(cluster) 如图所示案例 Redis集群设计 什么是数据分片&…...

JVM运行时数据区之虚拟机栈

【1】概述 Java虚拟机栈(Java Virtual Machine Stack),早期也叫Java栈。每个线程在创建时都会创建一个虚拟机栈,其内部保存一个个的栈帧(Stack Frame),对应着一次次的Java方法调用。 栈是运行…...

Python 机器学习求解 PDE 学习项目 基础知识(4)PyTorch 库函数使用详细案例

PyTorch 库函数使用详细案例 前言 在深度学习中,PyTorch 是一个广泛使用的开源机器学习库。它提供了强大的功能,用于构建、训练和评估深度学习模型。本文档将详细介绍如何使用以下 PyTorch 相关库函数,并提供相应的案例示例: to…...

SpringBoot-enjoy模板引擎

主要用于Web开发&#xff0c;前后端不分离时的页面渲染 SpringBoot整合enjoy模板引擎步骤&#xff1a; 1.将页面保存在templates目录下 2.添加enjoy的坐标 <dependency> <groupId>com.jfinal</groupId> <artifactId>enjoy</artifactId&g…...

【学习笔记】如何训练大模型

如何在许多 GPU 上训练真正的大型模型&#xff1f; 单个 GPU 工作线程的内存有限&#xff0c;并且许多大型模型的大小已经超出了单个 GPU 的范围。有几种并行范式可以跨多个 GPU 进行模型训练&#xff0c;还可以使用各种模型架构和内存节省设计来帮助训练超大型神经网络。 并…...

高可用集群KEEPALIVED

一、集群相关概念简述 HA是High Available缩写&#xff0c;是双机集群系统简称&#xff0c;指高可用性集群&#xff0c;是保证业务连续性的有效解决方案&#xff0c;一般有两个或两个以上的节点&#xff0c;且分为活动节点及备用节点。 1、集群的分类 LB&#xff1a;负载均衡…...

Linux shell编程学习笔记69: curl 命令行网络数据传输工具 选项数量雷人(中)

0 前言 curl是Linux中的一款综合性网络传输工具&#xff0c;既可以上传也可以下载&#xff0c;支持HTTP、HTTPS、FTP等30余种常见协‍议。 该命令选项超多&#xff0c;在学习笔记68中&#xff0c;我们列举了该命令的部分实例&#xff0c;今天继续通过实例来研究curl命令的功能…...

怎么在网站底部添加站点地图?

在优化网站 SEO 时&#xff0c;站点地图&#xff08;Sitemap&#xff09;是一个非常重要的工具。它帮助搜索引擎更好地理解和抓取您的网站内容。幸运的是&#xff0c;从 WordPress 5.5 开始&#xff0c;WordPress 自带了站点地图生成功能&#xff0c;无需额外插件。下面将介绍如…...

bash和sh的区别

‌Bash和‌sh的主要区别在于它们的交互性、兼容性、默认shell以及脚本执行方式。 首先&#xff0c;Bash提供了更丰富的交互功能&#xff0c;使得它在终端中的使用更加舒适和方便。相比之下&#xff0c;sh由于其最小化的功能集&#xff0c;提供了更广泛的兼容性。然而&#xff…...

基于LSTM的锂电池剩余寿命预测 [电池容量提取+锂电池寿命预测] Matlab代码

基于LSTM的锂电池剩余寿命预测 [电池容量提取锂电池寿命预测] Matlab代码 无需更改代码&#xff0c;双击main直接运行&#xff01;&#xff01;&#xff01; 1、内含“电池容量提取”和“锂电池寿命预测”两个部分完整代码和NASA的电池数据 2、提取NASA数据集的电池容量&am…...

PHP项目任务系统小程序源码

&#x1f680;解锁高效新境界&#xff01;我的项目任务系统大揭秘&#x1f50d; &#x1f31f; 段落一&#xff1a;引言 - 为什么需要项目任务系统&#xff1f; Hey小伙伴们&#xff01;你是否曾为了杂乱的待办事项焦头烂额&#xff1f;&#x1f92f; 或是项目截止日逼近&…...

乡村振兴旅游休闲景观解决方案

乡村振兴旅游休闲景观解决方案摘要 2. 规划方案概览 规划核心&#xff1a;PPT展示了乡村振兴建设规划的核心区平面图及鸟瞰图&#xff0c;涵盖景观小品、设施农业、自行车道、新社区等设计元素。 规划策略&#xff1a;方案注重打造大开大合的空间感受&#xff0c;特色农产大观…...

【大数据】重塑时代的核心技术及其发展历程

&#x1f407;明明跟你说过&#xff1a;个人主页 &#x1f3c5;个人专栏&#xff1a;《大数据前沿&#xff1a;技术与应用并进》&#x1f3c5; &#x1f516;行路有良友&#xff0c;便是天堂&#x1f516; 目录 一、引言 1、什么是大数据 2、大数据技术诞生的背景 二、大…...

基于python的小区监控图像拼接系统设计与实现

博主介绍&#xff1a; 大家好&#xff0c;本人精通Java、Python、C#、C、C编程语言&#xff0c;同时也熟练掌握微信小程序、Php和Android等技术&#xff0c;能够为大家提供全方位的技术支持和交流。 我有丰富的成品Java、Python、C#毕设项目经验&#xff0c;能够为学生提供各类…...

在HFSS中对曲线等结构进行分割(Split)

在HFSS中对曲线进行分割 我们往往需要把DXF等其他类型文件导入HFSS进行分析&#xff0c;但是有时需要对某一个曲线单独进行分割成两段修改。 如果是使用HFSS绘制的曲线&#xff0c;我们修改起来非常方便&#xff0c;修改参数即可。但是如果是导入的曲线&#xff0c;则需要使用…...

高等数学精解【8】

文章目录 直线与二元一次方程平行垂直题目点到直线距离直线束概述直线束的详细说明一、定义二、计算 三、例子例子1&#xff1a;中心直线束例子2&#xff1a;平行直线束 四、例题 参考文献 直线与二元一次方程 平行 两直线平等的条件是它们的斜率相同。 L 1 : A 1 x B 1 y …...

山石网科---WAF---巨细

文章目录 前言一、pandas是什么&#xff1f;二、使用步骤 1.引入库2.读入数据总结 前言 今天被安排协助一线上架一台WAF&#xff0c;在这里重点总结一下WAF的内容 一.WAF部署 串联透明模式 串联模式特点&#xff1a; 二层透明接入&#xff0c;对客户网络影响小站点和webserve…...

【C++】6.类和对象(4)

文章目录 5.赋值运算符重载5.1 运算符重载5.2 赋值运算符重载5.3 前置和后置重载5.4 日期类的实现 6.取地址运算符重载6.1 const成员函数6.2 取地址运算符重载 5.赋值运算符重载 5.1 运算符重载 当运算符被用于类类型的对象时&#xff0c;C语言允许我们通过运算符重载的形式指…...

【5.2 python中的列表】

python中的列表 Python中的列表&#xff08;List&#xff09;是一种非常灵活且强大的数据结构&#xff0c;用于存储一系列的元素。列表是可变的&#xff0c;意味着你可以添加、删除或修改列表中的元素。列表中的元素可以是不同类型的数据&#xff0c;包括整数、浮点数、字符串、…...

opencv-特征检测

1&#xff0c;Harris角点检测 如果粉色窗口向四周移动&#xff0c;窗口内的像素没有变化则认定为平坦区域&#xff0c;如果窗口向上移动无明显变化&#xff0c;而左右移动有变化则认定为边缘&#xff0c;如果窗口向任意方向移动均有明显变化则为角点&#xff0c;如下图 dst不是…...

19 多语言切换实操:一个指令,让AI适配任意编程语言

多语言切换实操:一个指令,让AI适配任意编程语言 摘要 本文为《30天掌控AI编程:从指令到落地,手把手教你指挥AI写代码》系列第十九篇,属于第三阶段多语言实战核心内容。本篇专注AI代码跨语言无缝切换这一高频痛点,针对零基础开发者、多技术栈项目人员,拆解如何通过结构…...

如何判断提取的RNA是否可用?

在分子生物学实验中&#xff0c;RNA的质量直接决定下游实验的成败。那么&#xff0c;如何科学、系统地评价所提取的RNA是否合格呢&#xff1f;应从浓度、纯度与完整性三个维度综合判断&#xff0c;只有三者均达到标准&#xff0c;才能称为高质量RNA。一、质量评价的三项核心指标…...

3分钟搞定OLED图像转换:告别繁琐的嵌入式图像预处理

3分钟搞定OLED图像转换&#xff1a;告别繁琐的嵌入式图像预处理 【免费下载链接】image2cpp 项目地址: https://gitcode.com/gh_mirrors/im/image2cpp 还在为Arduino项目中的图像显示而烦恼吗&#xff1f;每次都要打开虚拟机、安装Windows软件、处理各种格式转换&#…...

项目介绍 MATLAB实现基于贝尔曼方程(Bellman)进行无人机三维路径规划的详细项目实例(含模型描述及部分示例代码) 专栏近期有大量优惠 还请多多点一下关注 加油 谢谢 你的鼓励是我前行的动力

MATLAB实现基于贝尔曼方程&#xff08;Bellman&#xff09;进行无人机三维路径规划的详细项目实例 更多详细内容可直接联系博主本人 或者访问对应标题的完整博客或者文档下载页面&#xff08;含完整的程序&#xff0c;GUI设计和代码详解&#xff09; 无人机作为现代智能系统…...

从arctanx到指数函数:手把手教你用泰勒展开分析复杂函数渐近线

从arctanx到指数函数&#xff1a;手把手教你用泰勒展开分析复杂函数渐近线 数学分析中&#xff0c;函数渐近线的研究往往能揭示函数在无穷远处的行为特征。对于arctanx、指数函数这类常见但特性复杂的函数&#xff0c;泰勒展开提供了一种强有力的分析工具。本文将带你从基础概念…...

Wan2.2-I2V-A14B命令行推理教程:infer.py脚本使用与常见报错解决

Wan2.2-I2V-A14B命令行推理教程&#xff1a;infer.py脚本使用与常见报错解决 1. 环境准备与快速部署 Wan2.2-I2V-A14B是一款强大的文生视频模型&#xff0c;通过私有部署镜像可以快速搭建运行环境。这个镜像已经针对RTX 4090D 24GB显存进行了深度优化&#xff0c;内置了完整的…...

硬件笔记——立创逻辑派开关电源案例解读

立创逻辑派开发板中有上图三个BUCK电路,使用SY8113B芯片将5V电压分别降压至3.3V、1.5V、1.0V。 SY8113B 是一款同步降压型稳压 IC,它将 PWM 控制模块、高端开关管与低端开关管集成在同一芯片上,以此最大限度降低开关转换损耗与导通损耗。凭借超低导通电阻Rds (on)的…...

RVC模型训练全攻略:如何用3分钟打造专属语音模型

RVC模型训练全攻略&#xff1a;如何用3分钟打造专属语音模型 1. 引言&#xff1a;为什么选择RVC&#xff1f; 在当今数字内容创作蓬勃发展的时代&#xff0c;拥有一个独特的语音模型已经成为许多创作者和企业的刚需。RVC&#xff08;Retrieval-Based Voice Conversion&#x…...

深度揭秘ControlNet-v1-1 FP16模型:5大实战技巧突破SD1.5显存瓶颈

深度揭秘ControlNet-v1-1 FP16模型&#xff1a;5大实战技巧突破SD1.5显存瓶颈 【免费下载链接】ControlNet-v1-1_fp16_safetensors 项目地址: https://ai.gitcode.com/hf_mirrors/comfyanonymous/ControlNet-v1-1_fp16_safetensors ControlNet-v1-1_fp16_safetensors作…...

Zenith.NET v0.0.7:Metal 后端落地,.NET GPU 抽象的跨平台旅程

为什么要做 Zenith.NET&#xff1f;.NET 生态有不少图形相关的库——绑定层如 Silk.NET、Vortice&#xff0c;抽象层如 Veldrid、Evergine。但现有的抽象层要么停留在较旧的 API 版本&#xff08;如 DX11/OpenGL&#xff09;&#xff0c;要么是商业引擎的一部分&#xff0c;难以…...