探索 Redis 不同集群架构的性能与应用

1. 引言

Redis的集群配置成为了提高数据可靠性和服务可用性的关键。本文将带领大家了解Redis的四种主要集群架构,并重点分析哨兵模式和Redis Cluster架构和优势。

2. Redis的四种集群架构

2.1 单实例Redis

使用单个 Redis 实例提供服务。适用于小规模应用,配置和管理简单,但没有高可用性和容错能力,难以扩展且存在单点故障。

2.2 主从复制模式

一个主节点处理写操作,从节点同步主节点数据并处理读操作,但主节点故障时需要手动故障转移。
架构组成
在这里插入图片描述
工作原理
Redis 主从复制在从节点首次连接时进行全量同步,主节点创建 RDB 文件快照并发送给从节点,从节点加载数据后接收增量数据以保持一致。全量同步完成后,从节点通过定期发送 PSYNC 命令请求增量数据,主节点将最新写操作日志发送给从节点,从节点应用这些日志进行数据更新。

故障恢复机制
从节点通过定期发送 PING 命令检测主节点状态,若无响应则标记为疑似故障(SDOWN),故障主节点恢复后作为从节点重新加入集群并同步数据。当主节点发生故障,影响写入操作;当从节点发生故障,影响该从节点的读操作。直至故障节点恢复正常,应用才会正常进行读写操作。主节点故障时需要手动故障转移,以保障整个集群能正常写入数据。

2.3 哨兵模式(Sentinel)

在主从复制的基础上增加哨兵节点监控 Redis 实例状态,自动进行故障切换,实现高可用性管理,写操作仍受限于单个主节点。
架构组成
在这里插入图片描述
工作原理
通过哨兵节点监控主从实例的运行状态,哨兵节点定期向主从节点发送 PING 命令以确认它们是否在线。哨兵节点通过 Pub/Sub 系统相互通信并交换节点状态信息,当哨兵节点检测到主节点不可用时,会将其标记为“主观下线”(subjectively down,简称 SDOWN),然后其他哨兵节点进行确认。

故障恢复机制
当哨兵节点通过投票确认主节点故障为“客观下线”(objectively down,简称 ODOWN)后,会选举一个拥有最新数据的从节点为新主节点。选举过程使用 RAFT 算法,选出的从节点被提升为新的主节点,并通知其他从节点重新配置为新的主节点进行同步。整个过程自动化,无需人工干预,确保系统的高可用性和数据一致性。

RAFT 是一种用于分布式系统的共识算法,通过选举机制确保系统在出现故障时能一致地选出新的领导者。它将数据复制到所有节点,确保每个节点的日志一致,主要包括领导选举、日志复制和日志一致性三个过程。RAFT 的设计目标是简单易懂且能够在分布式系统中提供可靠的数据一致性和高可用性。

2.4 Redis Cluster详解

Redis Cluster 通过将数据分片存储在多个主节点上,实现高可用性和水平扩展。每个主节点负责一定范围的哈希槽,并通过从节点复制数据以保证数据冗余。当主节点故障时,从节点可以自动提升为主节点。节点间通过 Gossip 协议进行状态同步和故障检测,集群可以动态添加和删除节点,实现负载均衡和自动分片。
架构组成
在这里插入图片描述
工作原理
每个主节点负责一定范围的哈希槽,并通过从节点复制数据以保证数据冗余。
故障恢复机制
Redis Cluster 的故障恢复机制通过 Gossip 协议检测节点状态,当主节点故障时,由其他节点确认并标记为故障,触发故障转移。系统通过选举算法选择一个从节点提升为新主节点,并重新配置集群中的其他从节点进行同步。故障主节点恢复后,将作为从节点重新加入集群,继续保持数据一致性和高可用性。

分片技术及原理
Redis Cluster 采用分片技术(Sharding)将数据分布在多个节点上,以实现水平扩展和高可用性。

  1. 哈希槽
    • Redis Cluster 将键空间划分为 16384 个哈希槽(Hash Slots)。
    • 每个键根据 CRC16 校验码计算哈希值,并将其映射到一个哈希槽中。
    • 哈希槽由集群中的主节点管理,每个主节点负责一定范围的哈希槽。
  2. 数据分片
    • 当写入数据时,Redis 通过一致性哈希算法将键映射到相应的哈希槽,从而确定数据存储的主节点。
    • 读请求也通过相同的哈希槽映射找到对应的主节点进行数据读取。
  3. 动态扩展
    • 可以动态添加或删除节点,Redis Cluster 会自动进行数据重分片,重新分配哈希槽,保持负载均衡。

3. 场景应用

