Redis高可用(主从复制、哨兵模式)详解

news2024/11/26 9:36:04

Redis高可用(主从复制、哨兵模式)详解

在这里插入图片描述

Redis是一种高性能的键值存储系统,能够通过多种机制来实现高可用性,这些机制主要包括主从复制(Replication)和哨兵模式(Sentinel)。

Redis 主从复制(Replication)

一、主从复制简介

Redis的主从复制是一种实现数据冗余和读写分离的机制,通过将数据从主节点(Master)复制到一个或多个从节点(Slave),确保系统中有多个副本以提高数据可靠性和读取性能。

二、工作原理

1. 主节点和从节点
  • 主节点(Master):处理所有的写操作,并将数据变化传播到从节点。

在这里插入图片描述

  • 从节点(Slave):复制主节点的数据,并提供只读访问。当主节点发生变化时,从节点会同步这些变化。

在这里插入图片描述

2. 数据传输方式:异步复制
  • Redis的主从复制主要是异步的,即主节点在完成写操作后并不等待从节点的确认。
  • 从节点会周期性地向主节点请求同步数据。

在这里插入图片描述

三、主从复制过程

在这里插入图片描述

1. 初次同步(全量复制)

当一个从节点第一次连接到主节点或重新连接时,会进行全量复制:

  1. 从节点发送同步命令:从节点向主节点发送PSYNC命令,请求同步数据。
  2. 主节点生成RDB文件:主节点执行一个后台保存操作(BGSAVE),并生成一个新的RDB快照文件。
  3. 主节点发送RDB文件:生成的RDB文件通过网络发送到从节点,从节点接收后加载到内存中。

在这里插入图片描述

  1. 主节点发送缓冲区数据:在主节点生成RDB文件期间,所有写操作的命令会被暂存在缓冲区中。RDB文件发送完毕后,这些缓冲区中的命令会被依次发送给从节点。
  2. 从节点应用命令:从节点将接收到的增量命令应用到自身的数据集中,以保持与主节点的数据一致。
    在这里插入图片描述
2. 增量同步(部分复制)

在全量复制之后,主从节点之间进行的是增量同步,也称为部分复制:

  1. 增量复制:主节点将所有新的写操作命令发送给从节点。
  2. 命令传播:主节点会对每个写操作生成相应的Redis命令,并通过复制流发送给从节点。
  3. 从节点执行命令:从节点接收到命令后,立即执行这些命令来更新自身数据。
3. 断线重连
  • 在网络故障或其他原因导致主从断线时,从节点会自动尝试重新连接主节点。
  • 如果重新连接成功,并且主节点的复制积压缓冲区(Replication Backlog)中仍然有未发送给从节点的数据,则可以进行部分复制,避免重新进行全量复制。

四、配置步骤

1. 主节点配置

主节点不需要特别配置,只需启动一个Redis实例即可。

2. 从节点配置

在从节点的配置文件(redis.conf)(永久的)中,设置以下参数:

在这里插入图片描述

replicaof <master-ip> <master-port>

如果主节点的IP地址为192.168.1.100,端口为6379,配置如下:

replicaof 192.168.1.100 6379

或者在从节点运行时(暂时的)使用命令:

SLAVEOF 192.168.1.100 6379

在这里插入图片描述

五、复制细节和优化

1. 复制积压缓冲区(Replication Backlog)
  • 定义:这是一个固定大小的环形缓冲区,用于存储最近的写操作命令。

在这里插入图片描述

  • 作用:在从节点短时间断开后重连时,可以利用缓冲区中的数据进行部分复制,避免全量复制。
  • 配置:可以通过repl-backlog-size参数设置缓冲区大小。
2. 心跳机制
  • 作用:保持主从节点之间的连接存活,并监控复制状态。
  • 机制:从节点周期性地发送PING命令给主节点,主节点响应PONG。如果主节点长时间没有收到从节点的心跳,会标记该从节点为失效。
3. 复制延迟
  • 定义:从节点同步数据的速度可能会滞后于主节点,产生延迟。
  • 原因:网络状况、从节点负载等。
  • 监控:可以通过INFO replication命令查看复制延迟。

