深入理解Redis集群模式、协议、元数据维护方式

news/2024/5/20 8:05:18/文章来源:https://blog.csdn.net/java_wxid/article/details/133992235

文章目录

    • 🍊 集群模式
    • 🍊 集群协议
    • 🍊 元数据维护方式
      • 🎉 集中式
      • 🎉 gossip 协议

📕我是廖志伟,一名Java开发工程师、Java领域优质创作者、CSDN博客专家、51CTO专家博主、阿里云专家博主、清华大学出版社签约作者、产品软文创造者、技术文章评审老师、问卷调查设计师、个人社区创始人、开源项目贡献者。🌎跑过十五公里、徒步爬过衡山、🔥有过三个月减肥20斤的经历、是个喜欢躺平的狠人。

📘拥有多年一线研发和团队管理经验,研究过主流框架的底层源码(Spring、SpringBoot、Spring MVC、SpringCould、Mybatis、Dubbo、Zookeeper),消息中间件底层架构原理(RabbitMQ、RockerMQ、Kafka)、Redis缓存、MySQL关系型数据库、 ElasticSearch全文搜索、MongoDB非关系型数据库、Apache ShardingSphere分库分表读写分离、设计模式、领域驱动DDD、Kubernetes容器编排等。🎥有从0到1的高并发项目经验,利用弹性伸缩、负载均衡、报警任务、自启动脚本,最高压测过200台机器,有着丰富的项目调优经验。

📙经过多年在CSDN创作上千篇文章的经验积累,我已经拥有了不错的写作技巧。同时,我还与清华大学出版社签下了四本书籍的合约,并将陆续在明年出版。这些书籍包括了基础篇、进阶篇、架构篇的📌《Java项目实战—深入理解大型互联网企业通用技术》📌,以及📚《解密程序员的思维密码–沟通、演讲、思考的实践》📚。具体出版计划会根据实际情况进行调整,希望各位读者朋友能够多多支持!

以梦为马,不负韶华

希望各位读者大大多多支持用心写文章的博主,现在时代变了,信息爆炸,酒香也怕巷子深,博主真的需要大家的帮助才能在这片海洋中继续发光发热,所以,赶紧动动你的小手,点波关注❤️,点波赞👍,点波收藏⭐,甚至点波评论✍️,都是对博主最好的支持和鼓励!

  • 💂 博客主页: 我是廖志伟
  • 👉开源项目:java_wxid
  • 🌥 哔哩哔哩:我是廖志伟
  • 🎏个人社区:幕后大佬
  • 🔖个人微信号SeniorRD

💡在这个美好的时刻,本人不再啰嗦废话,现在毫不拖延地进入文章所要讨论的主题。接下来,我将为大家呈现正文内容。

CSDN
深入理解Redis集群模式、协议、元数据维护方式

🍊 集群模式

集群模式是一种处理海量数据、高并发和高可用性的方式。当数据量不大时,可以使用 Redis 的 replication 模式,一个 master 多个 slaves,保证读取效率,同时使用 sentinel 集群保证高可用性。但是当数据量增加,需要更高的并发和可用性时,就需要使用 Redis cluster。Redis cluster 可以自动将数据进行分片,每个 master 节点可以存放一部分数据,多个 master 节点上可以挂载多个 slave 节点,这样可以实现 Redis 的横向扩展,支撑更大的数据量和更高的并发。当部分 master 节点不可用时,Redis cluster 仍然可以继续工作。

Redis cluster 架构使用 cluster bus 进行节点间通信,用来进行故障检测、配置更新、故障转移授权等操作。cluster bus 使用 gossip 协议,通过二进制的方式进行高效的数据交换,不占用过多的网络带宽和处理时间。

