第九章_Redis哨兵(sentinel)

news2024/11/18 9:22:29

是什么

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

作用

哨兵的作用:

1、监控redis运行状态,包括master和slave

2、当master down机,能自动将slave切换成新master

俗称,无人值守运维

官网理论

能做什么

主从监控:监控主从redis库运行是否正常

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

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

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

怎么使用(案例演示实战步骤)

Redis Sentinel架构,前提说明

3个哨兵:自动监控和维护集群,不存放数据,只是吹哨人

1主2从:用于数据读取和存放

案例步骤

  • /myredis目录下新建或者拷贝sentinel.conf文件,名字绝不能错
  • 先看看/opt目录下默认的sentinel.conf文件的内容


     
  • 重点参数项说明

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

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

    protected-mode:安全保护模式

    port:端口

    logfile:日志文件路径

    pidfile:pid文件路径

    dir:工作目录

    sentinel monitor <master-name> <ip> <redis-port> <quorum>:设置要监控的master服务器,quorum表示最少有几个哨兵认可客观下线,同意故障迁移的法定票数。

    行尾最后的quorum代表什么意思呢?quorum:确认客观下线的最少的哨兵数量



    我们知道,网络是不可靠的,有时候一个sentinel会因为网络堵塞而误以为一个master redis已经死掉了,在sentinel集群环境下需要多个sentinel互相沟通来确认某个master是否真的死了,quorum这个参数是进行客观下线的一个依据,意思是至少有quorum个sentinel认为这个master有故障,才会对这个master进行下线以及故障转移。因为有的时候,某个sentinel节点可能因为自身网络原因,导致无法连接master,而此时master并没有出现故障,所以,这就需要多个sentinel都一致认为该master有问题,才可以进行下一步操作,这就保证了公平性和高可用。

    sentinel auth-pass <master-name> <password>:master设置了密码,连接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文件通用配置

    由于机器硬件关系,我们的3个哨兵都同时配置进192.168.111.169同一台机器

    sentinel26379.conf



    sentinel26380.conf



    sentinel26381.conf



    请看一眼sentinel26379.conf、sentinel26380.conf、sentinel26381.conf我们自己填写的内容



    master主机配置文件说明


     
  • 先启动一主二从3个redis实例,测试正常的主从复制

    架构说明

1
169机器上新建redis6379.conf配置文件,由于要配合本次案例,请设置masterauth项访问密码为111111,不然后续可能报错master_link_status:down
2
172机器上新建redis6380.conf配置文件,设置好replicaof <masterip> <masterport>
3
173机器上新建redis6381.conf配置文件,设置好replicaof <masterip> <masterport>

请看一眼redis6379.conf、redis6380.conf、redis6381.conf

主机6379 :

6379后续可能会变成从机,需要设置访问新主机的密码, 请设置masterauth项访问密码为111111,

不然后续可能报错master_link_status:down

从机6380:

具体IP地址和密码根据你本地真实情况,酌情修改

从机6381:

具体IP地址和密码根据你本地真实情况,酌情修改

3台不同的虚拟机实例,启动三部真实机器实例并连接

redis-cli -a 111111 -p 6379

redis-cli -a 111111 -p 6380

redis-cli -a 111111 -p 6381

具体查看案例配置并观察文件内容 

