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. 哨兵集群+主从复制,并不能保证数据零丢失

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

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

相关文章

Java 基础知识-File类

大家好我是苏麟 , 今天聊聊File . 资料来自黑马程序员 File类 java.io.File 类是文件和目录路径名的抽象表示&#xff0c;主要用于文件和目录的创建、查找和删除等操作。 构造方法 public File(String pathname) &#xff1a;通过将给定的路径名字符串转换为抽象路径名来创建…

盘古信息IMS OS 数垒制造操作系统+ 产品及生态部正式营运

启新址吉祥如意&#xff0c;登高楼再谱新篇。2024年1月22日&#xff0c;广东盘古信息科技股份有限公司新办公楼层正式投入使用并举行了揭牌仪式&#xff0c;以崭新的面貌、奋进的姿态开启全新篇章。 盘古信息总部位于东莞市南信产业园&#xff0c;现根据公司战略发展需求、赋能…

【双目】基于findChessboardCorners的双目精度评估,可以直接使用

1. 基于findChessboardCorners的双目精度评估 原理&#xff1a; 代码&#xff1a; #include <iostream> #include <opencv2/opencv.hpp>using namespace std; using namespace cv;int main() {// 加载图像auto srcimage imread("/home/oem/data/steroe_p…

Hadoop增加新节点环境配置(自用)

完成Hadoop集群增添一个新的节点配置&#xff08;文中命名为&#xff09;Hadoop106&#xff0c;没有进行继续为该节点分配身份职能的步骤 1.在VMware中安装CentOS 7 新建虚拟机 1.⾸先我们创建⼀个新的虚拟机&#xff0c;也可以点⽂件-新建虚拟机。 2.选择⾃定义&#xff0c…

网页元素圈选

从前面我们已验证配置自动化是可行的&#xff0c;接下来就实现元素选择&#xff0c;当然有了配置化&#xff0c;我们也是可以通过浏览器F12的调试工具去把元素xpath复制出来&#xff08;ps:反正又不是不能用&#xff09;&#xff0c;但是这不是我们最终目的。 其实圈选效果如下…

CSS3如何实现从右往左布局的按钮组(固定间距)

可以通过下方CSS实现&#xff0c;下面的CSS表示按钮从右往左布局&#xff0c;且间距为10px: .right-btn {position: relative;float: right;margin-right: 10px; }类似这种&#xff1a; 这种&#xff1a; 注意&#xff1a; 不能使用right:10px代替margin-right:10px&#x…

聚醚醚酮(Polyether Ether Ketone)PEEK主要应用于哪些行业领域?

聚醚醚酮&#xff08;Polyether Ether Ketone&#xff0c;PEEK&#xff09;广泛应用于以下行业&#xff1a; 1.航空航天业&#xff1a; PEEK常被用于制造航空航天组件&#xff0c;如飞机零部件、航天器构件&#xff0c;因其轻量化、高强度和耐高温性能。 2.汽车工业&#xff1…

滑木块H5小游戏

欢迎来到程序小院 滑木块 玩法&#xff1a;点击木块横着的只能左右移动&#xff0c;竖着的只能上下移动&#xff0c; 移动到箭头的位置即过关&#xff0c;不同关卡不同的木块摆放&#xff0c;快去滑木块吧^^。开始游戏https://www.ormcc.com/play/gameStart/260 html <can…

Django项目搭建

一、创建项目 在命令行中执行代码 $ django-admin startproject mysitedjango-admin 为内部命令startproject 为参数mysite 项目名 备注 避免使用 Python 或 Django 的内部保留字来命名项目。比如说&#xff0c;避免使用像 django (会和 Django 自己产生冲突)或 test (会和 P…

深入浅出 diffusion(3):pytorch 实现 diffusion 中的 U-Net

导入python包 import mathimport torch import torch.nn as nn import torch.nn.functional as F silu激活函数 class SiLU(nn.Module): # SiLU激活函数staticmethoddef forward(x):return x * torch.sigmoid(x) 归一化设置 def get_norm(norm, num_channels, num_groups)…

