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 -

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

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

相关文章

资料同化 | 搭建docker环境-1

Community Gridpoint Statistical Interpolation (GSI) system DTC 是一个分布式设施&#xff0c;NWP 社区可以在这里测试和评估用于研究和操作的新模型和技术。 DTC的目标包括&#xff1a; 链接研究和操作社区 研究成果转化为实际操作的速度 加快改善天气预报 开发和测试有…

Cocos Creator 3.8.x 透明带滚动功能的容器

ScrollView 是一种带滚动功能的容器 1、删除ScrollView下Sprite组件的SpriteFrame 2、ScrollView下scrollBar的Sprite组件的Color设为&#xff1a;FFFFFF00 3、ScrollView下view的Graphics组件的FillColor设为&#xff1a;FFFFFF00

IP代理如何帮助SEO进行优化?

IP代理在SEO优化中扮演着重要的角色&#xff0c;它通过多种方式帮助提升网站的搜索排名和可见性。以下是IP代理如何帮助SEO进行优化的详细阐述&#xff1a; 第一点&#xff0c;数据采集与分析&#xff1a;在SEO过程中&#xff0c;大量的数据是必不可少的。通过使用IP代理&…

c++ std::shared_ptr学习

背景 c中智能指针shared_ptr用于自动管理资源&#xff0c;通过引用计数来记录资源被多少出地方使用。在不使用资源时&#xff0c;减少引用计数&#xff0c;如果引用计数为0&#xff0c;表示资源不会再被使用&#xff0c;此时会释放资源。本文记录对c中std::shared_ptr的源码学习…

攻防世界PHP2

1、打开靶机链接http://61.147.171.105:49513/&#xff0c;没有发现任何线索 2、尝试访问http://61.147.171.105:49513/index.php&#xff0c;页面没有发生跳转 3、尝试将访问 尝试访问http://61.147.171.105:49513/index.phps index.php 和 index.phps 文件之间的主要区别在于…

GNU Radio创建时间戳 C++ OOT块

文章目录 前言一、创建自定义的 C OOT 块1、创建 timestamp_sender C OOT 模块①、创建 timestamp_sender OOT 块②、修改 C 代码 2、创建 timestamp_receiver C OOT 模块①、创建 timestamp_receiver OOT 块②、修改 C 代码 3、创建 delayMicroSec C OOT 模块①、创建 delayMi…

Vue3实战笔记(20)—封装头部导航组件

文章目录 前言一、封装头部导航栏二、使用步骤总结 前言 Vue 3 封装头部导航栏有助于提高代码复用性、统一风格、降低维护成本、提高可配置性和模块化程度&#xff0c;同时还可以实现动态渲染等功能&#xff0c;有利于项目开发和维护。 一、封装头部导航栏 封装头部导航栏&am…

HFSS学习-day4-建模操作

通过昨天的学习&#xff0c;我们已经熟悉了HFSS的工作环境&#xff1b;今天我们来讲解HFSS中创建物体模型的县体步骤和相关操作。物体建模是HFSS仿真设计工作的第一步&#xff0c;HFSS中提供了诸如矩形、圆面、长方体圆柱体和球体等多种基本模型(Primitive)&#xff0c;这些基本…

新书速览|MATLAB科技绘图与数据分析

提升你的数据洞察力&#xff0c;用于精确绘图和分析的高级MATLAB技术。 本书内容 《MATLAB科技绘图与数据分析》结合作者多年的数据分析与科研绘图经验&#xff0c;详细讲解MATLAB在科技图表制作与数据分析中的使用方法与技巧。全书分为3部分&#xff0c;共12章&#xff0c;第1…

精英都是时间控!职场精英的完美一天~~~谷歌FB都在用的时间管理术!

如何超高效使用24小时 每个人的一天都只有24小时&#xff0c;使用时间的方法将决定整个人生。时间管理术并不提倡把自己忙死榨干&#xff0c;而是通过在合适的时间做合适的事情&#xff0c;把大脑机能发挥到极致&#xff0c;从而提高效率&#xff0c;节省下更多时间用于生活与…

