Redis高可用架构演进面试笔记

1. 主从复制架构

核心概念

核心概念

Redis单节点并发能力有限,通过主从集群实现读写分离提升性能:

  • Master节点:负责写操作
  • Slave节点:负责读操作,从主节点同步数据

主从同步流程

全量同步(首次同步)

全量同步

  1. 建立连接:从节点向主节点发送同步请求(携带replicationid、offset)
  2. 版本校验:主节点判断是首次请求,与从节点同步版本信息
  3. 生成快照:主节点执行bgsave生成RDB文件
  4. 数据传输:将RDB文件发送给从节点加载
  5. 增量补偿:同步期间新写入的命令记录到缓冲区(replication buffer),随后发送给从节点
增量同步(后续同步)

增量同步

  1. 断线重连:从节点重启或网络恢复后请求同步
  2. 偏移量对比:主节点获取从节点的offset值
  3. 差异同步:从命令日志(replication backlog)中获取offset之后的数据发送给从节点

关键参数

  • replicationid:标识数据集版本
  • offset:复制偏移量,标识同步进度

2. 哨兵机制(Sentinel)

哨兵集群

解决问题

主从架构无法自动故障转移,引入哨兵实现高可用。

工作原理

健康监测

检测

  • 心跳检测:每隔1秒向集群实例发送PING命令
  • 主观下线:单个哨兵认为实例无响应
  • 客观下线:超过quorum数量的哨兵都认为实例下线(quorum > 哨兵数/2)
故障转移

自动选举新的主节点,选主规则按优先级:

  1. 网络连接:排除与主节点断开时间过长的从节点
  2. slave-priority:优先级配置,数值越小优先级越高
  3. 复制偏移量:offset越大(数据越新)优先级越高
  4. 运行ID:ID越小优先级越高

3. 脑裂问题

问题描述

脑分裂

网络分区导致集群出现两个Master节点,类似"大脑分裂"。

产生原因

主节点与哨兵、从节点网络隔离,哨兵误判主节点下线并选举新主节点。

危害

  • 客户端向旧主节点写入数据
  • 新主节点无法同步这些数据
  • 网络恢复后数据丢失

解决方案

配置参数限制写入条件:

min-replicas-to-write 1        # 至少1个从节点在线
min-replicas-max-lag 5         # 主从同步延迟不超过5秒

4. 分片集群(Cluster)

分片集群

解决问题

主从+哨兵仍存在两个核心问题:

  • 海量数据存储:单主节点内存限制
  • 高并发写入:单主节点写入瓶颈

集群特征

  • 多个Master节点,每个存储不同数据
  • 每个Master可配置多个Slave节点
  • Master间通过PING监测健康状态
  • 客户端可访问任意节点,自动路由到正确节点

数据分片机制

哈希槽(Hash Slot)

哈希槽

  • 槽位总数:16384个哈希槽
  • 分配算法:CRC16(key) % 16384
  • 槽位分配:每个Master节点负责一部分槽位
数据路由流程
  1. 客户端对key进行CRC16校验
  2. 对16384取模确定槽位
  3. 根据槽位映射找到对应节点
  4. 如果访问错误节点,返回MOVED重定向

面试要点总结

架构演进路径

单机 → 主从复制 → 哨兵集群 → 分片集群

各架构解决的问题

  • 主从复制:读写分离,提升并发读能力
  • 哨兵机制:自动故障转移,实现高可用
  • 分片集群:水平扩展,解决存储和写入瓶颈

核心技术点

  • 数据同步:全量同步 + 增量同步
  • 故障检测:心跳机制 + 主客观下线
  • 数据分片:一致性哈希槽算法
  • 脑裂预防:最小从节点数 + 同步延迟限制

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

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

相关文章

无人机保养指南

定期清洁无人机在使用后容易积累灰尘、沙砾等杂物,需及时清洁。使用软毛刷或压缩空气清除电机、螺旋桨和机身缝隙中的杂质。避免使用湿布直接擦拭电子元件,防止短路。电池维护锂电池是无人机的核心部件,需避免过度放电或充电。长期存放时应保…

vlm MiniCPM 学习部署实战

目录 开源地址: 模型repo下载: 单图片demo: 多图推理demo: 论文学习笔记: 部署完整教程: 微调教程: 部署,微调教程,视频实测 BitCPM4 技术报告 创意&#xff1…

92套毕业相册PPT模版

致青春某大学同学聚会PPT模版,那些年我们一起走过的岁月PPT模版,某学院某班同学联谊会PPT模版,匆匆那年PPT模版,青春的纪念册PPT模版,栀子花开PPT模版,毕业纪念册PPT模版。 92套毕业相册PPT模版&#xff1…

爬虫基础概念

网络爬虫概述 概念 网络爬虫(Web Crawler),也称为网络蜘蛛(Web Spider)或机器人(Bot),是一种自动化程序,用于系统地浏览互联网并收集网页信息。它模拟人类浏览器行为&…

java8 stream流操作的flatMap

我们来详细解释一下 Java 8 Stream API 中的 flatMap 操作。理解 flatMap 的关键在于将其与 map 操作进行对比。​​核心概念:​​​​map 操作:​​作用:将一个流中的每个元素​​转换​​为另一个元素(类型可以不同)…

开源UI生态掘金:从Ant Design二次开发到行业专属组件的技术变现

开源UI生态掘金:从Ant Design二次开发到行业专属组件的技术变现内容摘要在开源UI生态中,Ant Design作为一款广受欢迎的UI框架,为开发者提供了强大的基础组件。然而,面对不同行业的特定需求,仅仅依靠现有的组件往往难以…

