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

文章目录

    • 🍊 集群模式
    • 🍊 集群协议
    • 🍊 元数据维护方式
      • 🎉 集中式
      • 🎉 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.mzph.cn/news/116712.shtml

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

相关文章

第01章-Java语言概述

目录 1 常见DOS命令 常用指令 相对路径与绝对路径 2 转义字符 3 安装JDK与配置环境变量 JDK与JRE JDK的版本 JDK的下载 JDK的安装 配置path环境变量 4 Java程序的编写与执行 5 Java注释 6 Java API文档 7 Java核心机制:JVM 1 常见DOS命令 DOS(…

Lua-http库写一个爬虫程序怎么样 ?

以下是一个使用Lua-http库编写的一个爬虫程序,该爬虫使用Lua语言来抓取www.snapchat.com的内容。 代码必须使用以下代码:get_proxy -- 导入所需的库 local http require("http") local json require("json")-- 定义爬虫IP服务器 …

安装docker ,更换docker版本

docker dockerd & containerd Dockerd(Docker 守护进程)在其底层使用 Containerd 来管理容器。Containerd 是一个开源的容器运行时管理器,由 Docker 公司于2017年开发并开源,它负责实际的容器生命周期管理。 以下是 Docker 守…

力扣每日一题49:字母异位词分组

题目描述: 给你一个字符串数组,请你将 字母异位词 组合在一起。可以按任意顺序返回结果列表。 字母异位词 是由重新排列源单词的所有字母得到的一个新单词。 示例 1: 输入: strs ["eat", "tea", "tan", "ate&quo…

清华训练营悟道篇之浅谈操作系统

文章目录 前言系统软件执行环境操作系统的功能操作系统组成 前言 操作系统是一个帮助用户和应用程序使用和管理计算机资源的软件,它控制着嵌入式设备、更通用的系统(如智能手机、台式计算机和服务器)以及巨型机等各种计算机系统 系统软件 …

【前段基础入门之】=>CSS3新增渐变颜色属性

导语: CSS3 新增了,渐变色 的解决方案,这使得我们可以绘制出更加生动的炫酷的的配色效果 线性渐变 多个颜色之间的渐变, 默认从上到下渐变 background-image: linear-gradient(red,yellow,green); /*默认从上到下渐变*/默认从上…

期中考核复现

web 1z_php ?0o0[]1A&OoO[]2023a include "flag.php":尝试包含名为 "flag.php" 的文件。这意味着它会尝试引入一个名为 "flag.php" 的脚本文件,其中可能包含一些敏感信息或标志。 error_reporting(0):…

腾讯待办是不是停了?能准时提醒待办事项的APP

有不少网友会使用“腾讯待办”小程序来记录待办的事情,并且设置提醒时间,进行任务管理。不过有不少网友最近在使用腾讯待办小程序的时候,看到了“业务关停通知”的弹窗,想问一下,腾讯待办是不是停了?确实如…

如何在Puppeteer中设置User-Agent来绕过京东的反爬虫机制?

概述 京东作为中国最大的电商平台,为了保护其网站数据的安全性,采取了一系列的反爬虫机制。然而,作为开发者,我们可能需要使用爬虫工具来获取京东的数据。 正文 Puppeteer 是一个由 Google 开发的 Node.js 库,它提供…

VMware虚拟机中ubuntu网络连接不上

VMware虚拟机中ubuntu中网络连接不上 解决方案其他虚拟机网络 解决方案 1.选择VMware中编辑-虚拟网络编辑器-更改: 设置为你喜欢的模式,这里为NET模式 2.选中ubuntu虚拟机(关机后的虚拟机),点击:编辑虚拟机…

GoLong的学习之路(八)语法之Map

文章目录 Map初始化方式判断某个键是否存在map的遍历对value值遍历。对key值遍历 使用delete()函数删除键值对按照指定顺序遍历map元素为map的切片值为切片类型的map 做个题吧 Map 哈希表是一种巧妙并且实用的数据结构。它是一个无序的key/value对的集合,其中所有的…

【十四】记一次MySQL宕机恢复过程,MySQL INNODB 损坏恢复

记一次MySQL宕机恢复过程 简介:一个业务数据库疏于运维管理,突然在今天崩溃宕机了,真是让人抓狂,上面也不知道积累了多久的数据,平时也没有定期做好备份,这下岂不是瞎了啊,经过不断的收集信息和…

LeetCode977——有序数组的平方

LeetCode977——有序数组的平方 给你一个按 非递减顺序 排序的整数数组 nums,返回 每个数字的平方 组成的新数组,要求新数组也按 非递减顺序 排序。 输入:nums [-4,-1,0,3,10] 输出:[0,1,9,16,100] 解释:平方后&…

跟着NatureMetabolism学作图:R语言ggplot2转录组差异表达火山图

论文 Independent phenotypic plasticity axes define distinct obesity sub-types https://www.nature.com/articles/s42255-022-00629-2#Sec15 s42255-022-00629-2.pdf 论文中没有公开代码,但是所有作图数据都公开了,我们可以试着用论文中提供的数据…

用长tree方式做等长线

我正在「拾陆楼」和朋友们讨论有趣的话题,你⼀起来吧? 拾陆楼知识星球入口 相关文章链接: 用set_data_check的方式做等长线 前面讲过了如何用set_data_check做等长线,这里再讲一下如何用cts的方式做。 1)写一个sdc,把等长线的起点设置成clock source,用于创建create_…

项目结束需要经历的5个关键步骤

项目结束是项目管理不可或缺的一部分。这是项目的最后阶段,根据关键绩效指标和范围对交付成果进行测试,收尾,总结经验教训,完成交接,并签署项目。 项目结束与启动会议和一样重要。管理人员应为此留出时间,…

【CCF】Z字形扫描

这题的关键是将整个扫描的过程,拆分成很多次斜着操作数组的过程。 而且这个过程中可以建立如下规律: (1)一斜线上的元素个数与切换到下一条斜线这一操作之间建立规律。 先讨论左上部分的数组: 1)当元素个…

linux 装机教程(自用备忘)

文章目录 安装 pyenv 管理多版本 python 环境安装使用使用 pyenv 和 virtualenv 管理虚拟 python 环境 sshvscode 连接远程服务器tmux 美化zsh 安装 pyenv 管理多版本 python 环境 安装 (教程参考:https://www.modb.pro/db/155036) sudo a…

2023 uniapp( vue3 + TS )使用canvas生成海报并保存,taro/微信小程序也适用

有段时间没写vue了&#xff0c;有点生疏了...... 1、代码有注释&#xff0c;完整代码如下 <template><view class"page"><canvas class"canvas" v-if"isShow" :style"{width:${canvasWidth}px,height:${canvasHeight}px}&…

SpringCloud-Sentinel

一、介绍 &#xff08;1&#xff09;提供界面配置配置服务限流、服务降级、服务熔断 &#xff08;2&#xff09;SentinelResource的blockHandler只处理后台配置的异常&#xff0c;运行时异常fallBack处理&#xff0c;且资源名为value时才生效&#xff0c;走兜底方法 二、安装…