(项目)-KDE巡检报告(模板

金山云于12月26日对建行共计【30】个KDE集群,合计【198】台服务器进行了巡检服务。共发现系统风险【135】条,服务风险【1912】条,服务配置风险【368】条。 一、系统风险 1、风险分析(图片+描述) (1)磁盘使用率高 问题描述多个集群的多台服务器磁盘使用率较高,远超过…

答辩PPT模版如何选择?aippt快速生成

这些网站我愿称之为制作答辩PPT的神&#xff01; 很多快要毕业的同学在做答辩PPT的时候总是感觉毫无思路&#xff0c;一窍不通。但这并不是你们的错&#xff0c;对于平时没接触过相关方面&#xff0c;第一次搞答辩PPT的人来说&#xff0c;这是很正常的一件事。一个好的答辩PPT…

简述RocketMQ系统架构及其相关概念

一、概述 RocketMQ是一款高性能、高吞吐量的分布式消息队列系统&#xff0c;它采用了分布式架构&#xff0c;支持多生产者和消费者并发读写&#xff0c;具有高可用性、高吞吐量、低延迟等特点。本文将对RocketMQ的系统架构进行详细解析。 二、架构设计 RocketMQ采用了分布式架…

入门物联网就是这么简单——青创智通

工业物联网解决方案-工业IOT-青创智通 MQTT&#xff0c;全称为Message Queuing Telemetry Transport&#xff0c;是一种轻量级的发布/订阅消息传输协议&#xff0c;广泛应用于物联网领域。 MQTT协议以其高效、可靠、灵活的特性&#xff0c;成为物联网设备间通信的理想选择。本…

升级版ComfyUI InstantID 换脸:FaceDetailer + InstantID + IP-Adapter

在使用ComfyUI的InstantID进行人脸替换时&#xff0c;一个常见问题是该工具倾向于保留原始参考图的构图&#xff0c;即使用户的提示词与之不符。 例如&#xff0c;即使用户提供的是大头照并请求生成全身照&#xff0c;结果仍是大头照&#xff0c;没有显示出用户所期望的构图。…

MySQL_DDL语句

1.Data类临时数据的弊端 我们之前在将ServletJSP配合处理请求的过程中 数据库起到一个存取数据的作用 但是我们之前的案例中 数据是在Data类中临时定义的 并不是从数据库中获取的 这样做是不好的 因为每一次服务器关闭之后 那么部署在其上的类也会随着卸载 紧接着和类相挂钩的静…

基于C#开发web网页管理系统模板流程-登录界面

前言&#xff0c;首先介绍一下本项目将要实现的功能 &#xff08;一&#xff09;登录界面 实现一个不算特别美观的登录窗口&#xff0c;当然这一步跟开发者本身的设计美学相关&#xff0c;像蒟蒻博主就没啥艺术细胞&#xff0c;勉强能用能看就行…… &#xff08;二&#xff09…

使用Tkinter开发Python棋盘游戏

使用 Tkinter 开发一个简单的棋盘游戏是很有趣的&#xff01;下面是一个示例&#xff0c;演示如何使用 Tkinter 创建一个简单的五子棋游戏&#xff1a;这个是我通过几个夜晚整理出来的解决方案和实际操作教程。 1、问题背景 目标是开发一个 Python 棋盘游戏&#xff0c;玩家可…

人力资源管理:员工体验平台设计

员工体验是员工的感受&#xff0c;是员工作为企业一份子观察到、感受到和与之互动的一切&#xff0c;包含企业为员工提供的物质条件、人文环境等各方面的内容。 是在工作过程中接触到的所有接触点所产生的对自己与用人单位关系的整体感知&#xff0c;员工体验从员工入职开始贯…

使用Go和JavaScript爬取股吧动态信息的完整指南

引言 在现代金融生态系统中&#xff0c;信息流动的速度和效率对于市场的健康和投资者的成功至关重要。股市信息&#xff0c;特别是来自活跃交流平台如股吧的实时数据&#xff0c;为投资者提供了一个独特的视角&#xff0c;帮助他们洞察市场趋势和投资者情绪。这些信息不仅能够…