深入理解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.rhkb.cn/news/169712.html

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

相关文章

nginx中gzip推荐配置

#开启gzip压缩功能 gzip on; #设置允许压缩的页面最小字节数; 这里表示如果文件小于10个字节,就不用压缩,因为没有意义,本来就很小. gzip_min_length 10k; #设置压缩缓冲区大小,此处设置为4个16K内存作为压缩结果流缓存 gzip_buffers 4 16k;#压缩版本 gzip_http_version 1…

零基础Linux_19(进程信号)产生信号+Core_Dump+保存信号

目录 1. 信号前期知识 1.1 生活中的信号 1.2 Linux中的信号 1.3 信号概念 1.4 信号处理方法的注册 2. 产生信号 2.1 通过终端按键产生信号 2.2 调用系统调用向进程发信号 2.3 软件条件产生信号 2.4 硬件异常产生信号 3. 核心转储Core Dump 4. 保存信号 4.1 信号在…

尚硅谷kafka3.0.0

目录 💃概述 ⛹定义 ​编辑⛹消息队列 🤸‍♂️消息队列应用场景 ​编辑🤸‍♂️两种模式:点对点、发布订阅 ​编辑⛹基本概念 💃Kafka安装 ⛹ zookeeper安装 ⛹集群规划 ​编辑⛹流程 ⛹原神启动 🤸‍♂️…

Windows网络监视工具

对于任何规模的企业来说,网络管理在信息技术中都起着至关重要的作用。管理、监控和密切关注网络基础设施对任何组织都至关重要。在Windows网络中,桌面,服务器,虚拟服务器和虚拟机(如Hyper-V)在Windows操作系…

C算法:写一个用于找出数组的最大值和最小值的函数

需求&#xff1a; 写一个用于找出数组的最大值和最小值的函数。 示例&#xff1a;int array[9] {5, 9, 3, 1, 2, 8, 4, 7, 6}; 该数组最大值的下标为1&#xff0c;最小值的小标为3。 代码实现&#xff1a; #include <stdio.h>int getNum(int *array,int len,int (*…

【C++面向对象】6. 指向类的指针

文章目录 【 1. 基本原理 】【 2. 实例 】 【 1. 基本原理 】 一个指向 C 类的指针与指向结构体的指针类似&#xff0c;访问指向类的指针的成员&#xff0c;需要使用 成员访问运算符 ->&#xff0c;就像访问指向结构的指针一样。 【 2. 实例 】 // 使用指向类的指针&…

PX4-Autopilot下载与编译

文章目录 1 Git clone 代码2 下载子模块3 编译4 可能遇到的问题参考 1 Git clone 代码 Github Repository 链接&#xff1a;PX4-Autopilot 查看现有版本&#xff1a; 在终端用命令下载&#xff0c;-b表示branch git clone -b v1.14.0 https://github.com/PX4/PX4-Autopilot.…

win10下u2net tensorrt模型部署

TensorRT系列之 Win10下yolov8 tensorrt模型加速部署 TensorRT系列之 Linux下 yolov8 tensorrt模型加速部署 TensorRT系列之 Linux下 yolov7 tensorrt模型加速部署 TensorRT系列之 Linux下 yolov6 tensorrt模型加速部署 TensorRT系列之 Linux下 yolov5 tensorrt模型加速部署…

Google Chrome的新“IP保护”功能将隐藏用户的IP地址

导语&#xff1a;在保护用户隐私方面&#xff0c;Google Chrome正在测试一项名为“IP保护”的新功能。通过使用代理服务器掩盖用户的IP地址&#xff0c;这项功能能够增强用户的隐私保护。在意识到IP地址可能被用于秘密追踪后&#xff0c;Google希望在确保用户隐私的同时&#x…

云原生微服务实战 Spring Cloud Alibaba 之 Nacos

系列文章目录 第一章 Java线程池技术应用 第二章 CountDownLatch和Semaphone的应用 第三章 Spring Cloud 简介 第四章 Spring Cloud Netflix 之 Eureka 第五章 Spring Cloud Netflix 之 Ribbon 第六章 Spring Cloud 之 OpenFeign 第七章 Spring Cloud 之 GateWay 第八章 Sprin…

