Redis(八)哨兵机制(sentinel)

文章目录

    • 哨兵机制
    • 案例
      • 认识异常
    • 哨兵运行流程及选举原理
      • 主观下线(Subjectively Down)
      • ODown客观下线(Objectively Down)
      • 选举出领导者哨兵
      • 选出新master过程
    • 哨兵使用建议

哨兵机制

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

https://redis.io/docs/manual/sentinel/
作用

  1. 主从监控:监控主从redis库运行是否正常
  2. 消息通知:哨兵可以将故障转移的结果发送给客户端
  3. 故障转移:如果Master异常,则会进行主从切换,将其中一个Slave作为新Master
  4. 配置中心:客户端通过连接哨兵来获得当前Redis服务的主节点地址

案例

sentinel.conf参数说明

  1. bind服务监听地址,用于客户端连接,默认本机地址
  2. daemonizee是否以后台daemon方式运行
  3. protected-mode安全保护模式
  4. port 端口
  5. logfile日志文件路径
  6. pidfile pid文件路径
  7. dir工作目录

新增

  1. sentinel monitor
    设置要监控的master服务器,quorum表示最少有几个哨兵认可客观下线,同意故障迁移的法定票数。
  2. sentinel auth-pass
    master设置了密码,连接master服务的密码
# 指定多少毫秒之后,主节点没有应答哨兵,此时哨兵主观上认为主节点下线
sentinel down-after-milliseconds <master-name> <milliseconds># 表示允许并行同步的slave个数,当Master挂了后,哨兵会选出新的Master,此时,剩余的slave会向新的master发起同步数据
sentinel parallel-syncs <master-name> <nums># 故障转移的超时时间,进行故障转移时,如果超过设置的毫秒,表示故障转移失败
sentinel failover-timeout <master-name> <milliseconds># 配置当某一事件发生时所需要执行的脚本
sentinel notification-script <master-name> <script-path># 客户端重新配置主节点参数脚本
sentinel client-reconfig-script <master-name> <script-path>

sentinel文件通用配置

bind 0.0.0.0
daemonize yes
protected-mode no
port 26379
logfile "/var/log/sentinel26379.log"
pidfile /var/run/redis-sentinel26379.pid
dir /data/redis
# 下面这段命令是 Sentinel 监控 Redis 主从架构中的一个主节点,其中:
# sentinel:表示要连接到 Sentinel 服务器。
# monitor:表示监控 Redis 服务。
# mymaster:表示被监控的 Redis 服务的名称,可以自定义。
# 192.168.111.169:表示 Redis 主节点的 IP 地址。
# 6379:表示 Redis 主节点的端口号。
# 2:表示需要至少有 2 个 Sentinel 实例认为 Redis 主节点失效才会触发故障转移。
sentinel monitor mymaster 192.168.217.169 6379 2
sentinel auth-pass mymaster 

启动

redis-sentinel ./sentinel129.conf --sentinel

注意

  1. 之前down机的master机器重启回来,会变成从机
  2. 6381被选为新master,上位成功
  3. 以前的6379从master降级变成了slave

关于配置文件小结

  1. 文件的内容,在运行期间会被sentinel动态进行更改
  2. Master-Slave切换后,master_redis.conf、slave_redis.conf和sentinel.conf的内容都会发生改变
    即master_redis.conf中会多一行slaveof的配置,sentinel.conf的监控目标会随之调换
  3. 可以同时监控多个master,一行一个
    示例:https://redis.io/docs/management/sentinel/
    在这里插入图片描述

认识异常

  • broken pipe

pipe是管道的意思,管道里面是数据流,通常是从文件或网络套接字读取的数据。当该管道从另一端突然关闭时,会发生数据突然中断,即是broken,对于socket来说,可能是网络被拔出或另一端的进程崩溃

这个异常是客户端读取超时关闭了连接,这时候服务器端再向客户端已经断开的连接写数据时就发生了broken pipe异常!
在这里插入图片描述

哨兵运行流程及选举原理

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

主观下线(Subjectively Down)

  • SDOWN(主观不可用)是单个sentinel自己主观上检测到的关于master的状态,从sentinel的角度来看如果发送了PING心跳后,在一定时间内没有收到合法的回复,就达到了SDOWN的条件。
  • sentinel配置文件中的down-after-milliseconds设置了判断主观下线的时间长度

ODown客观下线(Objectively Down)

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

选举出领导者哨兵

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

Raft算法

监视该主节点的所有哨兵都有可能被选为领导者,选举使用的算法是Raft算法;Raft算法的基本思路是先到先得:
即在一轮选举中,哨兵A向B发送成为领导者的申请,如果B没有同意过其他哨兵,则会同意A成为领导者

在这里插入图片描述

选出新master过程

