Redis教程——哨兵

在上篇文章我们学习了Redis教程——主从复制,这篇文章我们学习Redis教程——哨兵监控。

在主从复制中如果主机发生宕机,从机Redis会一直等到主机的恢复,这样会导致只能进行读操作,不能进行写操作,这大大降低了系统的高可用性。为了解决这个问题,Redis提供了哨兵监控。

哨兵监控

哨兵监控是吹哨人巡查监控后台主机Redis是否故障,如果故障了根据投票数自动将某个从机Redis转换为新主机Redis,继续对外服务。

如下图所示:

这样大大提高了Redis的高可用性。

通过哨兵监控,我们可以实现:

  • 主从监控:监控主从Redis运行是否正常;

  • 消息通知:哨兵可以将故障转移的结果发送给客户端;

  • 故障转移:如果主机Redis异常,则会进行主从切换,将其中一个从机Redis作为新主机Redis;

  • 配置中心:客户端通过连接哨兵来获取当前Redis服务的主节点地址。

注意:哨兵一般是有多个,负责自动监控和维护集群,不存放数据。

配置文件

哨兵的默认配置文件为sentinel.conf,大家可以在Redis的安装路径中找到,在哨兵配置,通过如下图配置项监听主机Redis,

其配置项语法格式如下:

sentinel monitor <master-name> <ip> <redis-port> <quorum>  # 设置监控的主机Redis服务器
sentinel auth-pass <master-name> <password>         # 设置连接主机Redis服务的密码

由于网络是不可靠的,哨兵可能会因为网络阻塞误认为一个主机Redis发生宕机,所以一般情况下是有多个哨兵来监控Redis,互相沟通某个Redis是否真的发生宕机。

配置代码中的quorum表示有多少个哨兵认为主机Redis发生宕机就进行从机Redis选举新的主机Redis。

除了上面的两条配置项,哨兵还有如下配置项,

sentinel down-after-milliseconds <master-name> <milliseconds>  # 指定多少毫秒后,主机节点没有应答哨兵,此时哨兵主观上认为主节点下线
sentinel parallel-syncs <master-name> <nums>  # 表示允许并行同步从机Redis个数,当主机Redis挂后,哨兵会选出新的主机Redis,此时,剩余的从机Redis会向新主机Redis发起同步数据
sentinel failover-timeout <master-name> <milliseconds>  # 故障转移超时时间,进行故障转移时,如果超过设置的毫秒,表示故障转移失败
sentinel notification-script <master-name> <script-path>  # 配置当某一个事件发生时所需要执行的脚步
sentinel client-reconfig-script <master-name> <script-path>  # 客户端重新配置主节点参数脚步

示例

配置

为了方便演示,我们准备了三台服务器、三个哨兵,没服务器的可以使用VMware虚拟机,如下图所示:

这里我们已经配置好了主从关系,大家不懂怎么配置可以参考之前的文章:Redis教程——主从复制。

主机Redis有可能会变为从机,需要访问新主机Redis的密码,所以主机Redis配置也要添加masterauth配置项。

因为缺少足够的服务器,我们把三个哨兵都配置在主机Redis的服务器中。

为了更直观地查看哨兵的配置项,我们这里整理了目前所需的配置项,如下所示:

bind 0.0.0.0   # 服务监听地址,用于客户端连接
daemonize yes   # 开启哨兵
protected-mode no  # 允许外界连接
port 26379    # 哨兵端口
logfile "/myRedis/sentinel26379.log"  # 哨兵日志文件路径
pidfile /var/run/redis-sentinel26379.pid  # 哨兵pid文件
dir /myRedis       # 工作目录
sentinel monitor mymaster 47.119.21.164 6379 2  # 设置监控的主机Redis服务器
sentinel auth-pass mymaster 123456   # 配置主机Redis的登录密码

由于三个哨兵都配置在同一个服务器中,所以不同哨兵的配置文件中端口号有所不同,所以上面的配置项中,port参数,哨兵日志、pid文件都需要稍微作调整。

最终我们在myRedis文件夹创建了三个哨兵配置文件,如下图所示:

启动哨兵

启动哨兵有两种方式:

redis-sentinel 哨兵配置文件路径 --sentinel
redis-server 哨兵配置文件路径 --sentinel

如下图所示:

成功启动哨兵后,会在你设置的哨兵日志文件路径下生成日志文件,其中一个日志文件如下图所示:

同时之前的哨兵配置文件也会发生变化,如下图所示:

该新增的内容简单来说就是哨兵已经知道了Redis主从关系并正在监听Redis。

模拟主机宕机

通过关闭主机Redis的方式,模拟主机Redis发生宕机,发生宕机后,哨兵会在后台进行一系列操作,所以这次的shutdown操作会延迟一下,如下图所示:

主机Redis发生宕机后,从机Redis需要重新读取网络的规划,所以从机Redis执行操作命令时,可能会报如下错误:

Error: Server closed the connection

我们只需稍微等待一下,错误就会自动消失。

接下来我们看哨兵日志文件,如下图所示:

简单来说,当主机Redis发生宕机后,一个哨兵主观认为主机Redis宕机,多个哨兵进行投票后,客观认为Redis已经宕机,接着选举新主机Redis并确定主从关系。