举个例子,假如一个电商网站需要处理海量的订单数据,同时需要支持高并发和高可用性。在订单数据量不大时,可以使用单机 Redis,但是当订单数据量增加时,需要使用 Redis cluster 进行横向扩展。将订单数据进行分片存储在多个 master 节点上,每个 master 节点还可以挂载多个 slave 节点,保证了高并发和高可用性。当部分 master 节点不可用时,订单数据仍然可以在其他节点上访问,保证了网站的正常运行。同时,通过 cluster bus 进行节点间通信,保证了故障检测和故障转移的高效性和准确性。

🍊 集群协议

Redis集群采用了类似于RAFT协议的分布式算法,将数据分布在多个节点上,并由集群管理器负责节点的故障转移和重新分配。在客户端访问Redis集群时,需要进行节点路由和数据迁移。

Redis集群协议定义了集群节点之间的通信方式,包括节点间消息的格式、流程和规则。其中最重要的协议是CLUSTER命令,用于集群的创建、添加、删除和配置等操作。

Redis集群协议基于二进制流传输,使用Socket连接进行节点间通信。在Redis集群中,每个节点都有一个唯一的节点ID和一个或多个IP地址和端口号,用于与其他节点通信。

集群中的每个节点都有一个角色,包括主节点、从节点和备份节点。主节点负责处理客户端的读写请求,并将写操作同步到从节点和备份节点。从节点复制主节点的数据,并在主节点宕机时接管主节点的工作。备份节点负责存储主节点的数据备份,以便在主节点故障时恢复数据。

Redis集群协议支持数据分片,即将Key按照哈希值分配到不同的节点上。每个主节点有一组从节点,从节点通过复制主节点的数据来保持数据一致性。当主节点宕机时,从节点会选举出一个新的主节点,然后重新分配槽位,并将数据迁移到新的主节点上。

🍊 元数据维护方式

在实践中,为了确保Redis集群的高可用性和性能,需要进行合理的节点部署、负载均衡和故障转移等策略。同时,需要合理设置Redis的配置参数,如最大内存限制、持久化策略和网络设置等,以满足不同的需求。

Redis 集群中,元数据维护是非常重要的。元数据是指维护节点间映射关系的数据,包括节点的状态、槽位的分配情况、节点间通信等信息。元数据是集群中各个节点协同工作的基石,因此必须要得到良好的维护。

在 Redis 集群中,元数据的维护可以采用两种方式:集中式、Gossip 协议。

🎉 集中式

在计算机领域中,集群协议指的是一组算法和规则,用于维护一个集群中的节点的状态、数据和元数据。如果想象一下多个计算机节点像一个蜂群一样,集群协议就像是这个蜂群的一种管理方式,它能够确保每个节点都知道其他节点的状态,并且能够在某个节点出现故障时自动地进行失败转移,从而保证整个集群的稳定性和可靠性。

集中式集群协议是其中的一种形式,它的主要特点就是将集群中的元数据集中存储在一个节点上,通过这个节点来维护整个集群的状态。比如说,如果有一个包含多个节点的分布式系统,其中一个节点的状态发生了变化,那么这个变化就会被记录在集中式的元数据存储中,并且其他节点可以随时从这个存储中获取最新的状态信息。

一个典型的集中式元数据存储的例子就是大数据领域的Storm。Storm是一个分布式的大数据实时计算引擎,它使用ZooKeeper来存储和维护所有的元数据。在Storm中,每个节点都会周期性地向ZooKeeper发送心跳信号,以保证ZooKeeper中存储的节点状态信息是最新的。当一个节点的状态发生了变化(比如故障或者加入集群),它会将这个变化信息发送到ZooKeeper,并且所有其他节点会在下一次心跳中获取这个最新的状态信息,从而及时感知到集群中节点的变化。

集中式集群协议的好处在于它能够快速地更新和感知节点状态的变化,从而提高集群的时效性和可靠性。但是,它也存在一些缺点。首先,由于所有的元数据都存储在一个节点上,可能会导致这个节点的压力非常大,从而影响集群的整体性能。另外,如果这个节点出现了故障,整个集群的稳定性也会受到影响。因此,在实际应用中,需要根据具体的场景选择适合的集群协议来维护集群的状态和元数据。