Object Sense (OSE):一款从编辑器脚本发展起来的编程语言

引言:从Vim编辑器走出的语言在编程语言的世界里,许多革命性的创新往往源于看似简单的工具。Object Sense(简称OSE)的诞生,便与一款经典文本编辑器——Vim息息相关。它的前身是Vim的脚本语言VimL(Vimscript&…

我考PostgreSQL中级专家证书二三事

1. 为什么选择PGCE?PostgreSQL的开源特性、高性能和高扩展性早已让我心生向往,而PGCE认证不仅是对技术能力的认可,更是一张通往更高职业舞台的“通行证”。官方资料提到,PGCE考试涵盖性能优化、高可用架构、复杂查询处理、内核原理…

Java 动态导出 Word 登记表:多人员、分页、动态表格的最佳实践

本文详细讲解如何使用 Java 动态导出包含多人员报名表的 Word 文档,每人占据独立一页,并支持动态表格行(如个人经历)。我们对比了多种实现方案,最终推荐基于 Freemarker XML 模板 或 docx4j 的灵活方式,并…

【element-ui el-table】多选表格勾选时默认勾选了全部,row-key绑定异常问题解决

项目场景: Element-UI的el-table组件row-key使用问题 同一个页面使用了几个table,这几个table都使用了多选,row-key属性,其中row-key的绑定方式都是用的静态绑定,row-key“username”或row-key“id”,可正常…

C#注释技巧与基础编程示例

以下是一个包含基础注释的 C# 程序示例&#xff0c;展示了 C# 中各类注释的使用方法&#xff1a;using System;namespace BasicCSharpProgram {/// <summary>/// Program 类是应用程序的入口点/// 包含 Main 方法作为程序执行的起点/// </summary>public class Pro…

极客大挑战2019-HTTP

涵盖知识&#xff1a;UA头伪造漏洞&#xff1a;全称&#xff1a;User-Agent 这个部分包含我们所使用的操作系统版本&#xff0c;cpu&#xff0c;浏览器类型等。来源伪造漏洞&#xff1a;在http请求头中会携带一个Referer&#xff0c;这个用来表示服务器用户是从哪个地方来的X-F…

谈谈ArrayList与Vector的理解?

目录 扩容机制 ArrayList扩容源码 Vector扩容源码 二者区别 扩展&#xff1a;stack(栈&#xff09; 1.创建stack对象 2. 入栈(先进后出&#xff09; 3.出栈 扩展&#xff1a;举个例子&#xff1a;实现下字符串逆置&#xff0c;利用stack栈来实现。 从接口实现上&#xff…

【Linux庖丁解牛】— 多线程同步 !

1. 什么是线程同步为什么会有线程同步&#xff0c;那一定是有了新问题。互斥可以解决临界资源被同时访问的问题&#xff0c;但是纯互斥也会带来新的问题。由于当前被执行的线程离cpu最近【其他线程被阻塞挂起还要被唤醒】&#xff0c;所以&#xff0c;当前进程对于竞争锁天然就…

基于arduino uno r3主控的环境监测系统设计-1

准备设计arduino uno r3为主控的环境监测系统&#xff0c;通过传感器采集TVOC&#xff08;总挥发性有机物&#xff09;、HCHO&#xff08;甲醛&#xff09;和eCO2&#xff08;等效二氧化碳&#xff09;数据&#xff0c;并显示在LCD屏幕上&#xff0c;同时支持数据记录到SD卡&am…

ITIL 4:云计算与微服务对组织架构的影响

这几年&#xff0c;很多组织在推进数字化转型时遇到一个共同的问题&#xff1a;业务节奏越来越快&#xff0c;但内部协作的“架构”却越来越跟不上节奏。技术架构的变革&#xff0c;必须同步推动组织架构的重塑。特别是随着云计算和微服务架构的广泛应用&#xff0c;这种影响愈…

【Android】xml和Java两种方式实现发送邮件页面

三三要成为安卓糕手 一&#xff1a;xml中LinearLayout布局参数的使用 1&#xff1a;xml代码 <?xml version"1.0" encoding"utf-8"?> <LinearLayout xmlns:android"http://schemas.android.com/apk/res/android"xmlns:app"http:/…

美林数据用大模型重构电能质量评估,让隐蔽合规问题无所遁形

在“双碳”目标驱动下&#xff0c;电网企业正加速推进数字化转型&#xff0c;电能质量评估作为电力系统安全运行的核心环节&#xff0c;其合规性与效率直接影响着电网智能化水平。然而&#xff0c;传统人工审核模式已难以应对海量报告与复杂标准——单份报告需20-30人天核对、关…

前端基础 JS Vue3 Ajax

一、JSalert( .... ) //弹出框console.log( ....... ) //输出到控制台浏览器JS引入方式&#xff1a;1、内部脚本&#xff1a;将JS代码定义在HTML页面中位于<script></script>标签之间2、外部脚本&#xff1a;将JS代码写在外部JS文件中&#xff0c;在HTML页面中使用…

如何解决pip安装报错ModuleNotFoundError: No module named ‘notebook’问题

【Python系列Bug修复PyCharm控制台pip install报错】如何解决pip安装报错ModuleNotFoundError: No module named ‘notebook’问题 一、摘要 在使用 PyCharm 进行 Python 开发时&#xff0c;常常需要通过 pip install 安装第三方包。但有时即便已经安装成功&#xff0c;运行代…