当前位置: 首页 > news >正文

Redis的主从复制哨兵机制详解

Redis的主从结构

本篇文章,只要讲redis的主从结构底层原理中的全量复制,部分复制,以及哨兵机制

属于提升内功的区域,适合拔高

文章目录

  • Redis的主从结构
    • 主从复制原理
    • 全量复制的步骤图
    • 部分复制
    • 哨兵机制(Sentinel)
      • 哨兵机制的三个定时监控任务和作用
        • 第一个:每隔10秒发一次`Info`
        • 第二个:每隔2秒发一次`publish/subscribe`
        • 第三个:每隔1秒发一次`ping`
        • 领导者哨兵选举流程
      • 故障转移
        • 故障转移的**第一步**:
        • 故障转移的区域步骤
      • 高可用读写分离方案问题
    • 好了,下期我们说Redis的数据分片(单独专题)

1.Redis主从结构

  • 一主一从
  • 一主多从
  • 树状主从

在这里插入图片描述

主从复制原理

一主一从的步骤建立联系图标

在这里插入图片描述

全量复制的步骤图

也就是上图的第五步: 同步数据pysnc命令

在这里插入图片描述

解释下:

第一步: 从节点像主节点发送psync ? -1的命令,

?:代表Redis的run id,因为从节点一开始请求并不知道主节点的run_id

-1:代表全量复制,从头开始(因为不知道从哪一步开始,就从最原始的地方开始)

第二步:主节点接收到命令,向从节点进行进行全量复制的应答

FULLRESYNC: 全量复制的应答

运行ID:就是主节点的run_id

offset:Offset 是衡量主从节点数据同步进度的关键指标。每个从节点会维护一个 复制偏移量(Replication Offset),表示从节点已接收并应用的主节点数据量。

第三步:主节点进行bgsave命令,执行生成RDB 文件

()

第四步:进行发送RDB文件给从节点

第五步: 在生成RDB这段时间,如果主节点呦呦文件写入,就进入客户端缓冲区

Client-output-buffer-limit:

我们看config的文件配置: client-output-buffer-limit replica 256mb 64mb 60

第六步: 加载RDB

清空旧数据–>加载RDB文件

第七部:发送缓冲区的内容

这一步是为了将主节点向从节点发送的RDB文件时,

主节点在第五步缓冲区的内容更新到从节点

第八步(可选):如果从节点开启了AOF,从节点会启动AOF的重写命令bgrewriteaof

部分复制

有两种情况下:会使用部分复制

  1. 当主从节点之间的网络出现中断
  2. 同时超过repl-timeout的时间

我们会看到: 当出现上面的两种情况后,全量复制中断,redis会将主节点的数据写入复制解压缓冲区,等待网络恢复

网络恢复后:从节点会将已复制的OFFSET(偏移量)通过命令psync id offset与主节点的进行比较.OFFSET后面的数据是否在缓冲区

如果在:通过命令+continue命令响应,并将主节点积压缓冲区的内容通过部分复制,复制到从节点

如果不在: 退化成全量复制

在这里插入图片描述

哨兵机制(Sentinel)

原理:当主节点出现故障时,由redis sentinel自动完成故障发现和转移,并通知对方,实现高可用

在这里插入图片描述

我们自己要配置sentinel要在config.xml加入东西

在这里插入图片描述

启动具体实施

启动命令:

redis-server.exe redis.windows.conf --sentinel

在这里插入图片描述

实际的模拟图

在这里插入图片描述

哨兵机制的三个定时监控任务和作用

在这里插入图片描述

第一个:每隔10秒发一次Info

目的:为了感知现存有哪些从节点以及节点的状态

第二个:每隔2秒发一次publish/subscribe

发布订阅:

1.发布:每隔节点发送sentinel信息,可以知道其他sentin信息,能让哨兵之间相互感知

2.订阅: 就是比如后面又有哨兵加入,就可以使用使用此订阅功能,保存哨兵信息