在集中式元数据维护方式下,所有的节点都会将元数据交给一个特定的节点进行维护和管理。当一个节点加入或退出集群时,它需要向该特定节点汇报其状态并更新元数据。由于所有元数据都在一个节点上维护,因此这种方式会带来一个很大的压力,也增加了单点失效的风险。

🎉 gossip 协议

gossip 协议是Redis集群中的一种协议,常用于数据的共享。所有节点都持有一份元数据,包括数据内容、数据结构、数据类型等等。当某个节点的元数据发生变化时,会将这个变化信息发送给其它节点,从而让所有节点的元数据都得到更新。

比如,假设一个Redis集群中有5个节点,每个节点都保存了相同的数据,这些数据在每个节点上都有所不同,但是它们的元数据都是相同的。当其中一个节点的数据发生变化时,它会将这个变化的信息广播给其它节点,其它节点再进行相应的更新。如果这个变化信息在一段时间内没有被广播到所有节点,那么这个更新就会有一定的延时,可能会导致一些操作出现滞后。

Gossip协议的好处在于,元数据的更新比较分散,不是集中在一个地方,更新请求会陆陆续续打到所有节点上去更新,降低了压力。而且,gossip协议的数据共享也更具有容错性,如果某个节点宕机或者出现故障,其它节点还可以继续工作,并维持集群的正常运行。而且,由于gossip协议的分布式特性,它的性能也比较优秀。

但是Gossip协议也有一些不好的地方。由于数据共享是通过广播实现的,因此广播的成本比较高,而且广播的延迟也比较大。如果数据更新频率比较高,那么Gossip协议可能会导致网络拥塞和性能下降。此外,Gossip协议的性能也受到节点数量的限制,如果节点数过多,那么Gossip协议的性能也会降低。

在 Gossip 协议元数据维护方式下,所有节点都会相互通信并传播信息。每个节点会维护一份较小的元数据,而这份元数据会通过 Gossip 协议与其他节点分享。当一个节点加入或退出集群时,它会将信息随机发送给其他几个节点,这些节点也会继续传播,直到所有节点都得到消息。这种方式下,节点之间相互传播信息,避免了集中式方式下单点失效的问题,同时也减轻了一个节点管理所有元数据的负担。

在Redis Cluster架构下,每个节点都有一个专门用于节点间通信的端口,用于数据传输的是自己提供服务的端口号+10000。每个节点会定期发送ping消息给其它节点,用于检测节点之间的连接是否正常。同时,其它节点也会返回pong消息,以响应ping请求。通过这种方式,各个节点之间可以保持相互的连接,并进行数据共享和更新。

CSDN

🔔如果您需要转载或者搬运这篇文章的话,非常欢迎您私信我哦~

希望各位读者大大多多支持用心写文章的博主,现在时代变了,信息爆炸,酒香也怕巷子深,博主真的需要大家的帮助才能在这片海洋中继续发光发热,所以,赶紧动动你的小手,点波关注❤️,点波赞👍,点波收藏⭐,甚至点波评论✍️,都是对博主最好的支持和鼓励!

  • 💂 博客主页: 我是廖志伟
  • 👉开源项目:java_wxid
  • 🌥 哔哩哔哩:我是廖志伟
  • 🎏个人社区:幕后大佬
  • 🔖个人微信号SeniorRD

📥博主的人生感悟和目标

