Redis7——基础篇(六)

 前言:此篇文章系本人学习过程中记录下来的笔记,里面难免会有不少欠缺的地方,诚心期待大家多多给予指教。

基础篇:

  1. Redis(一)
  2. Redis(二)
  3. Redis(三)
  4. Redis(四)
  5. Redis(五)

接上期内容:上期完成了Redis主从模式的学习。下面开始学习Redis的哨兵模式(重点),话不多说,直接发车。


一、定义

Q:既然已经有了主从模式,为什么还要推出哨兵模式呢?

A:在主从模式的架构里,当 Master 节点发生宕机故障时,从节点并不会自动晋升为新的Master。要是 Master 节点在短时间内无法恢复正常运行,系统就会陷入一个棘手的状况。此时,系统仅仅保留了读操作的功能,却丧失了写操作的能力。这种读写能力的失衡,显然无法满足实际业务对系统高可用性和数据完整性的要求。

而哨兵模式正是为了解决上述主从模式的痛点而诞生。它通过一组Sentinel节点来监控主从架构中的Redis实例,当主节点出现故障时,自动将一个从节点晋升为主节点,并让其他从节点重新指向新的主节点,从而实现自动故障转移,保证系统的高可用性。俗称:无人值守运维。


二、功能

  1. 主从监控:哨兵节点不断地检查主节点和从节点是否正常运行,通过定期发送 PING 命令来判断节点的健康状态。
  2. 消息通知:当某个 Redis 实例出现问题时,哨兵可以通过 API 向管理员或其他应用程序发送通知,以便及时处理。
  3. 自动故障转移:这是哨兵模式的核心功能。当主节点不可用时,哨兵会在从节点中选举一个新的主节点,并调整其他从节点的配置,使其指向新的主节点。
  4. 配置中心:客户端可以通过连接哨兵来获取主节点信息。

三、实操

(一)、架构说明

3个哨兵,1个Master,2个Slave。哨兵自动监控和维护集群,不存放数据,只是吹哨人,Master负责存,Slave负责读。

由于机器硬件问题,同时启动6台虚拟机,电脑吃不消,所以将哨兵的集群放在6379上。

(二)、实操步骤

1、拷贝原生配置

拷贝redis压缩目录下的sentinel.conf到/myredis下。


2、修改参数配置

2.1、参数说明

常用参数:

bind:服务监听地址,用于客户端连接,默认本机

daemonize:是否以后台daemon方式运行

protected-mode:安全保护模式
port:端口
logfile:日志文件路径
pidfilepid:文件路径
dir:工作目录

sentinel monitor <master-name> <ip> <redis-port> <quorum>:设置要监控的master服务器,quorum代表确认客观下线的最少的哨兵数量

sentinel auth-pass <master-name> <password>:连接Master的密码

其他参数:

sentinel down-after-milliseconds <master-name> <milliseconds>:指定多少毫秒之后,主节点没有应答哨兵,此时哨兵主观上认为主节点下线


sentinel parallel-syncs <master-name> <nums>:表示允许并行同步的slave个数,当Master挂了后,哨兵会选出新的Master,此时,剩余的slave会向新的master发起同步数据


sentinel failover-timeout <master-name> <milliseconds>:故障转移的超时时间,进行故障转移时,如果超过设置的毫秒,表示故障转移失败


sentinel notification-script <master-name> <script-path> :配置当某一事件发生时所需要执行的脚本


sentinel client-reconfig-script <master-name> <script-path>:客户端重新配置主节点参数脚本


2.2、修改配置

由于sentinel集群是在6379上,所以需要配置3份sentinel.conf文件。

vim 打开sentinel26379.conf 文件,删除里面所有内容,拷贝下面内容(改为自己虚拟机的IP地址):

bind 0.0.0.0
daemonize yes
protected-mode no
port 26379
logfile /myredis/logs/sentinel26379.log"
pidfile /var/run/redis-sentinel26379.pid
dir /myredis
sentinel monitor mymaster 192.168.112.129 6379 2
sentinel auth-pass mymaster root

23680、23681也一样,但是只要改端口号即可(改为自己虚拟机的IP地址):


3、测试主从模式

如果不知道,主从模式怎么搭建,请前往Redis(五)

启动Master,两台slave,并查看主从关系。

Master:

启动80、81slave:

确定主从关系:

测试主从是否正常工作:


4、配置哨兵集群

在6379那台机器上启动sentinel集群。

哨兵集群已成功启动。


5、模拟故障场景

我们自己手动关闭6379服务器,模拟master挂了。

5.1、思考问题

Q1:Master主机挂了,两台从机是否正常?

A:从机数据正常。


