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

大家好,我是此林。

【浅谈 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.mzph.cn/pingmian/70691.shtml

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

相关文章

Vue 中单向数据流原则

做一个 ElementUI 弹框组件的二次封装 效果如下: 点击取消按钮发现弹出如下报错信息 : [Vue warn]: Avoid mutating a prop directly since the value will be overwritten whenever the parent component re-renders. Instead, use a data or computed property based on the …

网页版的俄罗斯方块

1、新建一个txt文件 2、打开后将代码复制进去保存 <!DOCTYPE html> <html lang"en"><head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.0"><title>俄…

计算机毕业设计SpringBoot+Vue.js足球青训俱乐部管理系统(源码+文档+PPT+讲解)

温馨提示&#xff1a;文末有 CSDN 平台官方提供的学长联系方式的名片&#xff01; 温馨提示&#xff1a;文末有 CSDN 平台官方提供的学长联系方式的名片&#xff01; 温馨提示&#xff1a;文末有 CSDN 平台官方提供的学长联系方式的名片&#xff01; 作者简介&#xff1a;Java领…

element ui的select选择框

我们首先先试一下&#xff0c;这个东西怎么玩的 <el-select v-model"select" change"changeSelect"><el-option value"香蕉"></el-option><el-option value"菠萝"></el-option><el-option value&quo…

DeepSeek引领目标检测新趋势:如何通过知识蒸馏优化模型性能

目录 一、知识蒸馏是什么&#xff1f; 二、知识蒸馏在目标检测中的重要性 提升实时性 跨任务迁移学习 三、如何使用知识蒸馏优化目标检测&#xff1f; 训练教师模型 生成软标签 训练学生模型 调节温度参数 多教师蒸馏&#xff08;可选&#xff09; 四、案例分享 定…

C++与Python实现LiDAR点云投影对比:关键差异与易错点详解

问题背景 在多传感器融合任务中&#xff0c;常需将LiDAR点云投影到相机图像。然而&#xff0c;不同语言&#xff08;如C和Python&#xff09;的实现可能存在细微差异&#xff0c;导致投影结果不一致。本文通过对比两段功能相近的代码&#xff08;C和Python&#xff09;&#x…

数据结构☞泛型

一.基础定义与应用方向 1.定义&#xff1a; 一般的类和方法&#xff0c;只能使用具体的类型 : 要么是基本类型&#xff0c;要么是自定义的类。如果要编写可以 应用于多种类型 的代码&#xff0c;这种刻板的限制对代码的束缚就会很大。----- 来源《 Java 编程思想》对泛型的介…

算法-数据结构-图-邻接表构建

邻接表的基本概念 顶点&#xff08;Vertex&#xff09;&#xff1a; 图中的每个顶点用一个节点表示。 每个顶点存储一个链表或数组&#xff0c;用于记录与该顶点直接相连的其他顶点。 边&#xff08;Edge&#xff09;&#xff1a; 如果顶点 A 和顶点 B 之间有一条边&#xf…

再论Spring MVC中Filter和HandlerInterceptor的优先级

在Spring MVC中&#xff0c;Filter和HandlerInterceptor的执行顺序及优先级如下&#xff1a; 1. 执行顺序与优先级 Filter&#xff08;Servlet规范&#xff09;的优先级高于 HandlerInterceptor&#xff08;Spring MVC框架&#xff09;。 请求处理流程&#xff1a; Filter链&a…

LeetCode 每日一题 2025/2/17-2025/2/23

记录了初步解题思路 以及本地实现代码&#xff1b;并不一定为最优 也希望大家能一起探讨 一起进步 目录 2/17 1287. 有序数组中出现次数超过25%的元素2/18 2080. 区间内查询数字的频率2/19 624. 数组列表中的最大距离2/20 2595. 奇偶位数2/21 2209. 用地毯覆盖后的最少白色砖块…

C#中提供的多种集合类以及适用场景