在这个过程中,哨兵通过Raft算法选出一个哨兵为领导,推动新主机Redis的选举、所有Redis配置文件、哨兵配置文件的修改。

Raft算法的基本思路是先到先得。

其中:

Redis配置文件将原来的replicaof配置项删除或修改了,并在配置文件末尾添加了如下代码:

# Generated by CONFIG REWRITE
latency-tracking-info-percentiles 50 99 99.9
save 3600 1
save 300 100
save 60 10000
user default on #8d969eef6ecad3c29a3a629280e686cf0c3f5d5a86aff3ca12020c923adc6c92 ~* &* +@all

该代码主要是用于RDB持久化的配置。

原主机Redis末尾添加了如下代码:

# Generated by CONFIG REWRITE
latency-tracking-info-percentiles 50 99 99.9
replicaof 111.230.32.139 6379
user default on #8d969eef6ecad3c29a3a629280e686cf0c3f5d5a86aff3ca12020c923adc6c92 ~* &* +@all

该代码主要是用于配置主从关系,所以当原主机Redis恢复后,会变成新主机Redis的从机。

在哨兵配置文件中,主要对监听的主机Redis服务器IP,主从关系做了修改,如下图所示:

选举原理

通过上面的内容,我们可以知道当一个主从配置中主机Redis失效后,哨兵会选举出一个新的主机Redis来接替原主机Redis的工作。

选举原理如下图所示:

首先Redis配置文件中的slave-priority或replica-priority权限最高的Redis(数字越小优先级越高),如下图所示:

优先级一样高就对比复制数据的偏移量offset最大的从机Redis,偏移量一样大就对比ID号,ID号最小的就成为新主机Redis。

选举结束后,哨兵领导者会对选举出来的新主机执行slaveof no one操作,将其提升为主机Redis,再向从机发送命令,让剩余的从机成为新主机的从机,再让原主机降级为从机并恢复正常工作。

好了,Redis教程——哨兵监控就讲到这里。

公众号:白巧克力LIN

该公众号发布Python、数据库、Linux、Flask、Django、自动化测试、Git、算法、前端、服务器等相关文章!

- END -

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

flexible.js+rem页面适配

简介 flexible.js 介绍 flexible.js 是一个用于移动端页面适配的 JavaScript 库&#xff0c;由阿里巴巴团队开发并开源。在移动 web 开发中&#xff0c;由于设备屏幕尺寸、分辨率以及像素比的差异&#xff0c;开发者通常需要编写额外的代码来确保页面在不同设备上都能正确显示…

【WEEK12】 【DAY1】整合JDBC【中文版】

2024.5.13 Monday 目录 11.整合JDBC11.1.SpringData简介11.2.新建springboot-04-data项目11.3.新建application.yaml11.4.连接数据库11.5.修改Springboot04DataApplicationTests.java11.5.1.查看DataSourceProperties.java和DataSourceAutoConfiguration.java 11.6.JDBCTempla…

在CentOS 7服务器及Windows 10客户端间建立并配置NFS服务

在CentOS 7服务器及Windows 10客户端间建立并配置NFS服务 引言 网络文件系统(Network File System)&#xff0c;简称NFS&#xff0c;是一种分布式文件系统协议。它允许网络上的客户端机器像访问本地磁盘文件一样&#xff0c;通过网络访问服务器上的文件。在某些特定的业务场景中…

机器学习材料性能预测与材料基因工程应用实战

传统的材料研发技术是通过实验合成表征对材料进行试错和验证&#xff0c;而过去的计算手段受限于算法效率&#xff0c;无法有效求解实际工业生产中面临的复杂问题。 近几年随着大数据和人工智能介入&#xff0c;通过采用支持向量机、神经网络等机器学习算法训练数据集来构建模…

【JAVA】BOSS系统发版艺术:构建高效、优雅的微服务部署策略

在现代软件开发领域&#xff0c;微服务架构与容器化部署已迅速成为行业新趋势。微服务架构通过将应用拆分成多个小型、自治的服务单元&#xff0c;每个服务承担某项特定的业务功能。而容器化部署则以其轻量级和高度可移植的特性&#xff0c;为这些微服务的有效打包、分发和运行…

ApiHug 官方

&#x1f917; ApiHug {Postman|Swagger|Api...} 快↑ 准√ 省↓ GitHub - apihug/apihug.com: All abou the Apihug apihug.com: 有爱&#xff0c;有温度&#xff0c;有质量&#xff0c;有信任ApiHug - API design Copilot - IntelliJ IDEs Plugin | MarketplaceApiHug-H…

java版数据结构:二叉树

引言&#xff1a;什么是树 树是一种非线性的数据结构&#xff0c;由节点组成&#xff0c;节点之间以边连接。树结构中最重要的特点是&#xff0c;每个节点可以有多个子节点&#xff0c;但每个节点只有一个父节点&#xff08;除了根节点&#xff09;。树结构中没有环路&#xff…

水雨情监测系统—实时监测水位信息