Q2:是否从两台slave中选出新的Master?

A:会。如Q1所示,6380和6381在Master宕机后,哨兵会进行选举和故障转移,导致从机在获取数据时,出现Server closed或者broken pipe错误,但是会立马恢复了。

此时6380已经成为了new Master,6381也变成了6380的slave。


Q3:之前的Master恢复后,谁会是新的Master?双Master会不会冲突?

A:新Master当然是哨兵选举出来的(本次是6380,下次不知道是谁),不会出现双Master的场景,以前的Master重新恢复后,会变成new Master的slave。

启动6379,查看主从关系:

查看Master6380:

完美收官。


6、对比配置文件

后续又重新玩了一遍,所以新Master由6380变成了6381。

查看sentinel26379.conf文件。

老Master6379.conf:

new Master 6381.conf:

结论:文件的内容,在运行期间会被sentinel动态进行更改。

当Master宕机后,哨兵选举出new Master之后,sentinel会对oldMaster_redis.conf、slave_redis.conf、sentinel.conf文件的内容进行更改,即oldMaster_redis.conf中会多一行slaveof的配置,newMaster_redis.conf中会移除之前的配置,而三个sentinel.conf的监控目标也会随之调换。


四、哨兵模式运行流程和选举流程

(一)、主观下线

所谓主观下线(Subjectively Down, 简称 SDOWN)指的是单个Sentinel实例对服务器做出的下线判断,即单个sentinel认为某个服务下线(有可能是接收不到订阅,或者二者之间的网络不通等等原因)。主观下线就是说如果服务器在[sentinel down-after-milliseconds]给定的毫秒数之内没有回应PING命令或者返回一个错误消息, 那么这个Sentinel会主观的(单方面的)认为这个master不可以用了。

sentinel.conf文件中:

sentinel down-after-milliseconds <master-name> <milliseconds>

表示Master被当前sentinel实例认定为失效的间隔时间,这个配置其实就是进行主观下线的一个依据,Master在多长时间内一直没有给sentinel返回有效信息,则认定该Master主观下线。也就是说如果多久没联系上redis-servevr,认为这个redis-server进入到失效(SDOWN)状态。


(二)、客观下线

当一个Sentinel节点将主节点标记为 “主观下线” 后,它会通过Sentinel之间的gossip协议(流言协议)将这个信息传播给其他 Sentinel 节点。当有足够数量(quorum)的Sentinel节点都认为主节点处于 “主观下线” 状态时,这个主节点就会被标记为 “客观下线”(Objectively Down)。

quorum这个参数是进行客观下线的一个依据

意思是至少有quorum个sentinel认为这个master有故障才会对这个master进行下线以及故障转移。因为有的时候,某个sentinel节点可能因为自身网络原因导致无法连接master,而此时master并没有出现故障,所以这就需要多个sentinel都一致认为该master有问题,才可以进行下一步操作,这就保证了公平性和高可用。 

sentinel.conf文件中:


(三)、选举leader

当主节点被判断客观下线以后,各个哨兵节点会进行协商,先选举出一个领导者哨兵节点(兵王)也即被选举出的兵王进行failover(故障迁移)。

Q:领导者哨兵节点如何选举出来的?

A:监视该主节点的所有哨兵都有可能被选为领导者,选举使用的算法是Raft算法;Raft算法的基本思路是先到先得,即在一轮选举中,哨兵A向B发送成为领导者的申请,如果B没有同意过其他哨兵,则会同意A成为领导者。这里涉及到一个算法问题,不做过多阐述,有兴趣可以私底下学习。


(四)、故障转移

故障转移分为三个步骤。可以趣称为“新主登基”、“群臣俯首”、“旧主拜服”。

(一)、“新主登基”

新主登基指:某个slave节点被选为Master。

从slave节点中选出new Master的规则:优先级-->偏移量-->Run ID

1、优先级

redis.conf文件中,优先级slave-priority或者replica-priority最高的从节点(数字越小优先级越高 ),默认100。


2、偏移量

指复制偏移位置offset最大的从节点,通俗一点就是谁从原Master哪儿复制的key多,谁就当新的Master。


3、Run ID

Run ID是Redis 实例启动时生成的一个随机的 40 位十六进制字符串,全局唯一。哨兵会选择 Run ID字典序最小的从节点作为新的主节点


4、选举流程图


(二)、“群臣俯首”

群臣俯首指:当new Master选举出来后,剩余的slave节点脱离宕机的Master,重新连接的新的Master(可以从sentinel.log文件查看)。具体分为二步:

1、Sentinel leader会对选举出的new Master执行slaveof no one操作,将其提升为Master节点。

2、Sentinel leader向其它slave发送命令,让剩余的slave成为新的Master节点的slave。