===========以下是哨兵内容部分=====================

  • 再启动3个哨兵,完成监控

    redis-sentinel sentinel26379.conf --sentinel

    redis-sentinel sentinel26380.conf --sentinel

    redis-sentinel sentinel26381.conf --sentinel
     
  • 启动3个哨兵监控后再测试一次主从复制

  • 原有的master挂了
     

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



    问题思考

    两台从机数据是否OK?

    数据OK

    两个小问题



    6380



    6381



    了解 Broken Pipe

    认识broken pipe
    pipe是管道的意思,管道里面是数据流,通常是从文件或网络套接字读取的数据。当该管道从另一端突然关闭时,会发生数据突然中断,即是broken,对于socket来说,可能是网络被拔出或另一端的进程崩溃
    解决问题
    其实当该异常产生的时候,对于服务端来说,并没有多少影响。因为可能是某个客户端突然中止了进程导致了该错误
    总结 Broken Pipe
    这个异常是客户端读取超时关闭了连接,这时候服务器端再向客户端已经断开的连接写数据时就发生了broken pipe异常!



    是否会从剩下的2台机器上选出新的master?

    投票新选

    sentinel26379.log​



    sentinel26380.log



    sentinel26381.log​



    之前down机的master机器重启回来,谁将会是新老大?会不会双master冲突?

    谁是master,限本次案例

    6381被选为新master,上位成功



    以前的6379从master降级变成了slave



    6380还是slave,只不过换了个新老大6381(6379变6381),6380还是slave

  • 对比配置文件

    vim sentinel26379.conf

    老master,vim redis6379.conf

    新master,vim redis6381.conf

    结论

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

    Master-Slave切换后,master_redis.conf、slave_redis.conf和sentinel.conf的内容都会发生改变,即master_redis.conf中会多一行slaveof的配置,sentinel.conf的监控目标会随之调换

 其它备注

生产都是不同机房不同服务器,很少出现3个哨兵全挂掉的情况

可以同时监控多个master,一行一个

哨兵运行流程和选举原理

当一个主从配置中的master失效之后,sentinel可以选举出一个新的master用于自动接替原master的工作,主从配置中的其他redis服务器自动指向新的master同步数据。一般建议sentinel采取奇数台,防止某一台sentinel无法连接到master导致误切换

运行流程,故障切换

三个哨兵监控一主二从,正常运行中......

SDown主观下线(Subjectively Down)

SDOWN(主观不可用)是单个sentinel自己主观上 检测到的关于master的状态,从sentinel的角度来看,如果发送了PING心跳后,在一定时间内没有收到合法的回复,就达到了SDOWN的条件。

sentinel配置文件中的down-after-milliseconds设置了判断主观下线的时间长度

说明

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

sentinel down-after-milliseconds <masterName> <timeout>

表示master被当前sentinel实例认定为失效的间隔时间,这个配置其实就是进行主观下线的一个依据

master在多长时间内一直没有给Sentine返回有效信息,则认定该master主观下线。也就是说如果多久没联系上redis-servevr,认为这个redis-server进入到失效(SDOWN)状态。

ODown客观下线(Objectively Down)

ODOWN需要一定数量的sentinel,多个哨兵达成一致意见才能认为一个master客观上已经宕掉

说明

四个参数含义:

masterName是对某个master+slave组合的一个区分标识(一套sentinel可以监听多组master+slave这样的组合)

quorum这个参数是进行客观下线的一个依据,法定人数/法定票数

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

选举出领导者哨兵(哨兵中选出兵王)

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

三哨兵日志文件2次解读分析

sentinel26379.log​

sentinel26380.log​ 

sentinel26381.log​

哨兵领导者,兵王如何选出来的? 

Raft算法

监视该主节点的所有哨兵都有可能被选为领导者,选举使用的算法是Raft算法;Raft算法的基本思路是先到先得

即在一轮选举中,哨兵A向B发送成为领导者的申请,如果B没有同意过其他哨兵,则会同意A成为领导者

由兵王开始推动故障切换流程并选出一个新master

3步骤

“新主登基”:某个Slave被选中成为新Master

选出新master的规则,剩余slave节点健康前提下

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

复制偏移位置offset最大的从节点

最小Run ID的从节点(字典顺序,ASCII码)

“群臣俯首”:一朝天子一朝臣,换个码头重新拜

执行slaveof no one命令让选出来的从节点成为新的主节点,并通过slaveof命令让其他节点成为其从节点

Sentinel leader会对选举出的新master执行slaveof no one操作,将其提升为master节点

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

“旧主拜服”:老master回来也认怂

将之前已下线的老master设置为新选出的新master的从节点,当老master重新上线后,它会成为新master的从节点

Sentinel leader会让原来的master降级为slave并恢复正常工作。

小总结

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

哨兵使用建议

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

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

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

相关文章

面试京东失败,再看看两年前的面试题,根本不是一个难度

