浅谈 Redis 主从复制原理(二)

news2025/2/24 7:36:03

大家好,我是此林。

【浅谈 Redis 主从集群原理(一) 】

上一篇文章中,说到了 Redis 主从复制的全量同步和增量同步,repl_baklog 复制缓冲区,以及 slave 挂掉之后数据同步的措施。

下面介绍的上一篇遗留问题,主节点 master 宕机了,怎么办?

1. 哨兵(Sentinel)

这里贴一张网上的图,对哨兵有个整体了解。

 哨兵的作用有三个:

1. 监控:不断地检查 master 和 slave 是否按照预期工作。

2. 自动故障恢复:如果 master 宕机,哨兵会选举一个 slave 提升为 master。

3. 通知:当集群发生故障转移时,会将最新信息推送给 Redis 客户端(如:RedisTemplate)

2. 服务监控

哨兵基于心跳机制监测服务状态,每隔 1 秒向集群的每个实例发送 ping 命令。

  • 主观下线:如果某一个哨兵发现有节点没有在规定时间内相应,认为该节点主观下线。
  • 客观下线:一般如果超过一半数量的哨兵都认为该节点宕机,那么该节点客观下线。

3. master 选举

如果发现 master 宕机了,需要在 slave 中选举一个作为新的 master。

选举优先级规则:

1. 先根据 slave 和 master 断开时间的长短,剔除掉超过指定阈值的 slave。

2. 然后在剩余的节点中,比较 slave-priority 的大小,越小优先级越高(可以通过配置文件配置)

3. 如果 slave-priority 一样,就比较 slave 的 offset,就是同步进度,越大的代表数据越新。

4. 最后比较 slave 节点的 id 大小,越小优先级越高。

4. 故障转移

当选了一个 slave 作为新的 master 后,开始进行故障转移。

1. 哨兵向新的 master 发送 slaveof no one 命令,让 slave 变成 master。

2. 哨兵再向其他节点发送 slaveof  新master的IP  新master的端口,让其他节点成为新 master 的 slave。

3. 最后,把故障节点标记为 master,这样故障节点恢复后就会成为新 master 的 slave。

5. 哨兵集群搭建

哨兵集群信息如下:

哨兵节点IP地址端口号
s1192.168.183.12827001
s2192.168.183.12827002
s3192.168.183.12827003

主从集群信息如下:

节点IP地址端口号
master192.168.183.1287001
slave1192.168.183.1287002
slave2192.168.183.1287003

目录信息如下:

在s1、s2、s3目录下创建 sentinel.conf,这是 s1 的。

注:vi 命令编辑,:wq 保存,:q! 不保存退出,键盘按下 i 是insert 模式,\+关键字是搜索

配置解释:

port 27001:指定哨兵端口

sentinel announce-ip :声明当前哨兵的IP地址

sentinel monitor:指定主节点信息。mymaster 是主节点名称,IP 和 端口也是主节点的,2 是当超过两个哨兵认为某个节点主观下线的时候,那么该节点客观下线。

为什么只要配置 master:master 上可以通过 info replication 命令查询到 slave 的信息,所以实际上还是会监控整个集群的。

sentinel down-after-milliseconds:slave 和 master 断开的最大时长

sentinel failover-timeout:slave 故障恢复的超时时间

哨兵启动:

redis-sentinel s1/sentinel.conf
redis-sentinel s2/sentinel.conf
redis-sentinel s3/sentinel.conf

 

6. RedisTemplate 哨兵模式

RedisTemplate 作为 Redis 的一个客户端,底层利用 lettuce 实现节点的感知和自动切换。

在application.yml 里配置如下:

这里我们发现只要配置哨兵节点即可。

所以总结之前的,可知哨兵有如下作用:

1. 服务监控

2. master 选举和 slave 故障转移

3. 通知 Redis 客户端节点变化

主从读写配置:

