Redis集群(5)

news2024/9/22 20:22:11

集群原理

节点通信
通信流程

在分布式存储系统中,维护节点元数据(如节点负责的数据、节点的故障状态等)是关键任务。常见的元数据维护方式分为集中式和P2P方式。Redis集群采用P2P的Gossip协议,这种协议的工作原理是节点之间不断通信交换信息,类似流言传播,最终所有节点都会知道集群的完整信息。

通信流程如下:

  1. 集群中的每个节点都会单独开辟一个TCP通道用于节点之间通信,通信端口号在基础端口上加10000。
  2. 每个节点按照固定周期,通过特定规则选择几个节点发送ping消息。
  3. 接收到ping消息的节点用pong消息作为响应。

每个节点通过一定规则挑选通信的节点,节点可能知道全部或部分其他节点信息。通过ping/pong消息的不断交换,所有节点最终会同步集群的最新状态。这包括故障节点的检测、新节点的加入、主从角色的变化、槽信息的变更等。

Gossip 消息

Gossip协议的主要职责是信息交换,载体是节点彼此发送的Gossip消息。常用的Gossip消息有:ping消息、pong消息、meet消息、fail消息。

  • meet消息:用于通知新节点加入。消息发送者通知接收者加入到当前集群,成功后接收节点会加入集群并进行周期性的ping/pong消息交换。
  • ping消息:是集群内交换最频繁的消息。每个节点每秒向多个其他节点发送ping消息,用于检测节点是否在线和交换状态信息。ping消息封装了自身和部分其他节点的状态数据。
  • pong消息:作为对ping和meet消息的响应。pong消息封装了自身的状态数据,也可以用于广播自身状态更新。
  • fail消息:当节点判定另一个节点下线时,向集群内广播fail消息,其他节点接收到后将对应节点更新为下线状态。

所有消息包含消息头和消息体。消息头包含发送节点的状态数据,消息体则根据消息类型(如ping、meet、pong)封装具体数据。

节点选择

Gossip协议需要在信息交换的实时性和成本开销之间取得平衡。Redis集群内节点通信采用固定频率(定时任务每秒执行10次),每次随机选择5个节点发送ping消息,保证信息交换的随机性。节点会优先选择长时间未通信的节点发送ping消息,防止信息过时。

节点每秒发送的ping消息数量为:1 + 10 * num(node.pong_received > cluster_node_timeout / 2)。通过调整cluster_node_timeout参数,可以控制消息发送的频率和带宽占用。

故障转移

Redis集群实现了高可用,当部分节点出现故障时,通过自动故障转移机制保证集群正常服务。

故障发现

故障发现包括主观下线(pfail)和客观下线(fail):

  • 主观下线:某个节点认为另一个节点不可用。这一状态仅代表一个节点的意见,可能存在误判。
  • 客观下线:集群内多个节点都认为某节点不可用,达成共识的结果。
主观下线

节点通过ping/pong消息通信。如果在cluster-node-timeout时间内通信失败,发送节点会认为接收节点故障,并标记为主观下线(pfail)。

客观下线

当某个节点判断另一个节点主观下线后,这一状态会通过消息在集群内传播。当超过半数以上持有槽的主节点认为该节点不可用时,触发客观下线流程:

  1. 统计有效的下线报告数量。如果小于主节点总数的一半则退出。
  2. 大于主节点数量一半时,标记为客观下线状态。
  3. 向集群广播fail消息,通知所有节点标记故障节点为客观下线,并触发故障转移。
故障恢复

当主节点变为客观下线后,需要在从节点中选出一个替代。下线主节点的所有从节点都要承担故障恢复的义务。

资格检查

从节点检查最后与主节点断线的时间。如果超过cluster-node-time * cluster-slave-validity-factor,从节点失去故障转移资格。

准备选举时间

符合资格的从节点会根据复制偏移量设置延迟选举时间,优先级高的从节点会提前发起选举。

发起选举

当选举时间到达,从节点发起选举流程:

  1. 更新配置纪元(配置纪元用于标示当前主节点的版本)。
  2. 发起选举请求。
    image.png
选举投票

持有槽的主节点才会处理选举请求,每个配置纪元内只能投票给一个从节点。当从节点收集到超过半数的持有槽主节点投票时,可以执行主节点替换。

替换主节点

从节点收集足够选票后:

  1. 取消复制,变为主节点。
  2. 撤销故障主节点负责的槽,并接管这些槽。
  3. 向集群广播自己的pong消息,通知变为主节点并接管槽信息。
故障转移时间

故障转移时间估算如下:

  1. 主观下线识别时间=cluster-node-timeout。
  2. 主观下线状态消息传播时间<=cluster-node-timeout/2。
  3. 从节点转移时间<=1000毫秒。

