面试笔记——Redis(集群方案:主从复制、哨兵模式和分片集群)

主从复制

在 Redis 主从集群中,一个主节点(Master)负责处理客户端的读写请求,而多个从节点(Slave)则负责复制主节点的数据,并对外提供读取服务——解决高并发问题。

  1. 主节点(Master)

    • 主节点是集群中的核心节点,负责处理客户端的写入请求(如写入操作、更新操作等)。主节点维护系统的主要数据副本,并负责将写入的数据复制到所有的从节点上。
  2. 从节点(Slave)

    • 从节点是主节点的备份节点,负责复制主节点的数据,并对外提供读取服务。从节点通过异步复制的方式从主节点同步数据,并保持与主节点的数据一致性。从节点通常用于处理客户端的读取请求(如查询操作、读取操作等),以分担主节点的读取负载。

在这里插入图片描述

主从数据同步原理

全量同步流程:

  1. 从节点请求主节点同步数据(replication id、 offset )
  2. 主节点判断是否是第一次请求,是第一次就与从节点同步版本信息(replication id和offset)
  3. 主节点执行bgsave,生成rdb文件后,发送给从节点去执行
  4. 在rdb生成执行期间,主节点会以命令的方式记录到缓冲区(一个日志文件)
  5. 把生成之后的命令日志文件发送给从节点进行同步
    在这里插入图片描述

增量同步流程:

  1. 从节点请求主节点同步数据,主节点判断不是第一次请求,不是第一次就获取从节点的offset值
  2. 主节点从命令日志中获取offset值之后的数据,发送给从节点进行数据同步
    在这里插入图片描述
哨兵模式

哨兵(Sentinel)机制来实现主从集群的自动故障恢复——解决高可用问题。哨兵的结构和作用如下:

  • 监控:Sentinel 会不断检查您的master和slave是否按预期工作
  • 自动故障恢复:如果master故障,Sentinel会将一个slave提升为master。当故障实例恢复后也以新的master为主
  • 通知:Sentinel充当Redis客户端的服务发现来源,当集群发生故障转移时,会将最新信息推送给Redis的客户端

在这里插入图片描述
服务状态监控:
Sentinel基于心跳机制监测服务状态,每隔1秒向集群的每个实例发送ping命令:

  • 主观下线:如果某sentinel节点发现某实例未在规定时间响应,则认为该实例主观下线。
  • 客观下线:若超过指定数量(quorum)的sentinel都认为该实例主观下线,则该实例客观下线。quorum值最好超过Sentinel实例数量的一半。

哨兵选主规则:

  • 首先判断主与从节点断开时间长短,如超过指定值就排该从节点
  • 然后判断从节点的slave-priority值,越小优先级越高
  • 如果slave-priority一样,则判断slave节点的offset值,越大优先级越高
  • 最后是判断slave节点的运行id大小,越小优先级越高。
脑裂

脑裂(Split Brain)是一种可能发生的问题,它指的是在网络分区或故障发生时,导致集群中的不同部分之间失去了联系,每个部分都认为自己是整个集群的唯一有效部分,从而导致数据不一致和服务不可用的情况。

在脑裂的情况下,Redis 哨兵集群中可能出现以下情况之一:

  1. 多个主节点:在网络分区发生时,如果哨兵节点无法互相通信,可能会导致出现多个主节点。每个部分的哨兵节点都会尝试选举新的主节点,导致整个集群中出现多个主节点,这将导致数据不一致和服务不可用。如图:
    在这里插入图片描述

  2. 部分节点失效:在网络分区或节点故障发生时,可能会导致部分哨兵节点失去联系或认为其他节点失效。这可能会导致误将正常的节点标记为失效,从而导致服务中断或数据丢失。如图,若将老的master(左边的redis)强制降为Slave,此时这个Slave就会去新的master中去同步数据,将自己的数据清空,也因此丢掉了脑裂过程中(它还作为master)写入的数据。
    在这里插入图片描述
    避免以上情况的发生:

redis中有两个配置参数:
min-replicas-to-write 1   表示最少的salve节点为1个
min-replicas-max-lag 5  表示数据复制和同步的延迟不能超过5秒

分片集群