步骤1: 选举新master:

  1. redis.conf文件中,优先级slave-priority或者replica-priority最高的从节点(数字越小优先级越高
  2. 复制偏移位置offset最大的从节点
  3. 最小Run ID的从节点 字典顺序,ASCII码
    在这里插入图片描述

步骤2:重新选择主节点

  1. 执行slaveof no one命令让选出来的从节点成为新的主节点,并通过slaveof命令让其他节点成为其从节点
  2. Sentinel leader会对选举出的新master执行slaveofno one操作,将其提升为master节点
  3. Sentinel leader向其它slave发送命令,让剩余的slave成为新的master节点的slave

步骤3:选举过后老master降级为子节点

  1. 将之前已下线的老master设置为新选出的新master的从节点,当老master重新上线后,它会成为新master的从节点
  2. Sentinel leader会让原来的master降级为slave并恢复正常工作。

哨兵使用建议

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

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

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

相关文章

开发微信小程序,将图片下载到相册的方法,saveImageToPhotosAlbum怎么用

在开发微信小程序的时候&#xff0c;经常能看到小程序里面有下载按钮&#xff0c;如何将小程序中的图片下载到手机相册中那&#xff0c;下面给大家说一下怎么做&#xff0c;代码如何去写。 一、到微信小程序后台开启“用户隐私保护指引” 1.进入小程序后台&#xff0c;侧拉拉到…

Ubuntu中安装OpenSSL

Ubuntu中安装OpenSSL 参考&#xff1a;linux上安装Openssl步骤详解_linux安装openssl-CSDN博客 下载&#xff1a; https://www.openssl.org/source/openssl-3.0.1.tar.gz 解压&#xff1a; tar -xzvf xxxx.tar.gz 安装&#xff1a; cd openssl-3.0.12 ./config make -j3…

计算机毕业设计 | SpringBoot 求职招聘管理系统(附源码)

1&#xff0c;绪论 1.1 开发背景 高学历人群是网络求职者的主体&#xff0c;且结构趋向固定。而在疫情肆虐的今日&#xff0c;线上招聘成了越来越多企业和个人选择的方式。在疫情期间线下招聘转为线上招聘&#xff0c;是疫情防控的需要。不能否定的是新的招聘模式的出现一定会…

jenkins发布失败

今天用jenkins发布项目时失败了&#xff0c;而前几天还好好的。 云控制台看了下&#xff0c;发现根本就没打包。 报错如下&#xff1a; 从控制台可以看出&#xff0c;项目依赖没有下载下来&#xff0c;所以打包失败了。 根本原因是&#xff1a;在配置中给yarn指定的淘宝仓库…

MongoDB日期存储与查询、@Query、嵌套字段查询实战总结

缘由 MongoDB数据库如下&#xff1a; 如上截图&#xff0c;使用MongoDB客户端工具DataGrip&#xff0c;在filter过滤框输入{ profiles.alias: 逆天子, profiles.channel: }&#xff0c;即可实现昵称和渠道多个嵌套字段过滤查询。 现有业务需求&#xff1a;用Java代码来查询…

Javaweb之SpringBootWeb案例之阿里云OSS服务集成的详细解析

2.3.3 集成 阿里云oss对象存储服务的准备工作以及入门程序我们都已经完成了&#xff0c;接下来我们就需要在案例当中集成oss对象存储服务&#xff0c;来存储和管理案例中上传的图片。 在新增员工的时候&#xff0c;上传员工的图像&#xff0c;而之所以需要上传员工的图像&…

web前端项目-动画特效【附源码】

文章目录 一&#xff1a;赛车游戏动画HTML源码&#xff1a;JS源码&#xff1a;CSS源码&#xff1a;&#xff08;1&#xff09;normalize.css&#xff08;2&#xff09;style.css 二&#xff1a;吉普车动画演示HTML源码&#xff1a;CSS源码&#xff1a;&#xff08;1&#xff09…

第十七讲_HarmonyOS应用开发Stage模型应用组件

HarmonyOS应用开发Stage模型应用组件 1. 应用级配置2. Module级配置3. Stage模型的组件3.1 AbilityStage3.1.1 AbilityStage的创建和配置3.1.2 AbilityStage的生命周期回调3.1.3 AbilityStage的事件回调&#xff1a; 3.2 UIAbility3.2.1 UIAbility生命周期3.2.3 UIAbility启动模…

信号的采样与驱动

文章目录 前言一、信号采样二、信号驱动总结 前言 在UVM验证过程中&#xff0c;有monitor和driver组件&#xff0c;分别用于收集信号和驱动信号&#xff0c;本文记录两个例子&#xff0c;用于理解信号的采样以及驱动的过程。 一、信号采样 示例如图所示&#xff0c;在哪个时钟…

区块空间----流动性铭文

铭文正在改变加密世界&#xff0c;越来越多的人开始关注铭文&#xff0c;并参与进来&#xff01;铭文赛道的未来是非常具有潜力和想象力的&#xff0c;甚至能够达到加密货币的普及水平。当然&#xff0c;这需要更多的基础设施更多的用例支持&#xff0c;但是一切都才刚刚开始。…

华为服务器RAID5

0、BIOS默认密码 TaiShan 100服务器BIOS系统的默认密码为 Huawei12#$ TaiShan 200服务器BIOS系统的默认密码为 Admin9000 1、服务器开机选择DEL,进行设置 2、选择设备管理器进入配置页面 3、选择AVAGO MegaRAID configuration utility 进入raid配置 4、选择 Main Menu 进入主…

Android P 背光机制流程分析

在android 9.0中&#xff0c;相比android 8.1而言&#xff0c;背光部分逻辑有较大的调整&#xff0c;这里就对android P背光机制进行完整的分析。 1.手动调节亮度 1.1.在SystemUI、Settings中手动调节 在界面(SystemUI)和Settings中拖动进度条调节亮度时&#xff0c;调节入口…