【proteus】8086仿真/汇编:创建项目并添加汇编代码文件

1.创建好新项目 2.点击source code 弹出VSM 3. 4.注意两个都不勾选 可以看到schematic有原理图出现 5. 再次点击source code 6.project/project settings&#xff0c;取消勾选embed 7. add 8.输入文件名保存后&#xff1a; 注意&#xff1a;proteus不用写dos的相关语句 。

UA硬件安装环境

v2301硬件安装环境 Opcenter Execution Foundation 计算机至少应具有以下特征&#xff1a; 操作系统 RAM &#xff1a;最小 12 GB &#xff0c;建议 16 GB CPU &#xff1a;最小 2 vCPU &#xff08;建议频率 > 2.5 GHz &#xff09; HDD &#xff1a;高达 120 GB 的…

Node学习笔记之MySQL基本使用

使用 SQL 管理数据库 其实写接口简单来说就是操作数据库数据&#xff0c;所以我们需要学会数据库的增、删、查、改等基本操作 1. 什么是 SQL SQL&#xff08;英文全称&#xff1a;Structured Query Language&#xff09;是结构化查询语言&#xff0c;专门用来访问和处理数据…

Linux系列讲解 —— VIM配置与美化

目录 1. Vim基本配置1.1 配置文件1.2 基本配置 2. 插件管理器Vundle2.1 下载Vundle2.2 在vimrc中添加Vundle的配置 3. Vundle的使用3.1 安装插件3.2 卸载插件 1. Vim基本配置 1.1 配置文件 vim的配置文件有两处&#xff0c;请根据实际情况选择修改哪个。 (1) 全局配置文件&am…

实验数据旋转角度处理过程中的常见问题

问题 做实验过程中使用 EM tracker 测量自己机器人末端旋转时的角度。 尾部 设置EMTracker 1&#xff0c;作为固定基准&#xff0c;其轴线与机器人中心轴线近似重合&#xff0c;EM Tracker 2 固定在机器人活动关节上&#xff0c;两者轴线夹角近似为机器人旋转角度。论文尚未发…

Python----range方法(函数)

range 英 /reɪndʒ/ n. &#xff08;变动或浮动的&#xff09;范围&#xff0c;界限&#xff1b;视觉&#xff08;或听觉&#xff09;范围&#xff1b;v. &#xff08;在一定的范围内&#xff09;变化&#xff0c;变动&#xff1b;&#xff08;按一定位置或顺序&#x…

LeetCode算法心得——元素和最小的山形三元组 II(预处理和简单动规)

大家好&#xff0c;我是晴天学长&#xff0c;枚举&#xff0b;简单的动态规划思想&#xff0c;和前段时间的周赛题的写法可以说一模一样&#xff0c;像这种类似3元的题&#xff0c;要控制时间复杂度的话&#xff0c;只能枚举一个变量&#xff0c;所以要前缀和或者动规等待。需要…

FPGA时序分析与约束(6)——综合的基础知识

在使用时序约束的设计过程中&#xff0c;综合&#xff08;synthesis&#xff09;是第一步。 一、综合的解释 在电子设计中&#xff0c;综合是指完成特定功能的门级网表的实现。除了特定功能&#xff0c;综合的过程可能还要满足某种其他要求&#xff0c;如功率、操作频率等。 有…

深度学习中的不确定性综述

领域学者&#xff1a; http://www.gatsby.ucl.ac.uk/~balaji/ 论文标题&#xff1a; A Survey of Uncertainty in Deep Neural Networks 论文链接&#xff1a; https://arxiv.org/pdf/2107.03342.pdf 概要 在过去的十年中&#xff0c;神经网络几乎遍及所有科学领域&#x…

mysqld: File ‘./binlog.index‘ not found (OS errno 13 - Permission denied) 问题解决

问题背景 Centos7 安装Mysql 8后启动时遇到的问题&#xff0c;看了好几个博客方案无效&#xff0c;搞了半小时才找到正解&#xff0c;在此次进行记录。 在此假设你已经修改了对应目录的权限&#xff0c;比如配置的mysql data目录初始化后已经执行了chown -R mysql:mysql /XXX/…