分片集群(Shared Cluster)的提出主要解决海量数据存储问题和高并发写的问题。使用分片集群可以解决上述问题,分片集群特征:

  • 集群中有多个master,每个master保存不同数据
  • 每个master都可以有多个slave节点
  • master之间通过ping监测彼此健康状态
  • 客户端请求可以访问集群任意节点,最终都会被转发到正确节点

在这里插入图片描述
分片集群结构-数据读写
Redis 分片集群引入了哈希槽的概念,Redis 集群有 16384 个哈希槽,每个 key通过 CRC16 校验后对 16384 取模来决定放置哪个槽,集群的每个节点负责一部分 hash 槽。
读写数据:根据key的有效部分计算哈希值,对16384取余(有效部分,如果key前面有大括号,大括号的内容就是有效部分,如果没有,则以key本身做为有效部分)余数做为插槽,寻找插槽所在的实例
在这里插入图片描述

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

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

相关文章

最新ChatGPT/GPT4科研应用与AI绘图及论文高效写作教程

原文链接:最新ChatGPT/GPT4科研应用与AI绘图及论文高效写作教程https://mp.weixin.qq.com/s?__bizMzUzNTczMDMxMg&mid2247598050&idx5&sn70fd3f5946d581ad9c1363295b130ef5&chksmfa823e05cdf5b713baf9cf1381bfb2455ad675a0b21e194bef8b76f35d6aa77…

C++初阶 | [九] list 及 其模拟实现

摘要:介绍 list 容器,list 模拟实现,list与vector的对比 list(带头双向循环列表) 导入:list 的成员函数基本上与 vector 类似,具体内容可以查看相关文档(cplusplus.com/reference/list/list/)&…

Linux中使用vim编辑器的时候提示:发现交换文件“XXX.swap“

目录 问题描述解决方案 问题描述 有时候vim编辑文件的时候 系统突然卡了 无奈只能强制退出关机 然后重启 这个时候想重新回来继续编辑刚刚的文件 注意:我这种操作方式 虽然之后可以继续正常编辑了 但是发现文件是没有保存的 vim XXX进去有如下提示 解决方案 注意:我这种操作…

基于python的变配电室运行状态评估与预警系统flask-django-nodejs-php

近年来,随着我国工业化、城镇化步伐的不断加快,城市配电网络取得令人瞩目的发展成果。变配电室是供配电系统的核心,在供配电系统中占有特殊的重要地位[1]。变配电室电气设备运行状态和环境信息缺乏必要的监测评估预警手段,如有一日遭遇突发情…

Linux-线程同步

文章目录 前言一、为什么要线程同步?二、线程同步pthread_cond_initpthread_cond_destroypthread_cond_wait、pthread_cond_signal和 pthread_cond_broadcast 三、示例代码 前言 上节课学习了线程互斥,这节课针对线程互斥内容在做进一步的补充和完善&am…

[C语言]一维数组二维数组的大小

对于一维数组我们知道取地址是取首元素的地址,二维数组呢,地址是取第一行的地址,sizeof(数组名)这里计算的就是整个数组的大小,&数组名 表示整个数组,取出的是整个数组的地址,显示的是数组的首元素 记…

网络工程师练习题2

网络工程师 将专用IP地址转换为公用IP地址的技术是()。 A.ARPB.DHCPC.UTMD.NAT 【答案】D 【解析】概念题,NAT技术将源地址从内部专用地址转换成可以在外部Internet上路由的全局IP地址。 R1、R2是一个自治系统中采用RIP路由协议的两个相…

【计算机网络篇】物理层(4)信道的极限容量,信道复用技术

文章目录 🍔信道的极限容量🛸造成信号失真的主要因素⭐码元的传输速率 🛸奈氏准则🛸香农公式🎈练习 🗒️小结 🍔信道复用技术⭐常见的信道复用技术🎈频分复用FDM🎈时分复…

时序分解 | Matlab实现GWO-CEEMDAN基于灰狼算法优化CEEMDAN时间序列信号分解

时序分解 | Matlab实现GWO-CEEMDAN基于灰狼算法优化CEEMDAN时间序列信号分解 目录 时序分解 | Matlab实现GWO-CEEMDAN基于灰狼算法优化CEEMDAN时间序列信号分解效果一览基本介绍程序设计参考资料 效果一览 基本介绍 1.CEEMDAN方法的分解效果取决于白噪声幅值权重(Nstd)和噪声添…