总故障转移时间≤cluster-node-timeout + cluster-node-timeout/2 + 1000毫秒。

集群不可用判定

为了保证集群完整性,当16384个槽有任意一个没有指派到节点时,集群不可用。执行键命令时返回错误。这是保护措施,保证所有槽都指派给在线节点。但是在高可用需求下,可以将参数cluster-require-full-coverage配置为no,主节点故障时只影响负责槽的相关命令执行,不会影响其他主节点的可用性。

集群读写分离
  1. 只读连接:从节点在默认情况下不接受读写请求。需要使用readonly命令打开客户端连接的只读状态,使从节点可以接受读命令。
  2. 读写分离:实现读写分离需要维护每个主节点的可用从节点列表,客户端需维护请求节点路由,并开启从节点连接的只读状态。读写分离在集群模式下成本较高,一般建议通过扩展主节点数量提高集群性能。

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

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

相关文章

使用lombok帮我们生成 getter、setter、无参构造器、全参构造器、equals、hashcode

文章目录 为什么要使用lombok&#xff1f;lombok的使用步骤1.检查 idea 是否安装 lombok 插件2.检查是否勾选了 enable annotation processing3.导入 lombok.jar 并加入到模块中4.在实体类添加注解 测试 为什么要使用lombok&#xff1f; lombok可以帮我们生成 getter、setter、…

独立游戏之路:Tap篇 -- 获取OAID提升广告收益

Unity 之 获取手机:OAID、ClientId、GUID 前言一、Oaid 介绍1.1 Oaid 说明1.2 移动安全联盟(MSA)二、站在巨人的肩膀上2.1 本文实现参考2.2 本文实现效果2.3 本文相关插件三、Unity 中获取Oaid3.1 查看实现源码3.2 工程配置3.3 代码实现3.4 场景搭建四、总结前言 在当今的移动…

SpringCloud 网关Gateway配置并使用

目录 1 什么是网关&#xff1f; 2 Gateway的使用 2.1 在其pom文件中引入依赖 2.2 然后gateway配置文件中配置信息 2.3 启动网关微服务 3 网关处理流程 4 前端-网关-微服务-微服务间实现信息共享传递 1 什么是网关&#xff1f; 网关&#xff1a;就是网络的关口&#xff…

vue+element el-select动态加减框数量及验证下拉框选项动态置灰(选中行的下拉框换个值后,原值没办法监控这个问题也解决了)

1效果: 2部分主要(HTML): 1:这个位置主要就是看看方法什么的吧,还有大概的结构 2:change"sort_Change(item,tablelists.orderbyList)这两个参数(都有大用): (1)item:代表每次你操作的这个数据 (2)tablelists.orderbyList:代表你这一共有几行数据(上边这个例子就会得到一个…

详解Base64编解码原理以及Base64编解码接口实现(附源码)

Base64编码已广泛地应用于各式各样的应用程序中,这些软件都在享受着Base64编码带来的便捷,但对于Base64编码相关概念及原理又了解多少呢?本文就来讲述一下Base64编码相关的内容。 1、Base64编码帮我们解决的实际问题 我们在使用libjingle(客户端)和XMPP服务器实现IM聊天功…

mysql:1205-Lock wait timeout exceeded;try restarting transaction

1.现象 2.分析 使用下面sql在自带数据库的information_schema中查询,注意观察那些长时间开启事务又没完成的进程,然后根据进程的db、操作人、主机、事务开启时间和状态,来排查是什么情况导致的事务未完成(代码异常、执行时间超时等等);我这里是异步作业事务执行时间过长导致的 …

Nintex流程平台引入生成式人工智能,实现自动化革新

工作流自动化提供商Nintex宣布在其Nintex流程平台上推出一系列新的人工智能驱动改进。这些增强显著减少了文档化、管理和自动化业务流程所需的时间。这些新特性为Nintex流程平台不断扩展的人工智能能力增添了新的亮点。 Nintex首席产品官Niranjan Vijayaragavan表示&#xff1a…

如何正确使用 include-what-you-use

简单地说&#xff0c;由 Google 开发的 include-what-you-use&#xff08;IWYU&#xff09;让源代码文件包含代码里用到的所有头文件。这种方法确保在改动了一些接口之后&#xff0c;代码依然最有可能编译成功。 之前我写了一篇关于 include-what-you-use 工具的文章&#xff…

arcgis如何给没有连通的路打交点

1、在打交点的时候需要先有图层&#xff0c;图层的构建流程如下所示 1、找到目录 2、先新建一个文件夹 3、在新建的文件夹下新建一个文件地理数据库 4、在文件地理数据库下&#xff0c;新建一个要素类数据集 5、在要素类数据集下进行数据导入&#xff0c;选择单个导入 6、在要…

