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.mzph.cn/news/179821.shtml

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

相关文章

Windows10系统卸载服务和删除服务

记录一下Windows10系统卸载服务和删除服务 最近在使用自己win电脑的时候 发现服务里存在很久之前就没有使用的应用,对应的文件夹也都已经删除了,但是在win服务里一直存在,不知道会不会影响性能,看着吧还是强迫自己删掉好一些&…

Spring Cloud 版本升级记:OpenFeignClient与Gateway的爱恨交织

Spring Cloud 版本升级记:OpenFeignClient与Gateway的爱恨交织 近日,在负责的项目中,我对 Spring Boot、Spring Cloud 以及 Spring Cloud Alibaba 进行了版本升级。原以为会一切顺利,没想到却遭遇了 Spring Cloud Gateway 无法正…

DockerCompose修改某个服务的配置(添加或编辑端口号映射)后如何重启单个服务使其生效

场景 docker-compose入门以及部署SpringBootVueRedisMysql(前后端分离项目)以若依前后端分离版为例: docker-compose入门以及部署SpringBootVueRedisMysql(前后端分离项目)以若依前后端分离版为例_docker-compose部署java mysql redis-CSDN博客 上面讲了docker c…

pycharm右键执行,出现Run ‘Python tests in xxx‘的问题

1.问题描述 用pytest框架写了一个python的模块,右键执行时发现,执行的模块显示有问题,如下图所示 2.解决问题 Python tests这表示,当前运行的代码文件进入了pytest模式,pytest模式不同于run模式,因为运行…

postgresql以及postgis安装

一、安装postgresql及postgis 1.下载postgresql https://www.enterprisedb.com/downloads/postgres-postgresql-downloads 我选择的版本为“postgresql-14.8-2-windows-x64.exe”。 2.以管理员模式运行安装程序 安装路径建议不要C盘,可能会由于权限问题导致目录…

跨境无限,智能连接 浙江省跨境电商产业联盟AIGC专委会—AIGC大会

2023年11月23日至27日,第二届全球数字贸易博览会在杭州国际博览中心举办。本届数贸会以“数字贸易 商通全球”为主题,中国与来自63个国家和地区、68个国际组织和境外商协会的各界代表约1000人出席开幕式。浙江省跨境电商产业联盟AIGC专委会受邀出席此次大…

C#简化工作之实现网页爬虫获取数据

1、需求 想要获取网站上所有的气象信息,网站如下所示: 目前总共有67页,随便点开一个如下所示: 需要获取所有天气数据,如果靠一个个点开再一个个复制粘贴那么也不知道什么时候才能完成,这个时候就可以使用C#…

sed应用

一.sed 1.Sed概述 sed编辑器时一种流编辑器,流编辑器会在编辑器处理数据之前基于预先提供的一组规则来编辑数据流。 sed编辑器可以根据命令来处理数据流中的数据,这些命令要么从命令行中输入,要存储在一个命令文本文件中。 2.sed命令的格…

Spring Boot实现图片上传和展示

Spring Boot实现图片上传和展示 本文将介绍如何使用Spring Boot框架搭建后端服务,实现接收前端上传的图片并保存到resources/images目录下。同时,我们还将展示如何在前端编写一个HTML页面,实现上传图片和从resources/images目录下获取图片并…

Linux文件目录结构_文件管理

Linux文件目录结构 Linux目录结构简洁 windows:以多根的方式组织文件 C:\ D:\ E:\ Linux: 以单根的方式组织文件/ Linux目录结构视图 注意区分: 系统管理员:中文“根”,root 系统目录(文件夹):根&#xf…

Unity WebGL通过URL的形式接收参数执行初始化

参考博客: http://t.csdnimg.cn/QnfhK 问题背景: 需要在外面的网页指定WebGL的打开初始化逻辑。 步骤: 1.配置jslib,用文本文件创建即可,"__Internal.jslib"。 2.加入一段代码: mergeInto(…

初识Java 18-4 泛型

目录 泛型存在的问题 在泛型中使用基本类型 实现参数化接口 类型转换和警告 无法实现的重载 基类会劫持接口 自限定类型 奇异递归类型 自限定 自限定提供的参数协变性 本笔记参考自: 《On Java 中文版》 泛型存在的问题 接下来讨论的,是在泛型…

C语言——字符函数和字符串函数(上)

在编程的过程中,我们经常要处理字符和字符串,为了方便操作字符和字符串,C语⾔标准库中提供了⼀系列库函数,接下来我们就学习⼀下这些函数。 一、 字符分类函数 C语⾔中有⼀系列的函数是专⻔做字符分类的,也就是⼀个字…

Java——》线性数据结构

推荐链接: 总结——》【Java】 总结——》【Mysql】 总结——》【Redis】 总结——》【Kafka】 总结——》【Spring】 总结——》【SpringBoot】 总结——》【MyBatis、MyBatis-Plus】 总结——》【Linux】 总结——》【MongoD…

开放式耳机性价比排行榜、开放式耳机性价比排行榜前十

目前市面上的蓝牙耳机品类繁多,开放式蓝牙耳机是这几年比较新兴的,因为不入耳、佩戴舒适、安全系数高等优点,一直备受运动人士追捧,还有像我们这样日常用但是耳道比较小或者戴入耳式觉得头晕恶心的人,开放式耳机真的是…

神经网络核心组件和流程梳理

文章目录 神经网络核心组件和流程梳理组件流程 神经网络核心组件和流程梳理 组件 层:神经网络的基本结构,将输入张量转换为输出张量。模型:由层构成的网络。损失函数:参数学习的目标函数,通过最小化损失函数来学习各…

Junos webauth_operation.php 文件上传漏洞复现(CVE-2023-36844)

0x01 产品简介 Junos 是 Juniper Networks 生产的一款可靠的高性能网络操作系统。 0x02 漏洞概述 Junos webauth_operation.php接口处存在文件上传漏洞,未经身份认证的攻击者可利用 Junos 操作系统的 J-Web 服务 /webauth_operation.php 路由上传 php webshell&…

MySQL系列 - 数据类型

MySQL是一种常用的关系型数据库管理系统,它支持多种数据类型,包括整数、浮点数、字符串、日期和时间等。在本文中,我们将介绍MySQL中常用的数据类型及其用法。 MySQL数据类型介绍: 1、整数类型: MySQL提供了多种整数…

聚观早报 |魅族21搭载超声波指纹2.0;华为长安成立新公司

【聚观365】11月28日消息 魅族21搭载超声波指纹2.0 华为长安成立新公司 OPPO Reno11 Pro本周首销 淘宝天猫推出系列AI工具 长城汽车计划全面进入欧洲市场 魅族21搭载超声波指纹2.0 魅族官方此前已宣布,将于11月30日召开“2023魅族秋季无界生态发布会”&#x…

【用unity实现100个游戏之17】从零开始制作一个类幸存者肉鸽(Roguelike)游戏3(附项目源码)

文章目录 本节最终效果前言近战武器控制近战武器生成升级增加武器伤害和数量查找离主角最近的敌人子弹预制体生成子弹发射子弹参考源码完结 本节最终效果 前言 本节紧跟着上一篇,主要实现武器功能。 近战武器 新增Bullet,子弹脚本 public class Bull…