Redis集群(5)
集群原理
节点通信
通信流程
在分布式存储系统中,维护节点元数据(如节点负责的数据、节点的故障状态等)是关键任务。常见的元数据维护方式分为集中式和P2P方式。Redis集群采用P2P的Gossip协议,这种协议的工作原理是节点之间不断通信交换信息,类似流言传播,最终所有节点都会知道集群的完整信息。
通信流程如下:
- 集群中的每个节点都会单独开辟一个TCP通道用于节点之间通信,通信端口号在基础端口上加10000。
- 每个节点按照固定周期,通过特定规则选择几个节点发送ping消息。
- 接收到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)。
客观下线
当某个节点判断另一个节点主观下线后,这一状态会通过消息在集群内传播。当超过半数以上持有槽的主节点认为该节点不可用时,触发客观下线流程:
- 统计有效的下线报告数量。如果小于主节点总数的一半则退出。
- 大于主节点数量一半时,标记为客观下线状态。
- 向集群广播fail消息,通知所有节点标记故障节点为客观下线,并触发故障转移。
故障恢复
当主节点变为客观下线后,需要在从节点中选出一个替代。下线主节点的所有从节点都要承担故障恢复的义务。
资格检查
从节点检查最后与主节点断线的时间。如果超过cluster-node-time * cluster-slave-validity-factor,从节点失去故障转移资格。
准备选举时间
符合资格的从节点会根据复制偏移量设置延迟选举时间,优先级高的从节点会提前发起选举。
发起选举
当选举时间到达,从节点发起选举流程:
- 更新配置纪元(配置纪元用于标示当前主节点的版本)。
- 发起选举请求。
选举投票
持有槽的主节点才会处理选举请求,每个配置纪元内只能投票给一个从节点。当从节点收集到超过半数的持有槽主节点投票时,可以执行主节点替换。
替换主节点
从节点收集足够选票后:
- 取消复制,变为主节点。
- 撤销故障主节点负责的槽,并接管这些槽。
- 向集群广播自己的pong消息,通知变为主节点并接管槽信息。
故障转移时间
故障转移时间估算如下:
- 主观下线识别时间=cluster-node-timeout。
- 主观下线状态消息传播时间<=cluster-node-timeout/2。
- 从节点转移时间<=1000毫秒。
总故障转移时间≤cluster-node-timeout + cluster-node-timeout/2 + 1000毫秒。
集群不可用判定
为了保证集群完整性,当16384个槽有任意一个没有指派到节点时,集群不可用。执行键命令时返回错误。这是保护措施,保证所有槽都指派给在线节点。但是在高可用需求下,可以将参数cluster-require-full-coverage配置为no,主节点故障时只影响负责槽的相关命令执行,不会影响其他主节点的可用性。
集群读写分离
- 只读连接:从节点在默认情况下不接受读写请求。需要使用readonly命令打开客户端连接的只读状态,使从节点可以接受读命令。
- 读写分离:实现读写分离需要维护每个主节点的可用从节点列表,客户端需维护请求节点路由,并开启从节点连接的只读状态。读写分离在集群模式下成本较高,一般建议通过扩展主节点数量提高集群性能。
相关文章:
Redis集群(5)
集群原理 节点通信 通信流程 在分布式存储系统中,维护节点元数据(如节点负责的数据、节点的故障状态等)是关键任务。常见的元数据维护方式分为集中式和P2P方式。Redis集群采用P2P的Gossip协议,这种协议的工作原理是节点之间不断…...
STM32H5 DAC 配置
STM32 H5 DAC的详细初始化过程可以分为以下几个步骤,以下是根据参考文章和相关资料整理的具体步骤和参数设置: 1、使能相关时钟: 使能GPIOA(或其他对应DAC输出引脚的GPIO端口)的时钟。这通常是通过调用RCC_APB2Perip…...
第十九节:暴力递归到动态规划
一 动画规划的概念 优化出现重复解的递归 一旦写出递归来,改动态规划就很快 尝试策略和状态转移方程是一码事 学会尝试是攻克动态规划最本质的能力 如果你发现你有重复调用的过程,动态规划在算过一次之后把答案记下来,下回在越到重复调用过程…...
服务器部署spring项目jar包使用bat文件,省略每次输入java -jar了
echo off set pathC:\Program Files\Java\jre1.8.0_191\bin START "YiXiangZhengHe-8516" "%path%/java" -Xdebug -jar -Dspring.profiles.activeprod -Dserver.port8516 YiXiangZhengHe-0.0.1-SNAPSHOT.jar 将set path后面改成jre的bin文件夹 START 后…...
2024备忘知识点
1. adb shell dumpsys package f |grep fin 过滤查找指纹服务 1. adsp write /sys/kernel/boot_adsp/boot 1 Please change replace dev_dbg into dev_err in kernel file adsp-loader.c. Then check whether "write /sys/kernel/boot_adsp/…...
JS基础与高级应用: 性能优化
在现代Web开发中,性能优化已成为前端工程师必须掌握的核心技能之一。本文从URL输入到页面加载完成的全过程出发,深入分析了HTTP协议的演进、域名解析、代码层面性能优化以及编译与渲染的最佳实践。通过节流、防抖、重复请求合并等具体技术手段࿰…...
Python | Leetcode Python题解之第145题二叉树的后序遍历
题目: 题解: class Solution:def postorderTraversal(self, root: TreeNode) -> List[int]:def addPath(node: TreeNode):count 0while node:count 1res.append(node.val)node node.righti, j len(res) - count, len(res) - 1while i < j:res…...
公司面试题总结(二)
7. 说说 JavaScript 中的数据类型?存储上的差别? • 基本类型: o Number o String o Boolean o Undefined o null o symbol • 引用类型 o Object o Array o Function • 声明变量时不同的内存地址分配: o 简单类型的…...
人脸识别和 ArcFace:用于深度人脸识别的附加角边际损失
在本文中,您将发现一种 ArcFace 方法,该方法可获得用于人脸识别的高分辨特征。阅读本文后,你将了解: 人脸识别任务如何工作。如何计算人脸匹配。SoftMax 和 ArcFace 的直观区别。ArcFace 的几何解释。ArcFace 背后的数学原理本文假定您已经熟悉用于多类分类、检测和 SoftMax…...
双标引领:汽车软件安全的ASPICE与ISO21434之道
随着汽车行业的飞速发展,尤其是智能化、网联化趋势的加剧,汽车软件开发的复杂性和安全性需求日益提升。在这样的背景下,ASPICE标准和ISO21434安全标准应运而生,为汽车软件的开发和管理提供了坚实的支撑。 ASPICE(Auto…...
再度牵手,制造升级 | 毅达科技IMS OS+通用产品集+行业套件项目正式启动!
在数字化与智能制造的浪潮中,制造业企业纷纷加快转型步伐,力求通过技术创新实现生产效率与质量的双重提升。近日,广东毅达医疗科技股份有限公司(以下简称“毅达科技”)再次携手盘古信息,正式启动了IMS 数字…...
大疆智图_空三二维重建成果传输
一、软件环境 1.1 所需软件 1、 大疆智图:点击下载; 2、 ArcGIS Pro 3.1.5:点击下载,建议使用IDM或Aria2等多线程下载器; 3、 IDM下载器:点击下载,或自行搜索; 4、 Fas…...
python实现无人机航拍图片像素坐标转世界坐标
背景 已知相机参数(传感器宽度和高度、图像宽度和高度、焦距、相对航高、像主点坐标 ),在给定像素坐标的前提下,求世界坐标,大部分通过AI来实现,不知道哪个步骤有问题,望大家指正 脚本 impor…...
C#面:什么是 Windows 服务,它的生命周期与标准的 EXE 程序有什么不同
C#中的Windows服务是一种在后台运行的长时间运行的应用程序,它可以在Windows操作系统启动时自动启动,并在系统运行期间持续运行。与标准的EXE程序相比,Windows服务具有以下不同之处: 生命周期:Windows服务的生命周期与…...
Java基础面试题自测
文章目录 一、Java 中有哪 8 种基本数据类型?说说这 8 种基本数据类型对应的包装类型?二、包装类型的常量池技术了解么?三、为什么要有包装类型?四、什么是自动拆装箱?原理?四、遇到过自动拆箱引发的 NPE 问…...
【LeetCode 第 401 场周赛】K秒后第 N 个元素的值
文章目录 1. K秒后第 N 个元素的值🆗 1. K秒后第 N 个元素的值🆗 题目链接🔗 🐧解题思路: 前缀和 小规律🍎 🍎 从上图观察可知,规律一目了然,arr[i] arr[i] 对上一…...
游戏心理学Day10
习得性动机。 习得性动机也称社会性动机是指人与社会生活相联系的后天习得的动机,这类动机比原发性动机要多很多。 成就动机。 成就动机是指个人追求进步以及达到目标的内在动力。 在游戏中设计师总会担心过多的失败,会令玩家感到挫败进而离开游戏 对…...
MySQL表设计经验汇总篇
文章目录 1、命名规范2、选择合适的字段类型3、主键设计要合理4、选择合适的字段长度5、优先考虑逻辑删除,而不是物理删除6、每个表都需要添加通用字段7、一张表的字段不宜过多8、定义字段尽可能not null9、合理添加索引10、通过业务字段冗余来减少表关联11、避免使…...
Servlet基础(续集2)
HttpServletResponse web服务器接收到客户端的http的请求,针对这个请求,分别创建一个代表请求的HttpServletRequest对象,代表响应的一个HttpServletResponse 如果要获取客户端请求过来的参数:找HttpServletRequest如果要给客户端…...
【云原生】创建harbor私有仓库及使用aliyun个人仓库
1.安装docker #删除已有dockersystemctl stop docker yum remove docker \docker-client \docker-client-latest \docker-common \docker-latest \docker-latest-logrotate \docker-logrotate \docker-engine #安装docker yum install -y docker-ce-20.10.1…...
什么是SOLIDWORKS科研版
随着科技的不断进步,工程设计和科学研究变得越来越复杂,需要更强大的工具来满足需求。SOLIDWORKS科研版就是在这样的背景下诞生的,它为科研人员和工程师提供了一套全方面、快捷的解决方案,以应对各种科研和工程挑战。 SOLIDWORKS科…...
微信小程序页面配置
页面配置 小程序的配置可以配置页面路径、窗口表现、tabBar等,分为全局配置和页面配置,全局配置针对所有页面生效,页面配置只针对当前页生效。 全局配置 (app.json) (1) 路径配置 pages 配置页面路径,未配置路径的页面无法被访…...
如何将JPG/PNG位图免费快速一键转换成SVG格式的矢量图
环境: JPG/PNG位图 问题描述: 如何将JPG/PNG位图快速一键转换成SVG格式的矢量图 解决方案: 是一个人工智能驱动的图片转换工具,可以帮助用户将」JPG/PNG位图快速转换成SVG格式的矢量图,方便设计人员对图片进行二次…...
YOLO检测环境安装配置
YOLO介绍 YOLO学习手册:YOLO教程 YOLO [ˈjoʊloʊ](You Only Look Once)是一种快速而准确的目标检测算法,由Joseph Redmon等人在2016年提出。YOLO被广泛应用于计算机视觉领域,包括实时视频分析、自动驾驶、安防监控、…...
NOSQL -- ES
第三个我们比较常用的NOSQL类型的数据库 --- ES 介绍: ES的全称(Elasticsearch) ES是一个分布式全文搜索的引擎 也就是我们平常在购物, 搜索东西的时候常用的, 就是一个ES的类型, 分布式全文搜索引擎 查询原理: 1>分词: 在查询之前, 其会将一些数据拆分开, 按照词进行拆分…...
【Python基础】名称空间和作用域
1.名称空间 将栈区进行分类,这些分类就是名称空间 名称空间存放什么名字空间个数何时创建&销毁内置名称空间built-inPython解释器内置的名字1个Python解释器启动&解释器关闭 全局名称空间 global Python文件内定义的类名,变量名,模块…...
安全智能预警软件有人试图窃取会立即发出高分贝警报已解锁VIP功能
一款手机安全智能预警软件,无论是网吧还是餐馆小聚,您的手机都能得到贴心的守护,一旦有人试图窃取,应用会立即发出高分贝警报,确保您在公交、地铁、商场等拥挤环境中依然能牢牢掌控手机。(解锁专业版&#…...
DeepSORT(目标跟踪算法)中自由度决定卡方分布的形状
DeepSORT(目标跟踪算法)中自由度决定卡方分布的形状 flyfish 重要的两个点 自由度决定卡方分布的形状(本文) 马氏距离的平方在多维正态分布下服从自由度为 k 的卡方分布 独立的信息 在统计学中,独立的信息是指数据…...
cordic IP核中,sin and cos的使用
参考视频:FPGA IP之CORDIC_哔哩哔哩_bilibili FPGA IP之CORDIC使用与仿真_哔哩哔哩_bilibili 一、参数说明 functional selection rotate是旋转,sin and cos是计算这两个三角函数,sinh和cosh是计算双曲正弦和双曲余弦 phase format 对于…...
SpringSecurity入门(三)
12、密码加密 12.1、不指定具体加密方式,通过DelegatingPasswordEncoder,根据前缀自动选择 PasswordEncoder passwordEncoder PasswordEncoderFactories.createDelegatingPasswordEncoder();12.2、指定具体加密方式 // Create an encoder with streng…...
黑彩网站充值就给你做单子/网站seo优化软件
1.引言合理利用线程池能够带来三个好处。第一:降低资源消耗。通过重复利用已创建的线程降低线程创建和销毁造成的消耗。第二:提高响应速度。当任务到达时,任务可以不需要的等到线程创建就能立即执行。第三:提高线程的可管理性。线…...
低代码建站平台/百度知道客服电话人工服务
by Jos Mara Mndez 原文链接: http://www.gamedev.net/reference/programming/features/simpleSSAO/ 绪论 全局照明(global illumination, GI)是一个计算机图形学术语, 它指的是所有表面之间相互作用的光照现象(光线来回跳动, 折射, 或者被遮挡), 例如: 渗色(color bleeding),…...
做网站要注意的/seo优化外包公司
1.LocationManagerProxy 获取当前Context 创建一个LocationManagerProxy 变量 mAMapLocManager LocationManagerProxy.getInstance(this); 2.mAMapLocManager.requestLocationUpdates(LocationProviderProxy.AMapNetwork, 5000, 10, this); //设定 精度 5000m 监听器为当…...
自己可以进行网站建设吗/百度电话
TCL文件查找拆分 我现在有一个 .res 的文件,这个文件中包括以下两行测试结果: rdly 3.4405E-10 targ 2.0084E-07 trig 2.0050E-07 fdly 3.1211E-10 targ 1.0081E-07 trig 1.0050E-07现在我想写一个Tc…...
php 实现网站扫码登录/站长之家站长工具
Linux 命令之grep 的常见使用总结:一、grep简介Grep(Global Regular Expression Print),它是Linux系统中一种强大的文本搜索工具,根据用户指定的文本模式去对目标文件或标准输入进行逐行查找输入,显示能够被匹配到的字符串的所在行。这是提到…...
管理系统登录/搜索引擎优化的目标
部署了一台samba服务器了之后用windows连接有一个很普遍的问题,就是登陆过samba一个用户之后windows系统会自动记录上次登陆的samba用户名和密码,所以在下次登陆就不用重新输入账号密码,个人认为这是比较危险的一个地方,特别是在公…...