第三个:每隔1秒发一次ping

ping就是心跳

判断节点是否出现故障,是否存活

当中的判断是否下线后的处理

在这里插入图片描述

主观下线:就是本哨兵自己发现

客观下线:

  • 一个哨兵发现3秒后(上图配置的),询问其他哨兵此节点是不是下线,
  • 当超过quorum(客观下线数)数量,也就是sentinel monitor mymaster 127.0.0.1 6382 2命令的最后一个2,就是quorum,客观下线(进行领导者哨兵选举流程)
  • 否则: 继续确认

在这里插入图片描述

领导者哨兵选举流程

领导者选举:至于哨兵谁成为领导者,就是谁发现的快一点,确认数大于quorum,谁就成为领导者(就是看谁快)

其中涉及的算法: raft算法

如果感兴趣raft算法,可以看阿里开源项目的sofa-jraft

在这里插入图片描述

哨兵与主从的通讯

在这里插入图片描述

故障转移

在哨兵领导选举之后,就需要进行故障转移流程

故障转移的第一步:
  • 首先过滤掉不健康的节点以及没有回复的ping消息
  • 其次选择slave-priority优先级最高的节点,有,选择完毕
  • 如果没有,选择复制最完整的节点,有,选择完毕
  • 如果还没有,选择runid最小的节点,有,选择完毕

在这里插入图片描述

故障转移的区域步骤

在这里插入图片描述

高可用读写分离方案问题

基于哨兵+主从,实现读写分离的客户端思想,会有的问题

1.切换主节点(原来从节点->主节点),会少个从节点

2.加入从节点->需要提前通知

3.主节点(发生异常)->从节点,相当于加了个从节点

4.主观下线(只针对从节点)

我们可以将从节点看成一个资源池

好了,下期我们说Redis的数据分片(单独专题)

每当想放纵,心里总是对自己说:半山腰太了,想看看山的风景,我们顶峰见!!

在这里插入图片描述

http://www.dtcms.com/a/585657.html

相关文章:

  • 拟采用建站技术长沙最新死亡事件
  • Java面向对象三大特性详解:封装、继承、多态与接口
  • 力扣(LeetCode) ——209. 长度最小的子数组(C++)
  • tcp关闭的四次挥手
  • 基于HAL库实现CAN通信RS485通信WIFI模块和4G模块的AT指令和TCP透传
  • 采购网站有哪些东莞百度推广优化排名
  • 黄石网站设计公司网站都必须要备案吗
  • 36.华为云计算类服务实践
  • 长沙网站制作合作商网站更改文章标题
  • 【赵渝强老师】使用Helm简化Kubernetes(K8s)应用的部署和管理
  • 网页设计与制作教程期末考试东莞网络优化公司排名
  • docker打包,启动java程序
  • Debian 13 安装 Kubernetes 最新版 并使用 containerd 运行时
  • 通过操作地址,来进行STM32的写入GPIO端口值
  • 压力测试详解
  • 网站 怎么备案佛山营销型网站设计
  • 网站关键字被百度收录外链群发
  • Qt点击信号全解析:QTreeWidget交互指南
  • C++ 头文件:语言功能的 “模块化工具箱”(第三章)
  • 系统架构设计师学习大纲目录
  • 网站建设百度推广说词网站服务器在本地是指
  • Highcharts 3D图:深入解析与实际应用
  • 全景图制作工具( 10 种)
  • 虚拟位置映射(标签鸽
  • Pytorch 学习之Transforms
  • 中国建设银行网站的社保板块在哪里徐州专业网站制作公司
  • 免费建立移动网站吗模拟百度搜索词进入网站
  • Windows 如何安装 Chocolatey
  • 江苏高端网站建设一个网站怎么赚钱
  • 鸿蒙 ArkTS 入门教程:小白实战 List 列表开发(详解 @State, ForEach, @Builder)