(三)、“旧主拜服”

旧主拜服指:已经宕机的Master故障恢复,重启成功了,从新加入。但是身份由以前的Master变成slave。


(四)、故障转移小总结

上述的failover操作均由sentinel自己独自完成,完全无需人工干预。


五、使用注意事项

  1. 哨兵节点的数量应为多个,哨兵本身应该集群,保证高可用。
  2. 哨兵节点的数量应该是奇数。
  3. 各个哨兵节点的配置应一致。
  4. 如果哨兵节点部署在Docker等容器里面,尤其要注意端口的正确映射。
  5. 哨兵集群+主从复制,并不能保证数据零丢失。

六、总结

Redis哨兵模式通过监控、通知和自动故障转移机制,为 Redis集群提供了高可用性保障。合理配置和应用 Redis哨兵模式,可以有效地提升系统的稳定性和性能。在实际应用中,需要根据具体的业务需求和场景,灵活调整配置参数,以充分发挥 Redis 哨兵模式的优势。


ps:努力到底,让持续学习成为贯穿一生的坚守。学习笔记持续更新中。。。。

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

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

相关文章

Windows 下 Ollama 安装deepseek本地模型

Windows 下 Ollama 安装deepseek本地模型 安装 Ollama 下载 Ollama 下载链接&#xff1a;https://ollama.org.cn/download/windows 下载完成后&#xff0c;按照提示进行安装。 安装过程 安装完成后&#xff0c;安装页面会自动关闭&#xff0c;这是正常现象。 接下来&#…

【鸿蒙开发】第四十三章 Notification Kit(用户通知服务)

目录​​​​​​​ 1 简介 1.1 使用场景 1.2 能力范围 1.3 业务流程 1.4 通知样式 1.5 约束限制 1.6 与相关Kit的关系 2 请求通知授权 2.1 接口说明 2.2 开发步骤 3 管理通知角标 3.1 接口说明 3.2 开发步骤 4 管理通知渠道 4.1 通知渠道类型说明 4.2 接口说明…

bboss v7.3.5来袭!新增异地灾备机制和Kerberos认证机制,助力企业数据安全

ETL & 流批一体化框架 bboss v7.3.5 发布&#xff0c;多源输出插件增加为特定输出插件设置记录过滤功能&#xff1b;Elasticsearch 客户端新增异地双中心灾备机制&#xff0c;提升框架高可用性&#xff1b;Elasticsearch client 和 http 微服务框架增加对 Kerberos 认证支持…

利用非球面透镜进行激光光束重组

这是高斯分布激光束重塑透镜设计的分步演示。该透镜用于将高斯分布转换为成像平面上的均匀照明。 输入激光光束轮廓&#xff1a; 光学结构&#xff1a; Excel 中坐标的数学计算&#xff1a; 输出照度曲线&#xff1a;

(一)趣学设计模式 之 单例模式!

目录 一、啥是单例模式&#xff1f;二、为什么要用单例模式&#xff1f;三、单例模式怎么实现&#xff1f;1. 饿汉式&#xff1a;先下手为强&#xff01; &#x1f608;2. 懒汉式&#xff1a;用的时候再创建&#xff01; &#x1f634;3. 枚举&#xff1a;最简单最安全的单例&a…

nacos编写瀚高数据库插件

1、下载nacos源码 git clone gitgithub.com:alibaba/nacos.git 2、引入瀚高驱动 <dependency><groupId>com.highgo</groupId><artifactId>jdbc</artifactId><version>${highgo.version}</version></dependency> 3、DataSource…

讯飞唤醒+VOSK语音识别+DEEPSEEK大模型+讯飞离线合成实现纯离线大模型智能语音问答。

在信息爆炸的时代&#xff0c;智能语音问答系统正以前所未有的速度融入我们的日常生活。然而&#xff0c;随着数据泄露事件的频发&#xff0c;用户对于隐私保护的需求日益增强。想象一下&#xff0c;一个无需联网、即可响应你所有问题的智能助手——这就是纯离线大模型智能语音…

后端Java Stream数据流的使用=>代替for循环

API讲解 对比 示例代码对比 for循环遍历 package cn.ryanfan.platformback.service.impl;import cn.ryanfan.platformback.entity.Algorithm; import cn.ryanfan.platformback.entity.AlgorithmCategory; import cn.ryanfan.platformback.entity.DTO.AlgorithmInfoDTO; im…

UE 播放视频

一.UI播放视频 1.导入视频文件至工程文件夹 2.文件夹内右健选择Media -> File Meida Source创建testFileMeidaSource文件。 编辑FilePath为当前视频 3.右键->Media->Media Player 创建testMediaPlayer文件 4.右键创建testMediaTexture。编辑MediaPlayer设置testMedia…

