Redis深入理解-主从架构下内核数据结构、主从同步以及主节点选举

Redis 主从挂载后的内核数据结构分析

  • 主节点中,会通过 clusteNode 中的 slaves 来记录该主节点包含了哪些从节点,这个 slaves 是一个指向 *clusterNode[] 数组的数据结构
  • 从节点中,会通过 clusterNode 中的 slaveof 来记录该从节点属于哪个主节点,指向了主节点的 clusterNode

下图带颜色的为主从架构中的内核数据结构:

在这里插入图片描述

Redis SYNC 主从复制原理以及缺陷

Redis 的主从复制是在不断演进过程中的,那么主从复制的目的也就是将主节点上的数据传输给从节点

那么这个演进过程中的目的就是尽量加快主节点数据向从节点的同步速度

首先,需要考虑当从节点第一次连接上主节点后,如何同步主节点的数据呢?

其次要考虑如果从节点宕机或者重启之后,重新连接上主节点,此时又该如何同步主节点的数据呢?

从节点第一次连接上主节点,我们可以通过生成 RDB 快照,将数据全量同步给从节点,并将之后的命令通过缓冲区不断同步给从节点

如果从节点断线之后重连主节点,那么我们就要合理的设置缓冲区的大小,来保证尽量进行增量同步,而不是全量同步

因此主从复制演进过程中的目标就是能增量同步就增量同步,尽量避免全量同步

关于主从复制原理的演进过程以及百度智能云在主从复制上的优化实践,可以参考文章:Redis 主从复制原理以及痛点

Redis 定时 PING 与疑似下线分析

接下来我们来了解一下在 Redis 主从架构下,如何进行故障探测?

每个 redis 节点,都会定时发送 ping 消息给其他所有节点,探测其他节点是否存活,如果节点存活,则会返回 pong 消息,在规定时间没有收到 pong 消息的话,发送 ping 消息的节点就会将该节点标记为 pfail(疑似下线)

如果在集群中有半数以上的节点认为一个节点疑似下线,那么此时就可以将该节点标记为 fail(正式下线)

那么这就是故障探测的原理,就是通过 ping+pong 消息进行探测,当集群半数以上节点认为某个节点疑似下线,那么就将该节点标记为正式下线,并且将该节点正式下线的消息同步给其他所有节点

Redis 主节点选举算法以及故障转移

在 Redis 主从架构中,master 挂掉之后,该 master 下的 slave 会感知到主节点的下线状态,就会尝试向其他主节点发送投票请求,表示自己想要当 master 节点,那么其他 master 会投票给收到的第一个请求的 slave 节点

如果一个 slave 收到了半数以上 master 的投票,那么该 slave 就被选举成为了新的 master,他再去通知所有的节点,并且将之前下线的 master 的槽位转移到自己这里,之后所有的 slave 都从新的主节点中同步数据

那么这个主节点选举的流程原理可以参考文章:Redis切片集群以及主节点选举机制

总结

通过 Redis 深入理解,可以从总体上了解到 Redis 单体架构下,server 端是如何运行起来的,以及他是如何客户端建立连接并且接收客户端时间进行处理这样一个流程

以及在 Redis 集群模式下,Redis 主从节点的内核数据结构是怎样的,集群之间槽位的转移,集群节点之间通信,集群故障探测原理,主从同步数据原理以及主节点选举原理

如果需要进一步了解 Redis 内核,可以从以下几个方面入手:

  • Redis 内核数据结构
  • 持久化机制
  • pub/sub、事务、lua、慢查询

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

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

相关文章

vue3中的Fragment、Teleport、Suspense新组件

Fragment组件 在Vue2中: 组件必须有一个根标签 在Vue3中: 组件可以没有根标签, 内部会将多个标签包含在一个Fragment虚拟元素中 好处: 减少标签层级, 减小内存占用 <template><div style"font-size: 14px;"><p> 组件可以没有根标签</p&g…

【JUC】十四、synchronized进阶

文章目录 1、synchronized2、synchronized与monitor3、管程Monitor4、Q&#xff1a;为什么每个Java对象都可以成为一个锁&#xff1f;5、小结 1、synchronized 写个demo&#xff0c;具体演示下对象锁与类锁&#xff0c;以及synchronized同步下的几种情况练习分析。demo里有资源…