TH-SW3水雨情监测系统是一种专门用于实时监测和收集水文气象数据的自动化系统。它能够实时获取区域内降雨和水情数据&#xff0c;并将其存储到数据库中进行分析处理&#xff0c;从而为防汛指挥人员提供及时准确的信息服务。 水雨情监测系统的主要功能包括实时监测水位、流速、流…

第十一届蓝桥杯大赛软件类决赛 Java A 组

文章目录 发现宝藏【考生须知】试题 A: 合数个数试题 B : 含 2 天数试题 C: 本质上升序列试题 D: 迨尺天涯试题 E: 玩具蛇试题 F: 游园安排试题 G: 画廊试题 H: 奇偶覆盖试题 I: 补给试题 J: 蓝跳跳 发现宝藏 前些天发现了一个巨牛的人工智能学习网站&#xff0c;通俗易懂&…

基于C++基础知识的指针

一、变量与指针 在C中&#xff0c;变量是用来存储数据的一个标识符&#xff0c;而指针是一个变量&#xff0c;该变量存储的是另一个变量的地址。 变量可以是不同的数据类型&#xff0c;包括整数&#xff08;int&#xff09;、浮点数&#xff08;float&#xff09;、字符&#…

deveco studio 打开官方案例,不显示运行按钮。

就拿官方的search举例好了 git 地址 https://gitee.com/harmonyos/samples/tree/master/ETSUI/Search 使用deveco studio打开Search项目&#xff0c;打开Tools->Device-Manager中的Local Emulator本地模拟器&#xff0c; 此时会发现&#xff0c;运行按钮是灰色的&#xff0…

OVZ虚拟化:解锁高性能的虚拟化利器

欢迎来到我的博客&#xff0c;代码的世界里&#xff0c;每一行都是一个故事 OVZ虚拟化&#xff1a;解锁高性能的虚拟化利器 前言OVZ虚拟化简介OVZ虚拟化的优势OVZ虚拟化的应用场景OVZ虚拟化的部署与管理 前言 在当今快节奏的数字时代&#xff0c;虚拟化技术是推动云计算和容器…

通用人工智能将如何重塑未来

通用人工智能(AGI)是一种人工智能&#xff0c;具有与人类一样的获取知识、应用知识解决问题和理解能力。与专门处理受限任务的狭义人工智能系统不同&#xff0c;AGI寻求发展先进的认知技能&#xff0c;以促进在不同情况下完成复杂任务。AGI是一种人工智能&#xff0c;试图模仿人…

下载源代码并交叉编译riscv FreeBSD系统和内核

RISCV系统曾经让人神秘到无法接触&#xff0c;交叉编译更是只有耳闻&#xff0c;现在随着RISCV的普及&#xff0c;它们神秘的面纱已经被慢慢揭开。 交叉编译作为RISCV系统中的一个重要环节&#xff0c;也随着RISCV的普及而变得更加容易理解和操作。交叉编译允许开发者在一个平…

部署达梦数据库主从配置详细操作DM8

服务器配置 主库 192.168.81.128 实例名 dm-1 从库 192.168.81.129 实例名 dm-2 以下安装部署主从服务器都操作 关闭防火墙 systemctl stop firewalld && systemctl disable firewalld 注意安装前必须创建 dmdba 用户&#xff0c;禁止使用 root 用户安装数据库。…

下载element-ui报错

此错误表示尝试从npm注册表下载“resize observer polyfill”包时超时。这可能是由于网络连接问题或npm注册表服务器的问题。 要解决此问题&#xff0c;您可以尝试以下步骤&#xff1a; 1.重试npm install命令&#xff1a;有时&#xff0c;网络问题会导致临时超时。再次运行npm…

BGP基本配置练习

要求&#xff1a;通过使用BGP来实现所有设备的环回都能ping通 实验的思路 完成所有路由器的IGP配置 使用直连接口建立EBGP对等体关系 使用环回接口建立IBGP对等体关系 使用connect-interface命令修改IBGP的源IP地址 使用next-hop-local命令修改路由传递的下一…

Funakoshi — LipiDye Ⅱ脂滴活细胞成像试剂

Funakoshi LipiDye II是一款适用于长时间活细胞成像以观察动态脂滴&#xff08;LDS&#xff09;合成、移动或降解的绿色荧光染料&#xff1b;是LipiDye&#xff08;货号&#xff1a;FDV-0010&#xff09;的升级版&#xff0c;同时具备超强的光稳定性和高灵敏度等特点。 ➧ 产品…

Cartoon Colections Flower Path 2

高质量的花为Unity游戏引擎优化! 移动优化场景 这款10款3D花卉系列,超过+55种颜色!点击 配有高品质的室内植物和花卉模型。 所有对像都可以在可视化中使用。 - 1024x1024,纹理贴图 - Poly计数:平均8500~125500 tris 下载:​​Unity资源商店链接资源下载链接 效果图:

长难句打卡5.14

This is now a question for Gloria Mackenzie, an 84-year-old widow who recently emerged from her small, tin-roofed house in Florida to collect the biggest undivided lottery jackpot in history. 翻译&#xff1a;这是84岁的孤寡老人歌莉娅 麦肯齐当前所面临的问题…