二、Redis哨兵模式(Sentinel)

在这里插入图片描述
Redis Sentinel是一个健壮的分布式系统,其中多个Sentinel需要就给定的主节点不再可用的事实达成一致。然后,故障转移过程开始选择一个新的主节点。

在这里插入图片描述

一、工作原理

哨兵模式通过一组哨兵进程来监控主从结构的健康状态,确保系统的自动化故障转移和通知功能。

在这里插入图片描述
哨兵(Sentinel)是一个重要的组件,负责监控Redis集群中的主节点(Master)和从节点(Slave),并在主节点失效时自动进行故障转移。

1. 监控
  • 哨兵群集:通常由多个哨兵节点组成,它们通过选举形成一个领导者,负责执行监控任务。
  • 监控对象:哨兵节点定期向Redis主节点和从节点发送PING命令,检查它们是否可达。

在这里插入图片描述

2. 故障检测
  • 主节点失效检测:当哨兵节点检测到主节点不可达时,会将其标记为下线。
  • 从节点失效检测:如果一个从节点失效,哨兵会通知主节点,并在必要时将其重新配置为新的从节点。
3. 故障转移
  • 选举领导者:哨兵群集中的哨兵会进行选举,选择一个哨兵作为领导者负责执行故障转移操作。

在这里插入图片描述

  • 选举条件:通过Raft算法进行选举,选举条件包括优先级、运行ID等。
4. 自动故障转移
  • 故障转移过程
    • 哨兵检测到主节点失效后,从当前的从节点中选举一个升级为新的主节点。
    • 哨兵更新集群中其他从节点的配置,使它们成为新主节点的从节点。
    • 客户端和应用可以通过哨兵的监听地址连接到新的主节点。
5. 手动故障转移
  • 手动干预:管理员可以通过哨兵提供的命令手动触发故障转移过程,以便在维护期间进行控制和调整。

二、哨兵选举机制

在Redis Sentinel中,选举机制是确保在主节点(Master)失效后,哨兵群集能够协作选举出一个新的主节点的关键过程。
在这里插入图片描述

1. 哨兵领导者选举

Redis Sentinel中的哨兵节点在运行时会进行领导者选举,领导者负责执行故障检测和故障转移操作。选举过程基于Raft算法的思想,但具体实现可能有所不同。

  • 哨兵运行ID(runid):每个哨兵节点在启动时生成一个唯一的runid,用于标识该哨兵节点的身份。

  • 优先级(priority):哨兵节点可以配置一个优先级,用于决定在选举领导者时的重要性。

选举条件:
  • 单一领导者:在任何时刻,哨兵群集中应该只有一个领导者,以确保操作的一致性和可靠性。

  • 运行ID比较:哨兵根据各自的运行ID来决定谁应该成为领导者。通常,具有最新运行ID的哨兵会有更高的优先级。

  • 优先级考量:如果多个哨兵具有相同的运行ID,优先级较高的哨兵将更有可能被选为领导者。

2. 主节点故障后的选举过程

当哨兵检测到Redis的主节点失效时,选举新的主节点的过程通常如下:

  • 哨兵检测失效:一旦哨兵节点检测到主节点不可用(例如通过心跳检测),它会开始选举新的主节点。

  • 选举领导者:哨兵群集中的哨兵节点开始通信,以决定哪一个哨兵节点将负责执行故障转移。通常,哨兵节点会互相通信,比较彼此的优先级和运行ID来决定新的领导者。

  • 执行故障转移:一旦新的领导者选举出来,它将负责将一个从节点提升为新的主节点,并更新其他哨兵节点和从节点的配置,确保整个Redis集群能够继续工作。


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

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

相关文章

使用 Python 注销、重启、关闭计算机

众所周知&#xff0c;Python 是一种功能强大的脚本语言。在本文中&#xff0c;将编写一个 Python 程序本控制计算机&#xff0c;实现计算机的注销、重启、关闭等操作。 Python 中的 os 模块&#xff0c;提供了一种与操作系统交互的方式&#xff0c;可以使用 os.system() 函数在…