Notion for Mac:打造您的专属多功能办公笔记软件

在如今这个信息爆炸的时代&#xff0c;一款高效、便捷的笔记软件对于办公人士来说已经成为必不可少的工具。Notion for Mac&#xff0c;作为一款多功能办公笔记软件&#xff0c;凭借其简洁优雅的界面、强大的功能以及无缝的云端同步&#xff0c;成为了众多用户的首选。 一、多…

LD_PRELOAD劫持

LD_PRELOAD劫持 <1> LD_PRELOAD简介 LD_PRELOAD 是linux下的一个环境变量。用于动态链接库的加载&#xff0c;在动态链接库的过程中他的优先级是最高的。类似于 .user.ini 中的 auto_prepend_file&#xff0c;那么我们就可以在自己定义的动态链接库中装入恶意函数。 也…

Redis基本操作及使用

&#x1f4d1;前言 本文主要是【Redis】——Redis基本操作及使用的文章&#xff0c;如果有什么需要改进的地方还请大佬指出⛺️ &#x1f3ac;作者简介&#xff1a;大家好&#xff0c;我是听风与他&#x1f947; ☁️博客首页&#xff1a;CSDN主页听风与他 &#x1f304;每日一…

Spring Boot 3 + Spring Security 6 最新版本修改 Json 登录后 RememberMe 功能问题失效的解决方案

当 Spring Boot 版本更新到 3 之后&#xff0c;最低要求的 JDK 版本变为 17&#xff0c;相应的 最新版本的 Spring Security 的配置也发生了变化&#xff0c;一下主要讲解一些新的 Spring Security 的配置方法 1. 配置由继承WebSeucrityConfigurerAdapter变成只需添加一个Secur…

蓝桥杯第一天-----时间显示

文章目录 前言一、题目描述二、测试用例三、题目分析四、具体代码实现总结 前言 本章中将相信介绍蓝桥杯中关于时间显示的题目。 链接&#xff1a;https://www.lanqiao.cn/problems/1452/learning/ 一、题目描述 二、测试用例 三、题目分析 1.输入的时间为毫秒&#xff0c;毫…

2020年6月15日 Go生态洞察:pkg.go.dev开源探索

&#x1f337;&#x1f341; 博主猫头虎&#xff08;&#x1f405;&#x1f43e;&#xff09;带您 Go to New World✨&#x1f341; &#x1f984; 博客首页——&#x1f405;&#x1f43e;猫头虎的博客&#x1f390; &#x1f433; 《面试题大全专栏》 &#x1f995; 文章图文…

接口01-Java

接口-Java 一、引入(快速入门案例)二、接口介绍1、概念2、语法 三、应用场景四、接口使用注意事项五、练习题1 一、引入(快速入门案例) usb插槽就是现实中的接口。 你可以把手机、相机、u盘都插在usb插槽上&#xff0c;而不用担心那个插槽是专门插哪个的&#xff0c;原因是做u…

深入理解虚拟 DOM:提升前端性能的关键技术

&#x1f90d; 前端开发工程师&#xff08;主业&#xff09;、技术博主&#xff08;副业&#xff09;、已过CET6 &#x1f368; 阿珊和她的猫_CSDN个人主页 &#x1f560; 牛客高级专题作者、在牛客打造高质量专栏《前端面试必备》 &#x1f35a; 蓝桥云课签约作者、已在蓝桥云…

【3D程序软件】SideFX与上海道宁一直为设计师提供程序化 3D动画和视觉效果工具,旨在创造高质量的电影效果

Houdini是一个 从头开始构建的程序系统 使艺术家能够自由工作 创建多次迭代 并与同事快速共享工作流程 Houdini FX为 视觉特效艺术家创作故事片 广告或视频游戏 凭借其基于程序节点的工作流程 Houdini FX可让 您更快地创建更多内容 从而缩短时间并 在所有创意任务中…

STM32 ADC转换器、串口输出

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录 前言一、ADC是什么&#xff1f;二、STM32的ADC2.1 认识STM32 ADC2.2转换方式2.3 为什么要校准&#xff1f;2.4 采样时间计算2.5 触发方式2.6 多通道采集解决方案2.7…