架构类型场景应用性能和可扩展性考量
单实例架构小规模应用、开发测试环境简单易用,但没有高可用性和容错能力,难以扩展,应对高并发能力有限。
主从复制架构读多写少的应用场景,提高读性能和数据冗余读性能提升,但主节点仍是单点故障,写操作仍集中在主节点,扩展性有限。
哨兵模式架构对高可用性有要求的中小规模应用,自动故障转移和监控提供高可用性和自动故障转移,但配置和管理复杂度较高,写操作受限于单个主节点。
Redis Cluster大规模数据存储和高并发访问的应用场景,需高可用性和水平扩展通过数据分片和自动故障转移实现高可用性和水平扩展,支持动态添加和删除节点,实现负载均衡。

4. 总结

架构类型优势限制实施建议
单实例架构简单易用,配置和管理成本低没有高可用性和容错能力,存在单点故障,扩展性差适用于小规模应用和开发测试环境
主从复制架构提高读性能和数据冗余,增强数据可用性写操作集中在主节点,主节点故障时需要手动故障转移适用于读多写少的应用场景,可以结合哨兵模式提升高可用性
哨兵模式架构自动故障转移和监控,提供高可用性配置和管理复杂度较高,写操作仍受限于单个主节点适用于对高可用性要求高的中小规模应用,确保配置和监控的正确性
Redis Cluster高可用性和水平扩展,支持动态添加和删除节点,实现负载均衡配置和管理复杂,节点间通信开销大适用于大规模数据存储和高并发访问的应用,需规划好数据分片和节点管理

实施建议

  1. 小规模应用和开发测试环境:采用单实例架构,配置简单,易于管理。
  2. 读多写少的应用:采用主从复制架构,结合哨兵模式提高高可用性,提升读性能。
  3. 中小规模且对高可用性有要求的应用:采用哨兵模式,实现自动故障转移和监控,确保系统高可用性。
  4. 大规模数据存储和高并发访问的应用:采用 Redis Cluster,实现高可用性和水平扩展,规划好数据分片和节点管理,确保系统性能和可靠性。

5. 参考文献

  • Redis 官方文档: https://redis.io/documentation
  • Redis Cluster 规范: https://redis.io/topics/cluster-spec
  • 《Redis 深度历险》 - 电子工业出版社
  • 《Redis 设计与实现》 - 黄健宏
  • RAFT 共识算法论文: https://raft.github.io/
  • Redis Sentinel 文档: https://redis.io/topics/sentinel
  • 《Redis 实战》 - Manning Publications
  • 官方博客和文章资源:
    • Redis Sentinel
    • Redis Cluster

这些资源提供了丰富的 Redis 架构、原理及其应用的详细信息,适合进一步阅读和深入研究。

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

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

相关文章

论文阅读:Deformable DETR: Deformable Transformers for End-to-End Object Detection

论文阅读:Deformable DETR: Deformable Transformers for End-to-End Object Detection Deformable DETR: 基于稀疏空间采样的注意力机制,让DCN与Transformer一起玩! - 知乎 (zhihu.com) 【Deformable DETR 论文源码解读】Deformable Trans…

The Llama 3 Herd of Models.Llama 3 模型第1,2,3部分全文

现代人工智能(AI)系统是由基础模型驱动的。本文提出了一套新的基础模型,称为Llama 3。它是一组语言模型,支持多语言、编码、推理和工具使用。我们最大的模型是一个密集的Transformer,具有405B个参数和多达128K个tokens的上下文窗口。本文对Llama 3进行了广泛的实证评价。我们…

【error】AttributeError: module ‘cv2.dnn‘ has no attribute ‘DictValue‘(库冲突)

conda list conda remove opencv pip uninstall opencv-python conda list pip 同时卸载两个库 pip uninstall opencv-contrib-python opencv-python 没有and 直接写库名 module ‘cv2.dnn‘ has no attribute ‘DictValue‘解决办法_module cv2.dnn has no attribute d…

Linux - 环境变量、程序地址空间、进程地址空间及Linux2.6内核进程调度队列

目录 环境变量 基本概念 常见环境变量 查看环境变量的方法 测试PATH 测试HOME 测试SHELL 和环境变量相关的命令 环境变量的组织方式 通过代码获取环境变量 通过系统调用获取环境变量 程序地址空间 进程地址空间 Linux2.6内核进程调度队列 一个CPU拥有一个runqueue 优先级 活…

谈一谈爬虫开发工程师

爬虫就只是抓数据的吗?并不是,爬虫工程师的工作不再仅仅是抓取数据,还需要处理其他各种复杂问题,今天我们就来聊聊爬虫开发工程师。 一、 爬虫开发工程师工作内容 爬虫开发工程师是负责编写和维护网络爬虫程序的专业人员。他们的…

【多模态大模型】 ALBEF in NeurIPS 2021

一、引言 论文: Align before Fuse: Vision and Language Representation Learning with Momentum Distillation 作者: Salesforce Research 代码: ALBEF 特点: 该方法使用ViT进行图像特征提取,提出将BERT分两部分&am…

Cocos Creator2D游戏开发(3)-飞机大战(1)-背景动起来