Qt6.6编译Qt二维图形编辑器QVGE源码

QVGE是一个开源的多平台QtC编写的图形编辑器&#xff0c;可以用来画网络节点图&#xff0c;或者其他作用。 QVGE可以轻松创建和参数设定的小型到中型图形(1000节点/边缘)&#xff0c;共同的视觉特性的节点和边缘&#xff1a;形状、尺寸、颜色、标签等。定义(用户定义)属性的图表…

MQTT遗嘱信息(2)

接前一篇文章&#xff1a;MQTT遗嘱信息&#xff08;1&#xff09; 本文内容参考&#xff1a; 什么是MQTT遗嘱消息&#xff1f;如何配置和处理遗嘱消息&#xff1f;_mqtt last will-CSDN博客 MQTT 协议学习&#xff1a;Retained&#xff08;保留消息&#xff09; 与 LWT&#x…

实现矩阵乘法【矩阵乘法复杂度优化】

实现矩阵乘法【矩阵乘法复杂度优化】 题目描述&#xff1a;解题思路一&#xff1a;使用NumPy库解题思路二&#xff1a;三个for循环解题思路三&#xff1a;分块矩阵乘法, 利用多线程或多进程 题目描述&#xff1a; 实现矩阵乘法【矩阵乘法复杂度优化】 解题思路一&#xff1a;…

leetcode 动态规划(基础版)不同路径II

题目&#xff1a; 题解&#xff1a; 一种可行的方案是&#xff0c;因为障碍物无法到达也无法从障碍物过来&#xff0c;所以遇上障碍物时将对应的dp位置设为0即可&#xff0c;这样非常巧妙简单地解决了这个问题。 int uniquePathsWithObstacles(vector<vector<int>&g…

苏东坡传-读书笔记三

苏东坡去世之后&#xff0c;一黄某获得苏东坡一珍贵的手稿&#xff0c;其中有苏东坡下列的名句&#xff1a; “处贫贱易&#xff0c;处富贵难。安劳苦易&#xff0c;安闲散难。忍痛易&#xff0c;忍痒难。人能安闲散&#xff0c;耐富贵&#xff0c;忍痒&#xff0c;真有道之士也…

<sa8650>QCX 诊断模块和错误处理

<sa8650>QCX 诊断模块和错误处理 一、错误报告设计二、QCarCam API 的错误报告2.1 QCarCamRegisterEventCallback2.2 CarCamErrorInfo_t2.3 QCarCamErrorInfo_t2.4 Error ID2.4.1 QCARCAM_ERROR_WARNING2.4.2 QCARCAM_ERROR_SUBSYSTEM_FATAL2.4.3 QCARCAM_ERROR_FATAL2.4.4 Q…

傅里叶变换,拉普拉斯变换,卷积 卷积定理

傅里叶变换&#xff0c;拉普拉斯变换&#xff0c;卷积 & 卷积定理 文章目录 傅里叶变换&#xff0c;拉普拉斯变换&#xff0c;卷积 & 卷积定理开胃小菜&#xff08;收敛性&#xff09;一、傅里叶变换核心原理定义连续时间信号离散时间信号&#xff08;了解&#xff09;…

2毛钱的SOT23-5封装28V、1.5A、1.2MHz DCDC转换器用于LCD偏置电源和白光LED驱动等MT3540升压芯片

前言 之前发了一个TI的BOOST升压芯片&#xff0c;用于LCD偏置电压或LED驱动&#xff0c;请访问以下链接。 6毛钱SOT-23封装28V、400mA 开关升压转换器&#xff0c;LCD偏置电源和白光LED应用芯片TPS61040 国产半导体厂家发展迅猛&#xff0c;今天推荐一个公司带“航天”的升压…

内外网共享文件最优方案,了解一下

基于安全性、合规性、数据防泄漏等原因&#xff0c;为了保护核心数据&#xff0c;企业一般会做内外网隔离&#xff0c;隔离后仍存在数据交换共享的需求。数字化时代&#xff0c;数据的流通与共享成为企业和团队之间日常运营的关键环节。内外网共享文件是指在内网和外网之间共享…