在 C# 中&#xff0c;有多种集合类可供使用&#xff0c;它们分别适用于不同的场景,部分代码示例提供了LeetCode相关的代码应用。 1. 数组&#xff08;Array&#xff09; 特点 固定大小&#xff1a;在创建数组时需要指定其长度&#xff0c;之后无法动态改变。连续存储&#xf…

5秒修改文件默认打开方式-windows版

这里写自定义目录标题 今天做前端开发遇见我的ts文件默认打开方式是暴风影音&#xff0c;但是我想让他默认用vscode打开&#xff0c;在vscode 找了半天也没搞定&#xff0c;从网上搜索到了修改方式&#xff0c;只需5秒钟。下面就来看看吧。 &#x1f4c1; 想要改变文件的默认打…

2025年信息科学与工程学院科协机器学习介绍——机器学习基本模型介绍

机器学习 目录 机器学习一.安装基本环境conda/miniconda环境 二.数据操作数据预处理一维数组二维数组以及多维数组的认识访问元素的方法torch中tenson的应用张量的运算张量的广播 三.线性代数相关知识四.线性回归SoftMax回归问题&#xff08;分类问题&#xff09;什么是分类问题…

计算机毕业设计Hadoop+Spark+DeepSeek-R1大模型民宿推荐系统 hive民宿可视化 民宿爬虫 大数据毕业设计(源码+文档+PPT+讲解)

温馨提示&#xff1a;文末有 CSDN 平台官方提供的学长联系方式的名片&#xff01; 温馨提示&#xff1a;文末有 CSDN 平台官方提供的学长联系方式的名片&#xff01; 温馨提示&#xff1a;文末有 CSDN 平台官方提供的学长联系方式的名片&#xff01; 作者简介&#xff1a;Java领…

业务应用和大数据平台的数据流向

概述 业务应用与大数据平台之间的交互是实现数据驱动决策和实时业务处理的关键环节。其交互方式多样&#xff0c;协议选择取决于数据流向、实时性要求及技术架构。一句话总结&#xff0c;数据流向可以是从业务应用写入大数据平台&#xff0c;也可以是大数据平台回写至业务应用…

山东大学软件学院nosql实验一环境配置

环境&#xff1a;前端vue后端springboot 软件环境&#xff1a; MongoDB MongoDBCompass 实验步骤与内容&#xff1a; 在官网下载安装包&#xff08;最新版&#xff09; 配置环境环境变量 在“高级系统设置-环境变量”中&#xff0c;可以将MongoDB添加到环境变量Path中(D:\…

《计算机视觉》——图像拼接

图像拼接 图像拼接是将多幅有重叠区域的图像合并成一幅全景或更大视角图像的技术&#xff0c;以下为你详细介绍&#xff1a; 原理&#xff1a;图像拼接的核心原理是基于图像之间的特征匹配。首先&#xff0c;从每幅图像中提取独特的特征点&#xff0c;如角点、边缘点等&#x…

后台管理系统-园区管理

功能演示和模版搭建 <template><div class"building-container"><!-- 搜索区域 --><div class"search-container"><div class"search-label">企业名称&#xff1a;</div><el-input clearable placeholde…

CSS中padding和margin属性的使用

在 HTML 中&#xff0c;padding 和 margin 是用于控制元素布局和间距的重要属性。 一、Padding&#xff08;内边距&#xff09; 定义&#xff1a;Padding 是指元素内容与元素边框之间的距离。它可以在元素内部创造出空白区域&#xff0c;使得内容不会紧贴着边框。 作用 增加元…

git中,如何查看具体单个文件的log

在 Git 中&#xff0c;可以使用多种方式查看单个文件的提交日志&#xff08;Log&#xff09;&#xff0c;以下详细介绍不同场景下的查看方法&#xff1a; 目录 一、基本命令查看文件的完整提交日志 二、查看文件提交日志并显示差异内容 三、限制显示的提交日志数量 四、按…