@Bean
public LettuceClientConfigurationBuilderCustomizer configurationBuilderCustomizer() {
    return configBuilder -> configBuilder.readFrom(ReadFrom.REPLICA_PREFERRED);
}

这里的 ReadFrom 是配置 Redis 的读取策略:

MASTER:从主节点读取

MASTER_PERFERRED:优先从 MASTER 读取,MASTER 不可用才读取 slave。

REPLICA:从从节点读取

REPLICA_PERFERRED:优先从从节点读取,slave 不可用才读取 MASTER。

主从切换、读写分离、故障转移通知接收由 RedisTemplate 全自动完成,底层已经封装好了,我们无需关注。

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

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

相关文章

elf_loader:一个使用Rust编写的ELF加载器

本文介绍一个使用Rust实现的ELF加载器。 下面是elf_loader的仓库链接: github: https://github.com/weizhiao/elf_loaderhttps://github.com/weizhiao/elf_loader crates.io: https://crates.io/crates/elf_loaderhttps://crates.io/cra…

连接Sql Server时报错无法通过使用安全套接字层加密与 SQL Server 建立安全连接

文章目录 一. 前言二. 解决方案 方案1方案2 三. 总结 一. 前言 在《数据库原理》这门课的实验上,需要使用SQL Server,然后使用jdbc连接sql server突然报错为:SQLServerException: “Encrypt”属性设置为“true”且 “trustServerCertific…

Qt常用控件之日历QCalendarWidget

日历QCalendarWidget QCalendarWidget 是一个日历控件。 QCalendarWidget属性 属性说明selectDate当前选中日期。minimumDate最小日期。maximumDate最大日期。firstDayOfWeek设置每周的第一天是周几(影响日历的第一列是周几)。gridVisible是否显示日历…

超级详细Spring AI运用Ollama大模型

大模型工具Ollama 官网:https://ollama.com/ Ollama是一个用于部署和运行各种开源大模型的工具; 它能够帮助用户快速在本地运行各种大模型,极大地简化了大模型在本地运行的过程。用户通过执行几条命令就能在本地运行开源大模型,如Lama 2等; 综上&#x…

0083.基于springboot+uni-app的社区车位租赁系统小程序+论文

一、系统说明 基于springbootuni-app的社区车位租赁系统小程序,系统功能齐全, 代码简洁易懂,适合小白学编程。 现如今,信息种类变得越来越多,信息的容量也变得越来越大,这就是信息时代的标志。近些年,计算机科学发展…

计算机视觉行业洞察--影像行业系列第一期

计算机视觉行业产业链的上下游构成相对清晰,从基础技术研发到具体应用场景的多个环节相对成熟。 以下是我结合VisionChina经历和行业龙头企业对计算机视觉行业产业链上下游的拆解总结。 上下游总结 上游产业链分为软硬件两类,视觉的硬件主要指芯片、…

【深度学习量化交易15】基于miniQMT的量化交易回测系统已基本构建完成!AI炒股的框架初步实现

我是Mr.看海,我在尝试用信号处理的知识积累和思考方式做量化交易,应用深度学习和AI实现股票自动交易,目的是实现财务自由~ 目前我正在开发基于miniQMT的量化交易系统——看海量化交易系统。 AI怎么炒股?就是通过量化交易。 近期D…

使用大语言模型(Deepseek)构建一个基于 SQL 数据的问答系统

GitHub代码仓库 架构 从高层次来看,这些系统的步骤如下: 将问题转换为SQL查询:模型将用户输入转换为SQL查询。 执行SQL查询:执行查询。 回答问题:模型根据查询结果响应用户输入。 样本数据 下载样本数据&#xf…

JAVA最新版本详细安装教程(附安装包)