Paddle Graph Learning (PGL)图学习之图游走类deepwalk、node2vec模型[系列四]

更多详情参考&#xff1a;Paddle Graph Learning 图学习之图游走类模型系列四 https://aistudio.baidu.com/aistudio/projectdetail/5002782?contributionType1 相关项目参考&#xff1a; 关于图计算&图学习的基础知识概览&#xff1a;前置知识点学习&#xff08;PGL&a…

❤ node报错总结

❤ node报错总结 &#xff08;expressJWT版本语法&#xff09;expressJWT is not a function 导入和使用expressJWT时遇到问题 import expressJWT from express-jwt app.use(expressJWT({ secret: secretKey }).unless({ path: [/login] }))原因 由于express-jwt 版本的更…

JS基础与高级应用: 性能优化

在现代Web开发中&#xff0c;性能优化已成为前端工程师必须掌握的核心技能之一。本文从URL输入到页面加载完成的全过程出发&#xff0c;深入分析了HTTP协议的演进、域名解析、代码层面性能优化以及编译与渲染的最佳实践。通过节流、防抖、重复请求合并等具体技术手段&#xff0…

esp32s3-gc9a01-lvgl

前言 近期做了一个项目是使用esp32s3 准亿科技的TFT屏幕 该屏幕使用的驱动IC为:GC9A01 通讯方式是:4线SPI , 三线spi和四线SPI区别在于:是否使用D/C信号线 开发LCD屏幕驱动, 可以参考乐鑫官网LCD显示屏指南 SPI 一共有4种工作模式. 根据接线 , 驱动方式的不同. 可分3 , …

【ARM Cache 及 MMU 系列文章 1.4 -- 如何判断 L3 Cache 是否实现?】

文章目录 Cluster Configuration Register代码实现什么是Single-Threaded Core?什么是PE(Processor Execution units)?Single-Threaded Core与PE的关系对比多线程(Multithreading)Cluster Configuration Register 同 L2 Cache 判断方法类似,ARMv9 中也提供了一个自定义…

程序设计实践--3

递推 一只小蜜蜂 有一只经过训练的蜜蜂只能爬向右侧相邻的蜂房&#xff0c;不能反向爬行。请编程计算蜜蜂从蜂房a爬到蜂房b的可能路线数。其中&#xff0c;蜂房的结构如图所示。 输入描述 输入数据的第一行是一个整数N(1<n<1,000,000),表示测试实例的个数&#xff0c;然…

我的网络安全之路——一场诗意的邂逅

文章来源&#xff5c;MS08067 安全实验室 本文作者&#xff1a;tuooo 我的网络安全之路 一场诗意的邂逅 童年的星光中&#xff0c;我仰望着璀璨的荧屏&#xff0c;心怀对未知机器世界的浩瀚与好奇。那时的我&#xff0c;每每想到各种游戏的破解版本与工具&#xff0c;便会被技术…

在欧拉系统中搭建万里数据库MGR集群(图文详解)

在信创和国产化的大趋势下&#xff0c;将各个中间件进行国产化替换是当前非常重要的任务之一。下面将介绍如何在国产化欧拉系统中安装国产万里数据库。 0.MGR简介 MGR&#xff08;MySQL Group Replication&#xff09;&#xff1a;是MySQL官方提供的一种高可用性和容错性解决…

【java计算机毕设】智慧图书管理系统javaweb MySQL springboot vue html maven送文档

1项目功能截图 【java计算机毕业设计分享】 智慧图书管理系统 Java SpringBoot vue HTML MySQL idea送文档 2项目介绍 系统功能&#xff1a; 智慧图书管理系统包括管理员和读者两种角色。 管理员的功能包括在个人中心修改个人信息和密码&#xff0c;基础数据管理模块包含读者类…

哪款桌面便签软件功能全面且用户评价高?

在日常生活中&#xff0c;便签软件已成为我们不可或缺的小助手。想象一下&#xff0c;在工作或学习时&#xff0c;你能够随时在桌面上看到自己的任务事项&#xff0c;这无疑会大大提高你的效率。便签软件不仅能帮助我们记录重要事项&#xff0c;还能提醒我们按时完成各项任务&a…

IDEA:配置Golang的开发环境及异常

1、下载&安装 进入GO的官网下载对应的GO 我们可以下载安装版&#xff0c;不过本人习惯下载解压版&#xff0c;这个因个人而异 2、配置环境变量 GOBIN : %GOROOT%\bin GOPATH : D:\MyGo 工作区间 GOROOT : D:\Program Files\Go GOJDK地址PATH: %GOBIN% ; %GOROOT%\bin ; …