资源见: https://pan.baidu.com/s/1cryYNdBOry5A4YEEcLwhDQ?pwdzual 步骤 1, 让背景动起来 2, 玩家飞机显现,能操控,能发射子弹 3.敌机出现 4. 碰撞效果(子弹和敌机,敌机和玩家) 5. 积分和游戏结束 6. 游戏存档,对接微信小游戏,保存历史最高分 7. cocos发布到微信小游戏 资源…

探索Python的进度条神器:tqdm

文章目录 探索Python的进度条神器:tqdm一、背二、tqdm简介三、安装tqdm四、tqdm的五个简单使用示例五、tqdm在不同场景下的应用六、常见问题及解决方案七、总结 探索Python的进度条神器:tqdm 一、背 景:为什么选择tqdm? 在Python…

苦学Opencv的第十四天:人脸检测和人脸识别

Python OpenCV入门到精通学习日记:人脸检测和人脸识别 前言 经过了十三天的不懈努力,我们终于也是来到了人脸检测和人脸识别啦!相信大家也很激动吧。接下来我们开始吧! 人脸识别是基于人的脸部特征信息进行身份识别的一种生物识…

Spring 常用的三种拦截器详解

前言 在开发过程中,我们常常使用到拦截器来处理一些逻辑。最常用的三种拦截器分别是 AOP、 Interceptor 、 Filter,但其实很多人并不知道什么时候用AOP,什么时候用Interceptor,什么时候用Filter,也不知道其拦截顺序&am…

spring —— 事务管理器

事务管理主要针对数据源进行操作:在数据库方面,通过 TransactionManager 事务管理器进行管理,表明一旦出现错误,该数据源的所有数据全部复原。那么数据库如何判断是否发生了错误呢?这就需要在代码方面,通过…

抖音直播弹幕数据逆向:websocket和JS注入

🔍 思路与步骤详解 🕵️‍♂️ 思路介绍 首先,我们通过抓包工具进入的直播间,捕获其网络通信数据,重点关注WebSocket连接。发现直播弹幕数据通过WebSocket传输,这种方式比传统的HTTP更适合实时数据的传输。…

前端基于 axios 实现批量任务调度管理器 demo

一、背景介绍 这是一个基于 axios 实现的批量任务调度管理器的 demo。它使用了axios、promise 等多种技术和原理来实现批量处理多个异步请求,并确保所有请求都能正确处理并报告其状态。 假设有一个场景:有一个任务列表,有单个任务的处理功能…

【Qt】QLCDNumberQProgressBarQCalendarWidget

目录 QLCDNumber 倒计时小程序 相关属性 QProgressBar 进度条小程序 相关设置 QLCDNumber QLCDNumber是Qt框架中用于显示数字或计数值的小部件。通常用于显示整数值,例如时钟、计时器、计数器等 常用属性 属性说明intValueQLCDNumber显示的初始值(int类型)va…

企业版邮箱适用哪些企业

企业邮箱适合哪些企业呢?企业版邮箱为企业提供安全、稳定、集成的邮件服务,支持初创、中小、大型企业及特定行业需求。ZohoMail作为优质提供商,提供多层安全措施、移动访问、集成能力及定制化服务,满足不同规模企业需求。 一、企…

2023年系统架构设计师考试总结

原文链接:https://www.cnblogs.com/zhaotianff/p/17812187.html 上周六参加了2023年系统架构设计师考试,这次考试与以前有点区别,是第一次采用电子化考试,也是教材改版后的第一次考试。 说说考前准备:为了准备这次考试…

基于微信小程序的校园警务系统/校园安全管理系统/校园出入管理系统

摘要 伴随着社会以及科学技术的发展,小程序已经渗透在人们的身边,小程序慢慢的变成了人们的生活必不可少的一部分,紧接着网络飞速的发展,小程序这一名词已不陌生,越来越多的学校机构等都会定制一款属于自己个性化的小程…

《通讯世界》是什么级别的期刊?是正规期刊吗?能评职称吗?

问题解答 问:《通讯世界》是不是核心期刊? 答:不是,是知网收录的第一批认定学术期刊。 问:《通讯世界》级别? 答:国家级。主管单位:科学技术部 主办单位:中国科学技…

关于虚拟机在桥接模式下连接网络问题的记录

2024年7月28日03:49:19 环境:ubuntu22.04 desktop 虚拟机 问题:使用wget下载nginx安装包时出现问题,443端口持续无连接成功回复。 随后在确定配置ip无问题,检查了其正常访问互联网,随后试图ping niginx网站&#xff…

基于OSS前端直传的分片上传以及断点续传

一、大文件分片上传 原型 大文件如果直接上传的话由于nginx的限制会导致响应500报错,或者响应时间过长导致响应超时 并且大文件上传有如下缺点 上传时间长: 对于大文件,直接上传可能需要较长时间,特别是在网络速度较慢或不稳定的情况下。这…