推荐一款AI大模型托管平台-OpenWebUI

推荐一款AI大模型托管平台-OpenWebUI 1. OpenWebUI 1. OpenWebUI什么? 官网地址&#xff1a;https://openwebui.com/ GitHub地址&#xff1a; https://github.com/open-webui/open-webui Open WebUI 是一个可扩展、功能丰富且用户友好的自托管 AI 平台&#xff0c;旨在完全离…

【Python项目】基于知识图谱的百科问答系统

【Python项目】基于知识图谱的百科问答系统 技术简介&#xff1a; 采用Python技术、MySQL数据库、Django框架、Scrapy爬虫等技术实现。 系统简介&#xff1a; 百科问答系统是一个基于知识图谱的问答平台&#xff0c;旨在为用户提供快速、准确的百科知识查询服务。系统通过爬…

stm32rtc实时时钟详解文章

目录 stm32 后备区域基础知识详解 stm32 bkp基础知识详解 Unix时间戳基础知识详解 stm32 rtc实时时钟基础知识详解 相关代码初始化配置 欢迎指正&#xff0c;希望对你&#xff0c;有所帮助&#xff01;&#xff01;&#xff01; stm32 后备区域基础知识详解 stm32芯片的 …

Spring Boot项目@Cacheable注解的使用

Cacheable 是 Spring 框架中用于缓存的注解之一&#xff0c;它可以帮助你轻松地将方法的结果缓存起来&#xff0c;从而提高应用的性能。下面详细介绍如何使用 Cacheable 注解以及相关的配置和注意事项。 1. 基本用法 1.1 添加依赖 首先&#xff0c;确保你的项目中包含了 Spr…

windows上vscode cmake工程搭建

安装vscode插件&#xff1a; 1.按装fastc&#xff08;主要是安装MinGW\mingw64比较方便&#xff09; 2.安装C&#xff0c;cmake&#xff0c;cmake tools插件 3.准备工作完成之后&#xff0c;按F1&#xff0c;选择cmake:Quick Start就可以创建一个cmake工程。 4.设置Cmake: G…

SpringMVC详解

文章目录 1 什么是MVC 1.1 MVC设计思想1.2 Spring MVC 2 SpringMVC快速入门3 SpringMVC处理请求 3.1 请求分类及处理方式 3.1.1 静态请求3.1.2 动态请求 3.2 处理静态请求 3.2.1 处理html文件请求3.2.2 处理图片等请求 3.3 处理动态请求 3.3.1 注解说明3.3.2 示例 3.4 常见问题…

【用deepseek和chatgpt做算法竞赛】——还得DeepSeek来 -Minimum Cost Trees_5

往期 【用deepseek和chatgpt做算法竞赛】——华为算法精英实战营第十九期-Minimum Cost Trees_0&#xff1a;介绍了题目和背景【用deepseek和chatgpt做算法竞赛】——华为算法精英实战营第十九期-Minimum Cost Trees_1&#xff1a;题目输入的格式说明&#xff0c;选择了邻接表…

面试题汇总

1. 判断大小端问题 大端&#xff1a;低字节存放在高地址&#xff1b; 小端&#xff1a;低字节存放在低地址 如 : 0x12345678 bool is_little_endian() {unsigned int x 1;return ((char*)&x)[0]; }bool is_big_endian() {unsigned int x 1;return !((char*)&x)[0];…

jsherp importItemExcel接口存在SQL注入

一、漏洞简介 很多人说管伊佳ERP&#xff08;原名&#xff1a;华夏ERP&#xff0c;英文名&#xff1a;jshERP&#xff09;是目前人气领先的国产ERP系统虽然目前只有进销存财务生产的功能&#xff0c;但后面将会推出ERP的全部功能&#xff0c;有兴趣请帮点一下 二、漏洞影响 …

体验用ai做了个python小游戏

体验用ai做了个python小游戏 写在前面使用的工具2.增加功能1.要求增加视频作为背景。2.我让增加了一个欢迎页面。3.我发现中文显示有问题。4.我提出了背景修改意见&#xff0c;欢迎页面和结束页面背景是视频&#xff0c;游戏页面背景是静态图片。5.提出增加更多游戏元素。 总结…

动态存储斐波那契数列(递归优化)

递归 递归是c当中一种自身调用自身的算法。 普通递归解决斐波那契数列问题 #include<iostream> using namespace std; int f(int n){int sum;if(n<2){sum1;}else{sumf(n-1)f(n-2);}return sum; } int main() {int n;cin>>n;cout<<f(n);return 0;}当数据…