Java集合-Map接口(key-value)

Map接口的特点&#xff1a;①KV键值对方式存储②Key键唯一&#xff0c;Value允许重复③无序。 Map有四个实现类&#xff1a;1.HashMap类2.LinkedHashMap类3.TreeMap类4.Hashtable类 1.HashMap类&#xff1a; 存储结构&#xff1a;哈希表 数组Node[ ] 链表&#xff08;红黑…

暴力破解

暴力破解工具使用汇总 1.查看密码加密方式 在线网站&#xff1a;https://cmd5.com/ http://www.158566.com/ https://encode.chahuo.com/kali&#xff1a;hash-identifier2.hydra 用于各种服务的账号密码爆破&#xff1a;FTP/Mysql/SSH/RDP...常用参数 -l name 指定破解登录…

BUUCTF--xor1

这题考察的是亦或。查壳&#xff1a; 无壳。看下IDA的流程&#xff1a; 我们看到将用户输入做一个异或操作&#xff0c;然后和一个变量做比较。如果相同则输出Success。这里的知识点就是两次异或会输出原文。因此我们只需要把global再做一次异或就能解出flag。在IDA中按住shift…

Excel 2019 for Mac/Win:商务数据分析与处理的终极工具

在当今快节奏的商业环境中&#xff0c;数据分析已经成为一项至关重要的技能。从市场趋势预测到财务报告&#xff0c;再到项目管理&#xff0c;数据无处不在。而作为数据分析的基石&#xff0c;Microsoft Excel 2019 for Mac/Win正是一个强大的工具&#xff0c;帮助用户高效地处…

鸿蒙HarmonyOS获取GPS精确位置信息

参考官方文档 #1.初始化时获取经纬度信息 aboutToAppear() {this.getLocation() } async getLocation () {try {const result await geoLocationManager.getCurrentLocation()AlertDialog.show({message: JSON.stringify(result)})}catch (error) {AlertDialog.show({message…

RabbitMQ 笔记二

1.Spring 整合RabbitMQ 生产者消费者 创建生产者工程添加依赖配置整合编写代码发送消息 创建消费者工程添加依赖配置整合编写消息监听器 2.创建工程RabbitMQ Producers spring-rabbitmq-producers <?xml version"1.0" encoding"UTF-8"?> <pr…

[TCP协议]基于TCP协议的字典服务器

目录 1.TCP协议简介: 2.TCP协议在Java中封装的类以及方法 3.字典服务器 3.1服务器代码: 3.2客户端代码: 1.TCP协议简介: TCP协议是一种有连接,面向字节流,全双工,可靠的网络通信协议.它相对于UDP协议来说有以下几点好处: 1.它是可靠传输,相比于UDP协议,传输的数据更加可靠…

两个近期的计算机领域国际学术会议(软件工程、计算机安全):欢迎投稿

近期&#xff0c;受邀担任两个国际学术会议的Special session共同主席及程序委员会成员&#xff08;TPC member&#xff09;&#xff0c;欢迎广大学界同行踊跃投稿&#xff0c;分享最新研究成果。期待这个夏天能够在夏威夷檀香山或者加利福尼亚圣荷西与各位学者深入交流。 SERA…

深度学习-搭建Colab环境

Google Colab(Colaboratory) 是一个免费的云端环境&#xff0c;旨在帮助开发者和研究人员轻松进行机器学习和数据科学工作。它提供了许多优势&#xff0c;使得编写、执行和共享代码变得更加简单和高效。Colab 在云端提供了预配置的环境&#xff0c;可以直接开始编写代码&#x…

React中使用LazyBuilder实现页面懒加载方法二

前言&#xff1a; 在一个表格中&#xff0c;需要展示100条数据&#xff0c;当每条数据里面需要承载的内容很多&#xff0c;需要渲染的元素也很多的时候&#xff0c;容易造成页面加载的速度很慢&#xff0c;不能给用户提供很好的体验时&#xff0c;懒加载是优化页面加载速度的方…