刚从京东走出来&#xff0c;被二面难到了&#xff0c;我记得学长两年前去面试的时候&#xff0c;问的问题都特别简单&#xff0c;咋现在难度高了这么多。面试前我也刷过很多的题和看过很多资料&#xff0c;后来想想&#xff0c;这年头网上软件测试资料泛滥&#xff0c;软件测试…

Linux使用crontab编写定时任务

Linux使用crontab编写定时任务 安装 yum install -y crontabcrontab服务启动与关闭 service crond start #启动服务 service crond stop #关闭服务 service crond restart #重启服务 service crond reload #重新载入配置 service crond status #查看状态chkconfig crond on …

【广州华锐互动】火电厂3D沉浸式事故体验,提高员工安全意识和应急处理能力

火电厂是一种重要的能源生产方式&#xff0c;但是在运营过程中也存在着一些风险和隐患。为了降低火电厂事故的发生率&#xff0c;提高员工的安全意识和应急处理能力&#xff0c;火电厂3D沉浸式事故体验系统成为了一个重要的工具&#xff0c;为企业安全管理起到了不可替代的作用…

python 第一章——简介与环境搭建

文章目录 前言一、什么是编程语言二、下载python解释器三、安装pycharm 前言 本系列教程目录可点击这里查看&#xff1a;python教程目录 python在当今世界的流行度应该已经不用我多说了&#xff0c;这可以从TIOBE的榜单中可窥一二 作为一门面向编程新人的语言&#xff0c;它…

【无标题】基于K-means聚类的多智能体跟随多领导者算法

源自&#xff1a;系统仿真学报 作者&#xff1a;袁国栋 何明 马子玉 张伟士 刘学达, 李伟 摘 要 为防止多智能体集群跟随多个领导者时编队混乱&#xff0c;提出了3种K-means聚类算法&#xff0c;将集群分成与领导者数量相同的社区&#xff0c;社区内的智能体将跟随同一领导…

解决PDF转Word问题:三种免费转换方法大比拼

在职场办公中&#xff0c;我们经常会遇到将PDF文件转换为可编辑的Word文件的问题。虽然网上有很多PDF转Word工具&#xff0c;但许多工具要么需要付费&#xff0c;要么转换后的文件无法直接编辑。所以&#xff0c;你可能会想知道是否有免费且效果好的PDF转Word工具。在本文中&am…

基于Java+SpringBoot+vue+element疫情药品采购出入库系统设计实现

基于JavaSpringBootvueelement疫情药品采购出入库系统设计实现 博主介绍&#xff1a;5年java开发经验&#xff0c;专注Java开发、定制、远程、指导等,csdn特邀作者、专注于Java技术领域 作者主页 超级帅帅吴 Java项目精品实战案例《500套》 欢迎点赞 收藏 ⭐留言 文末获取源码联…

使用opencv进行场景识别

opencv场景识别 文章目录 opencv场景识别一、需求1、现状2、设想 二、模型使用1、opencv dnn支持的功能2、ANN_MLP相关知识3、图像分类模型训练学习4、目标检测模型5、opencv调用darknet物体识别模型 三、模型训练1、现状2、步骤-模型编译3、步骤-模型训练 一、需求 1、现状 …

配置Maven(精简版)

一.下载配置相关版本的maven 1..下载maven文件 maven下载官网&#xff1a;点击 点进去官网&#xff0c;点击Download 往下拉找到这个 下载就可以了&#xff0c;下载完成后找地方解压。 2.配置环境变量 变量名&#xff1a;MAVEN_HOME 变量值&#xff1a;自己的安装目录 编…

最新,有8本SCIE期刊被剔除,4月SCIESSCI期刊目录更新(附最新目录下载)

2023年4月18日&#xff0c;科睿唯安更新了WOS期刊目录&#xff0c;继上次3月WOS期刊目录更新大变动之后&#xff0c;此次4月更新又有8本SCIE期刊发生变动&#xff0c;其中有4本期刊被剔出SCIE数据库&#xff0c;4本期刊更改了名称和ISSN号。更新后的最新SCIE期刊目录共有9505本…

基于51单片机的脉搏测量仪设计与实现