职业技能大赛引领下人工智能专业实训教学的改革研究

在新时代背景下&#xff0c;人工智能&#xff08;AI&#xff09;作为科技发展的前沿领域&#xff0c;正以前所未有的速度影响着社会经济的各个方面&#xff0c;对高素质应用型AI专业人才的需求日益迫切。职业技能大赛作为检验和提升学生实践能力的重要平台&#xff0c;对于促进…

聚观早报 | iPhone 16核心硬件曝光;三星Galaxy全球新品发布会

聚观早报每日整理最值得关注的行业重点事件&#xff0c;帮助大家及时了解最新行业动态&#xff0c;每日读报&#xff0c;就读聚观365资讯简报。 整理丨Cutie 6月28日消息 iPhone 16核心硬件曝光 三星Galaxy全球新品发布会 苹果正多方下注布局AI商店 黄仁勋2024年薪酬3400…

短视频利器 ffmpeg (2)

ffmpeg 官网这样写到 Converting video and audio has never been so easy. 如何轻松简单的使用&#xff1a; 1、下载 官网&#xff1a;http://www.ffmpeg.org 安装参考文档&#xff1a; https://blog.csdn.net/qq_36765018/article/details/139067654 2、安装 # 启用RPM …

[学习笔记]3GPP R18宣布冻结,对物联网的影响是哪些?

6月18日&#xff0c;在上海举行的3GPP RAN&#xff08;无线接入网络项目&#xff09;第104次会议上&#xff0c;5G-A的第一代技术标准R18标准正式冻结。R18标准从立项到冻结历时3年多&#xff0c;是5G标准的第四版&#xff0c;也是面向5G-Advanced&#xff08;5G-A&#xff09;…

容器技术-docker5 (1)

一、docker-compose 常用命令和指令 1. 概要 默认的模板文件是 docker-compose.yml&#xff0c;其中定义的每个服务可以通过 image 指令指定镜像或 build 指令&#xff08;需要 Dockerfile&#xff09;来自动构建。 注意如果使用 build 指令&#xff0c;在 Dockerfile 中设置…

springboot基于web模式的师资管理系统的设计与实现-计算机毕业设计源码040928

摘 要 随着互联网趋势的到来&#xff0c;各行各业都在考虑利用互联网将自己推广出去&#xff0c;最好方式就是建立自己的互联网系统&#xff0c;并对其进行维护和管理。在现实运用中&#xff0c;应用软件的工作规则和开发步骤&#xff0c;采用Java技术建设师资管理系统 。 本设…

在Python中创建单个元素的元组

在Python中&#xff0c;元组是用于存储多个元素的不可变序列。与列表不同&#xff0c;元组使用圆括号括起来。创建包含多个元素的元组很简单&#xff0c;但创建单个元素的元组则需要特别注意语法。 目录 基本的元组创建创建单个元素的元组单个元素元组的示例 元组是不可变的结…

springboot实习管理系统的设计与实现 LW +PPT+源码+讲解

第三章系统分析与设计 3.1 可行性分析 一个完整的系统&#xff0c;可行性分析是必须要有的&#xff0c;因为他关系到系统生存问题&#xff0c;对开发的意义进行分析&#xff0c;能否通过本系统来补充线下实习管理模式中的缺陷&#xff0c;去解决其中的不足等&#xff0c;通过对…

C++ 教程 - 07 类的静态成员

文章目录 静态成员 静态成员 使用static修饰的成员&#xff1b; 静态的成员变量&#xff1b; 仅保留一份副本&#xff0c;不管创建多少个实例对象&#xff0c;都共享这一份数据&#xff1b;类、对象均可以调用&#xff1b;类外重新声明&#xff0c;并通过类初始化&#xff1b;…

【Django】网上蛋糕项目商城-首页

概念 本文在上一文章搭建完数据库&#xff0c;以及创建好项目之后&#xff0c;以及前端静态文件后&#xff0c;对项目的首页功能开发。 后端代码编写 这里我们使用pymysql模块对数据库进行操作&#xff0c;获取数据。因此需要在dos窗口使用以下指令下载该库文件 pip instal…