探寻内心世界,博主分享人生感悟与未来目标

  • 🍋程序开发这条路不能停,停下来容易被淘汰掉,吃不了自律的苦,就要受平庸的罪,持续的能力才能带来持续的自信。我本身是一个很普通程序员,放在人堆里,除了与生俱来的盛世美颜,就剩180的大高个了,就是我这样的一个人,默默写博文也有好多年了。
  • 📺有句老话说的好,牛逼之前都是傻逼式的坚持,希望自己可以通过大量的作品、时间的积累、个人魅力、运气、时机,可以打造属于自己的技术影响力。
  • 💥内心起伏不定,我时而激动,时而沉思。我希望自己能成为一个综合性人才,具备技术、业务和管理方面的精湛技能。我想成为产品架构路线的总设计师,团队的指挥者,技术团队的中流砥柱,企业战略和资本规划的实战专家。
  • 🎉这个目标的实现需要不懈的努力和持续的成长,但我必须努力追求。因为我知道,只有成为这样的人才,我才能在职业生涯中不断前进并为企业的发展带来真正的价值。在这个不断变化的时代,我必须随时准备好迎接挑战,不断学习和探索新的领域,才能不断地向前推进。我坚信,只要我不断努力,我一定会达到自己的目标。

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

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

相关文章

Docker 的数据管理与网络通信以及Docker镜像的创建

目录 Docker的数据管理 1、数据卷 2、数据卷容器 3、端口映射 4、容器互联 二、Docker网络 1、Docker网络实现原理 2、Docker的网桥模式 1)Host 2)Container 3)none 4)bridge 5)自定义网络 3、创建自定义…

数据结构与算法——选择排序法

个人简介 👀个人主页: 前端杂货铺 🙋‍♂️学习方向: 主攻前端方向,正逐渐往全干发展 📃个人状态: 研发工程师,现效力于中国工业软件事业 🚀人生格言: 积跬步…

Redis底层核心数据结构详解

文章目录 一、深入String(SDS)1. 字符串简介2. SDS存在的意义3. SDS结构设计4. SDS与C字符串的区别4.1 常数复杂度获取字符串长度4.2 杜绝缓冲区溢出4.3 二进制安全4.4 SDS API 5 小结 二、深入List (QuickList)1. 链表节点结构设计2. Redis的链表实现的…

7.21 SpringBoot项目实战【图书借阅】并发最佳实践:细粒度Key锁、数据库乐观锁、synchronized、ReentrantLock

文章目录 前言一、编写服务层二、编写控制器三、并发实战1. synchronized关键字2. Lock 接口3. Atomic类4. 细粒度Key锁5. 数据库乐观锁6. 最终service完整代码 最后 前言 上文的产品设计流程:查看图书列表 7.3 实现-》查看图书详情上文7.20 -》图书借阅(本文)。 就…

【深圳1024开发者城市聚会定向征文】

在这个周末,我有幸参加了1024程序员节活动,这是一个专门为程序员们举办的活动,旨在庆祝程序员这个特殊的群体。在这个活动中,我不仅感受到了浓厚的编程氛围,还收获了许多宝贵的经验和知识。 活动在深圳湾科技生态园举…

Leetcode周赛368补题(3 / 3)