目录 前言 一、设计背景 二、系统功能 三、系统硬件设计 3.1 总体方案设计 3.2 信号采集电路设计 3.3 报警电路设计 3.4 下载电路 3.5 电源电路设计 3.6 OLED显示设计 3.7 键盘电路 四、系统软件设计 4.1 系统主程序设计 4.2 脉搏采集子程序设计 4.3 键盘程序设…

浏览器自动化(一)

目录 介绍 下载地址 安装教程 爬取百度热搜 介绍 Automa 是一个免费、开源的 Chrome 扩展&#xff0c;它通过目前流行的 No Code 无代码方式&#xff0c;只需要拖拽模块就实现了浏览器自动化&#xff0c;比如自动填写表格、执行重复性任务。 在工作中&#xff0c;如果我们…

Nacos单机搭建

Nacos概述 Nacos Nacos是阿里巴巴开源的服务注册中心及配置中心&#xff0c;致力于给开发者提供一款便捷、简单上手的开源框架 Nacos注册中心Eureka 服务配置Config 服务总线Bus 服务发现和服务健康监测 Nacos 使服务更容易注册&#xff0c;并通过DNS或HTTP接口发现其他…

Java企业电子招标采购系统源码Spring Boot + Mybatis + Redis + Layui + 前后端分离 构建企业电子招采平台之立项流程图

项目说明 随着公司的快速发展&#xff0c;企业人员和经营规模不断壮大&#xff0c;公司对内部招采管理的提升提出了更高的要求。在企业里建立一个公平、公开、公正的采购环境&#xff0c;最大限度控制采购成本至关重要。符合国家电子招投标法律法规及相关规范&#xff0c;以及…

Java网络通信

网络通信 网络程序设计是编写与其他计算机进行通讯的程序。Java已经将网络程序所需要的对象封装成不同的类。只要创建这些类的对&#xff0c;使用相应的方法&#xff0c;即使设计人员不具有关的网络知识&#xff0c;也可以编写处高质量的网络通讯程序 现实两台计算机的通信&a…

Activiti基本使用2

目录 3、流程实例 3.1、什么是流程实例 3.2、让实际业务与activiti表关联(BusinessKey) 3.3、挂起&#xff0c;激活流程实例 3.3.1、全部流程实例挂起 3.3.2、单个流程实例挂起 4、任务分配 4.1、固定分配 4.2、表达式分配 4.2.1、UEL-value 4.2.2、UEL-method 方式…

“码”上反馈,自动留痕:二维码助力湖塘街道人居环境巡查高效化

绍兴市柯桥区湖塘街道将农村人居环境巡查同二维码技术相结合&#xff0c;具体应用到了“村民垃圾分类检查”、“公厕卫生检查”和“各村垃圾分类工作的督导记录”这三项检查工作中&#xff0c;做到了“码”上反馈、自动留痕&#xff0c;有效提升了巡检实效&#xff0c;在2020年…

什么是薪酬管理系统,薪酬管理有哪些功能?

阅读本文您将了解&#xff1a;1.薪酬管理系统的定义&#xff1b;2.薪酬管理系统的功能&#xff1b;3.薪酬管理系统的作用。 一、薪酬管理系统是什么 薪酬管理系统是一种用于管理企业员工的薪资和奖金的工具。它可以自动计算员工的工资和奖金&#xff0c;记录员工的考勤和休假…

凌恩生物文献分享|大热门--HiFi宏基因组有效提升真核生物群落检出效果

binning和HiFi宏基因组测序优势&#xff1a; 不依赖于微生物的分离培养&#xff0c;环境微生物单菌基因组&#xff08;框架图&#xff09;研究的一种新的途径和高性价比策略&#xff1b; 可以得到环境中丰度较低的宏基因组&#xff0c;为研究低丰度微生物提供了途径&#xff1b…

【Unity VR开发】结合VRTK4.0:高亮与标签

语录&#xff1a; 信仰到底是什么呢&#xff0c;就是纵身一跃&#xff0c;就是我们跟神之间一个永远的约定&#xff0c;是舍弃日的去开始新的生活;信仰就是从今以后&#xff0c;再也不要放开你的手。 前言&#xff1a; Interactable Highlighter &#xff1a;当我们的手柄触碰…