目录 文章自述 一、JAVA下载 二、JAVA安装 1.首先在D盘创建【java/jdk-23】文件夹 2.把下载的压缩包移动到【jdk-23】文件夹内,右键点击【解压到当前文件夹】 3.如图解压会有【jdk-23.0.1】文件 4.右键桌面此电脑,点击【属性】 5.下滑滚动条&…

网络安全之探险

🍅 点击文末小卡片 ,免费获取网络安全全套资料,资料在手,涨薪更快 因为工作相关性,看着第三方公司出具的网络安全和shentou测试报告就想更深入研究一下,于是乎开始探索网络安全方面的知识,度娘、…

基础dp——动态规划

目录 一、什么是动态规划? 二、动态规划的使用步骤 1.状态表示 2.状态转移方程 3.初始化 4.填表顺序 5.返回值 三、试题讲解 1.最小花费爬楼梯 2.下降路径最小和 3.解码方法 一、什么是动态规划? 动态规划(Dynamic Programming&…

(四)趣学设计模式 之 原型模式!

目录 一、 啥是原型模式?二、 为什么要用原型模式?三、 原型模式怎么实现?四、 原型模式的应用场景五、 原型模式的优点和缺点六、 总结 🌟我的其他文章也讲解的比较有趣😁,如果喜欢博主的讲解方式&#xf…

会话对象 Cookie 四、Cookie的路径

1.Cookie的path属性 Cookie还有一个path属性,可以通过Cookie#setPath(String)方法来设置。你可以使用HttpWatch查看响应中的Set-Cookie中是否存在路径。下面是通过Chrome查看Cookie信息。 也就是说,就算你不设置Cookie的path,Cookie也是有路…

hugging face---transformers包

一、前言 不同于计算机视觉的百花齐放,不同网络适用不同情况,NLP则由Transformer一统天下。transformer是2017年提出的一种基于自注意力机制的神经网络架构,transformers库是hugging face社区创造的一个py库,通过该库可以实现统一…

将 Vue 项目打包后部署到 Spring Boot 项目中的全面指南

将 Vue 项目打包后部署到 Spring Boot 项目中的全面指南 在现代 Web 开发中,前后端分离架构已经成为主流。然而,在某些场景下,我们可能需要将前端项目(如 Vue)与后端项目(如 Spring Boot)集成部…

GPIO外设

一、GPIO简介 GPIO,general-purpos IO port,通用输入输出引脚,所有的GPIO引脚都有基本的输入输出功能。 最基本的输出功能:STM32控制引脚输出高、低电平,实现开关控制;最基本的输入功能:检测外部输入电平&…

C++——priority_queue模拟实现

目录 前言 一、优先级队列介绍 二、优先级队列实现 向上调整 向下调整 三、仿函数 总结 前言 上一篇文章我们讲了stack和queue,这两个容器是容器适配器,本质上是一种复用,那本篇文章要讲的优先级队列也是一个容器适配器,我们…

计算机网络基础:DOS命令、批处理脚本常见命令

目录 1. DOS 基础命令 1. echo 、 > 编写文件 2. type 读取文件 3. copy con 整段编写 4. attrib 命令 5. 快速生成空文件 6. 修改关联性 7. 关机shutdown 8. 复制文件copy、移动文件move 9. 重命名ren 2. 批处理 2.1 简单显示 2.2 死循环 2.3 定时关机小程序 …

ArcGIS Pro热力图制作指南:从基础到进阶

引言 在地理信息科学领域,热力图作为一种直观的数据可视化手段,广泛应用于展示空间数据的密度和热度分布。ArcGIS Pro,作为一款强大的地理信息系统(GIS)软件,为我们提供了制作热力图的便捷工具。本文将从基…

智慧校园系统在学生学习与生活中的应用

随着科技的快速发展,智慧校园系统逐渐成为现代教育不可或缺的一部分。它整合了先进的信息技术、物联网技术以及人工智能等,旨在构建一个全面、智能、个性化的学习与生活环境。对于学生而言,这一系统不仅能够极大地提高学习效率,还…