目录 1、元素和最小的山型三元组 | - 三层for暴力循环 2、元素和最小的山型三元组 || - 维护前后最小值 遍历 3、合法分组的最少组数 - 思维 哈希表 1、元素和最小的山型三元组 | - 三层for暴力循环 100106. 元素和最小的山形三元组 I class Solution {public int minimu…

Apache Doris (四十六): Doris数据更新与删除 - 批量删除

🏡 个人主页:IT贫道_大数据OLAP体系技术栈,Apache Doris,Clickhouse 技术-CSDN博客 🚩 私聊博主:加入大数据技术讨论群聊,获取更多大数据资料。 🔔 博主个人B栈地址:豹哥教你大数据的个人空间-豹哥教你大数据个人主页-哔哩哔哩视频 目录

#电子电器架构 —— 车载网关初入门

我是穿拖鞋的汉子,魔都中坚持长期主义的汽车电子工程师。 PS:小细节,本文字数7000+,详细描述了网关在车载框架中的具体性能设置。 老规矩,分享一段喜欢的文字,避免自己成为高知识低文化的工程师: 没有人关注你。也无需有人关注你。你必须承认自己的价值,你不能站在他…

51单片机实现换能器超声波测水深

一,超声波换能器定义: 定义1:可把电能、机械能或声能从一种形式转换为另一种形式的能的装置。 所属学科:测绘学下的测绘仪器。 定义2:能量转换的器件。在水声领域中常把声呐换能器、水声换能器、电声换能器统称换能器。…

博客后台模块续更(六)

十三、后台模块-用户列表 1. 查询用户 需要用户分页列表接口。 可以根据用户名模糊搜索。 可以进行手机号的搜索。 可以进行状态的查询。 1.1 接口分析 请求方式请求路径是否需求token头GETsystem/user/list是 请求参数query格式: pageNum: 页码pageSize…

【linux系统】如何在服务器上安装Anaconda

文章目录 1. 安装Anconda1.1. 下载Anaconda安装包1.2. 安装Anaconda1.2.1. 点击回车(Enter)1.2.2. 添加环境变量1.2.3. 激活环境变量 1.3. 检查是否安装成功 2. Anaconda安装pytorch2.1. 创建虚拟环境2.2. 激活(进入)虚拟环境2.3. 安装pytorch 1. 安装An…

C语言--程序环境和预处理(宏)

目录 前言 本章重点: 1. 程序的翻译环境和执行环境 2. 详解编译链接 2.1 翻译环境​编辑 2.2 编译本身也分为几个阶段 2.3 运行环境 3. 预处理详解 3.1 预定义符号 3.2 #define 3.2.1 #define 定义标识符 3.2.2 #define 定义宏 2.2.3 #define 替换规则 …

Mock测试详细教程入门这一篇就够了!

1、什么是mock测试 1.png Mock测试就是在测试活动中,对于某些不容易构造或者不容易获取的比较复杂的数据/场景,用一个虚拟的对象(Mock对象)来创建用于测试的测试方法。 2、为什么要进行Mock测试 Mock是为了解决不同的单元之间由于耦合而难于开发、测试…

高校教务系统登录页面JS分析——西安交通大学

高校教务系统密码加密逻辑及JS逆向 本文将介绍高校教务系统的密码加密逻辑以及使用JavaScript进行逆向分析的过程。通过本文,你将了解到密码加密的基本概念、常用加密算法以及如何通过逆向分析来破解密码。 本文仅供交流学习,勿用于非法用途。 一、密码加…

Android手机连接电脑弹出资源管理器

如图所示,很讨厌 关闭方法:

Node编写用户登录接口

目录 前言 服务器 编写登录接口API 使用sql语句查询数据库中是否有该用户 判断密码是否正确 生成JWT的Token字符串 配置解析token的中间件 配置捕获错误中间件 完整的登录接口代码 前言 本文介绍如何使用node编写登录接口以及解密生成token,如何编写注册接…

ROI的投入产出比是什么?

ROI的投入产出比是什么? 投入产出比(Return on Investment, ROI)是一种评估投资效益的财务指标,用于衡量投资带来的回报与投入成本之间的关系。它的计算公式如下: 投资收益:指的是投资带来的净收入&#x…

Python基础入门例程2-NP2 多行输出

描述 将字符串 Hello World! 存储到变量str1中,再将字符串 Hello Nowcoder! 存储到变量str2中,再使用print语句将其打印出来(一行一个变量)。 输入描述: 无 输出描述: 第一行输出字符串Hello World!&a…

DDOS直接攻击系统资源

DDOS ——直接攻击系统资源 思路: 攻击机利用三次握手机制,产生大量半连接,挤占受害者系统资源,使其无法正常提供服务。 1、先体验下受害者的正常网速。在受害者主机上执行以下命令 (1)开启Apache。 systemctl start apache2 (2…

SysTick—系统定时器

SysTick 简介 SysTick—系统定时器是属于CM3内核中的一个外设,内嵌在NVIC中。系统定时器是一个24bit 的向下递减的计数器,计数器每计数一次的时间为1/SYSCLK,一般我们设置系统时钟SYSCLK 等于72M。当重装载数值寄存器的值递减到0的时候&#…