【刷题】滑动窗口入门

送给大家一句话: 那脑袋里的智慧,就像打火石里的火花一样,不去打它是不肯出来的。——莎士比亚 滑动窗口入门 认识滑动窗口Leetcode 209. 长度最小的子数组题目描述算法思路 Leetcode 3. 无重复字符的最长子串题目描述算法思路 Leetcode 1004…

部署应用到K8s集群(未完)

(等熟悉一番再来写,因为按小时结算的。。。) 1 、 kubectl run 启动 nginx 应用 kubectl run nginx --imagenginx:latest 2、将本地机器的80端口转发到集群中名为nginx的Pod的80端口 kubectl port-forward --address 0.0.0.0 pod/nginx 80:8…

AHI对MySQL性能的影响

MySQL中出现很多latch锁,而这个很大程度上和MySQL自适应hash索引有关。 AHI概述 MySQL InnoDB存储引擎的自适应哈希(Adaptive Hash Index,下简称AHI)功能 若用户的访问模式基本都是类似KV操作的点查询(point select&…

es bulk批量操作简单实例

(1)定义 bulk允许在单个步骤中进行多次create、index、update或delete请求。 bulk与其他的请求体格式稍有不同,如下所示: { action: { metadata }}\n { request body }\n { action: { metadata }}\n { request body …

FPGA高端项目:FPGA基于GS2971+GS2972架构的SDI视频收发+HLS图像缩放+多路视频拼接,提供4套工程源码和技术支持

目录 1、前言免责声明 2、相关方案推荐本博主所有FPGA工程项目-->汇总目录本博已有的 SDI 编解码方案本方案的SDI接收发送本方案的SDI接收图像缩放应用本方案的SDI接收纯verilog图像缩放纯verilog多路视频拼接应用本方案的SDI接收OSD动态字符叠加输出应用本方案的SDI接收HLS…

【CSS】html滚动条相关

1.滚动条样式 ::-webkit-scrollbar {width: 10px;height: 10px;z-index: 101; } ::-webkit-scrollbar-thumb {border-radius: 5px;background: #cecece; } ::-webkit-scrollbar-track {// background: #f5f5f5be;background: rgba(33, 85, 163, 0); } ::-webkit-scrollbar-but…

python汽车租赁系统的设计与实现flask-django-php-nodejs

困扰公司的许多问题当中,汽车租赁管理一定是公司不敢忽视的一块。但是管理好汽车租赁又面临很多麻烦需要解决,例如有几个方面:第一,公司往往汽车数量都比较多,如何保证能够管理到每一汽车;第二,如何在工作琐碎,记录繁多的情况下将汽车租赁的当前情况反应给公司领导相关部门决策…

Python之Web开发中级教程----ubuntu中下载安装Postman

Python之Web开发中级教程----ubuntu中下载安装Postman PostMan 是一款功能强大的网页调试与发送网页 HTTP 请求的 Chrome 插件,可以直接去对我们写出来的路由和视图函数进行调试,作为后端程序员是必须要知道的一个工具。 查看ubuntu系统中是否已经安装了…

常用小知识点总结

1. pc可以跑通,但是安卓编译死循环,可能是函数声明了返回类型,但是没有真正返回 2. ubuntu下根据关键词杀死所有相关进程。ps -ef | grep code | grep -v grep | cut -c 10-16 | xargs kill -s 9 top和ps基本作用都是显示系统进程状况&…

matplotlib绘图一例

网上外卖用户规模及使用率import matplotlib.pyplot as plt import matplotlib.dates as mdates import pandas as pd# 数据源自www.cnnic.net.cn。 l [["2015/12", "1.14亿", "16.5%"], ["2016/6", "1.50亿", "21.1%…

electron-builder 打包问题,下载慢解决方案

目录 问题说明设置下载源 ?解决方案思路下载Electron下载winCodeSign下载nsis下载nsis-resources 总结 问题说明 项目使用了Electron,在第一次打包时会遇见下载慢,导致打包进度几乎停滞不前,甚至可能直接报错 其实这是因为Electr…