redis哨兵监控leader和master选举原理

news2024/11/18 1:32:07

当一个主从配置中的master失效后,sentinel可以选举出一个新的master,用于自动接替原master的工作,主从配置中的其他redis服务器自动指向新的master同步数据。是如何具体做的呢,主要有以下4步。
一般建议sentinel 采取奇数台.

1.SDown 主观下线(Subjectively Down)

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

2.ODown 主观下线(Objectively Down)

ODown 客观不可用,ODown需要一定数量的sentinel。多个sentinel 达成一致意见(master不可用),才能认为master客观上已经宕机。

3.选举sentinel(leader)

当主节点被认为客观下线以后,各个哨兵会进行协商,先选举出一个sentinel,并由seneitnel进行故障转移(failover)

3.1sentinel.log解释过程

//6379 客观下线
+sdown master mymaster 192.168.8.170 6379
//6379 主观下线
+odown master mymaster 192.168.8.170 6379 #quorum 2/2
// 开始选举
+new-epoch 20
// 尝试故障转移
+try-failover master mymaster 192.168.8.170 6379
Sentinel new configuration saved on disk
// sentinel 投票选择一个sentienl,由sentinel 进行故障转移
+vote-for-leader aea80c02b08119887d4291d9363deef140642060 20

cc67a7ca194afb25553c515f8afb4afe90d9023e voted for aea80c02b08119887d4291d9363deef140642060 20

93cb0306c9539a801a8f22f8ce9cdbfd081701b2 voted for aea80c02b08119887d4291d9363deef140642060 20

// 选举新master 开始
+elected-leader master mymaster 192.168.8.170 6379
// 故障转移
+failover-state-select-slave master mymaster 192.168.8.170 6379
// 选择一个从节点作为master
+selected-slave slave 192.168.8.186:6381 192.168.8.186 6381 @ mymaster 192.168.8.170 6379
// 故障转移到 192.168.8.186:6381
+failover-state-send-slaveof-noone slave 192.168.8.186:6381 192.168.8.186 6381 @ mymaster 192.168.8.170 6379
+failover-state-wait-promotion slave 192.168.8.186:6381 192.168.8.186 6381 @ mymaster 192.168.8.170 6379
...
//保存配置文件
Sentinel new configuration saved on disk
//故障转移结束
+failover-end master mymaster 192.168.8.170 6379
// 切换master
+switch-master mymaster 192.168.8.170 6379 192.168.8.186 6381
//为新master 配置从节点
+slave slave 192.168.8.170:6379 192.168.8.170 6379 @ mymaster 192.168.8.186 6381

3.2上面提到过当master 下线后,各个sentinel会协商,选出一个sentinel 来进行故障转移,那这个sentinel 是如何选出来的呢?

raft算法
在这里插入图片描述
监视该主节点的所有哨兵都有可能被选为领导者,选举使用的算法是Raft算法,Raft算法的基本思路是先到先得,即:
在一轮选举中,哨兵A向哨兵B发送称为领导者申请,如果哨兵B 没有同意过其他哨兵,则会同意A
称为领导者。
对应的日志为:

+vote-for-leader 哨兵A 20
哨兵B voted for 哨兵B 20
哨兵C voted for 哨兵A 20

4.上面提到用ratf算法选出一个sentinel,由这个sentinel 选出master进行故障转移,那是如何选出master的呢?

主要分为3步

  1. 新主登基

    选出新的master的规则,剩余节点健康的前提下。
    first
    	优先级比较:优先级高的则被选为master
    	在conf配置文件中,replica-proority 来设置,数字越小,优先级越高。
    sencond
    	偏移量比较:如果优先级一样,则选择偏移量最大最大的
    third
    RunID比较:如果优先级,偏移量都一致,则比较RunID,则选择RunId小的
    
  2. 群臣俯首
    一朝天子一天臣
    sentinel leader会对选出的新的master执行slave no one操作, 将其提升为master节点
    sentinel leader向其他slave 发送命令,让剩余的slave称为新节点的slave

  3. 旧主拜服
    老master会来也要服
    当老master重新上线后,他会成为新master的slave
    sentinel leader会将老master降级为slave并恢复正常工作。

补充

故障转移操作均由sentinel自己独立完成,无需人工干预。

使用哨兵模式的建议

1.哨兵节点的数量为多个且为奇数,哨兵本身应该集群,保证高可用
2.各个哨兵节点的配置应该一致(比如 监控的master)
3.哨兵集群+主从复制 并不能保证数据不丢失

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

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

相关文章

Day43【动态规划】1049.最后一块石头的重量 II、494.目标和、474.一和零

1049.最后一块石头的重量 II 力扣题目链接/文章讲解 视频讲解 还是需要转化为 0-1 背包问题:物品装入背包,求装入的最大价值(每个物品至多装入一次) 要把01背包问题套到本题上来,需要确定 背包容量物品价值物品重…

分布式消息中间件RocketMQ的应用

RocketMQ 应用 所有代码同步至GitCode:https://gitcode.net/ruozhuliufeng/test-rocketmq.git 普通消息 消息发送分类 ​ Producer对于消息的发送方式也有多种选择,不同的方式会产生不同的系统效果。 同步发送消息 ​ 同步发送消息是指,P…

Win11或Win10重置电脑提示“找不到恢复环境”

想要重置电脑缺提示找不到恢复环境 查看是否开启功能 按住“winx”选A管理员运行终端,输入reagentc /info。 如果信息结果如下: Windows RE 状态: DisabledWindows RE 位置:引导配置数据(BCD)标识符: cedd8faa-707a-11ed-ad72-a8056da9f4d6…

头歌计算机组成原理实验—运算器设计(3)第3关:4位快速加法器设计

第3关:4位快速加法器设计 实验目的 帮助学生掌握快速加法器中先行进位的原理,能利用相关知识设计4位先行进位电路,并利用设计的4位先行进位电路构造4位快速加法器,能分析对应电路的时间延迟。 视频讲解 实验内容 利用前一步设…

Learning C++ No.23【红黑树封装set和map】

引言 北京时间:2023/5/17/22:19,不知道是以前学的不够扎实,还是很久没有学习相关知识,对有的知识可以说是遗忘了许多,以该篇博客有关知识为例,我发现我对迭代器和模板的有关知识的理解还不够透彻&#xff…

音视频源码调试前准备vs2019+qt5.15.2搭建可调试环境

安装vs2019qt,并且在windows环境上安装ffmpeg,尝试使用qtcdb进行调试,尝试使用vs2019加载qt的程序。 安装VS20195.12.2qt环境,并进行测试。 1:安装Visual Studio 2019, a.从官网下载,或者vs2019社区版本下载地址 ht…

SNAP软件处理Sentinel-2 L2A数据为hdr或者tif文件

1.打开Sen2Cor插件处理好的或者下载好的L2A文件 若不知道如何将下载的L1C数据处理为L2A级数据可查看该篇博文 Sentinel-2数据下载及处理_dropoutgirl的博客-CSDN博客 在Bands文件夹下少了B10波段栅格文件: 这主要是因为波段10是卷云波段,需要的大气顶部&#xff0…

顺序表之线性表(难度:✨)

1.线性表 线性表呈现出一条线性,用指针把一块一块的内存连接起来。 其余还有树型结构,哈希结构,图结构。 线性表分为: 顺序表链表栈队列字符串 1.2顺序表 顺序表就是数组,但在数组的基础上,从头开始存。…

地下车库CO传感器报警系统

前言 在现代城市中,地下车库已经成为了不可或缺的交通设施。然而,在地下车库中,由于车辆尾气等因素,很容易出现CO中毒的风险,给车库内的人员带来威胁。本文将对地下车库CO传感器报警系统进行介绍和分析,包…

21级计科专业计算机组成原理实验考试(体验)

在使用VC6.0软件时,为了进入调试模式,需要先点击【Build】,再点击( ) A. BuildExecute B. Go C. Execute D. Compile 在使用VC6.0软件进入调试模式后,点击【View】→【Debug Windows】后的( &…

Shell脚本常见用法列举

前言 最近在复习shell脚本的相关知识,本文列举了一些在shell脚本中用得到的一些基础语法。 1:打印常见内部变量和环境变量值 shell中常用变量介绍 $0脚本名$n第n个参数,n1,2,3...$*所有参数列表(视为一个整体,不包…

chatgpt赋能Python-python3人脸识别

人脸识别的python3应用:一步步实现高精度的面部识别 Python3作为一种高效的编程语言,具有广泛的应用场景。近年来,人脸识别技术在安防、金融、医疗等领域中逐渐普及,运用Python3进行人脸识别具有巨大的潜力。本文将介绍如何使用P…

React学习笔记四-state

此文章是本人在学习React的时候,写下的学习笔记,在此纪录和分享。此为第四篇,主要介绍react中的state。 1.state(状态) 1.1state简介 存在state(状态)的组件称为复杂组件,反之称为简单组件。 何为状态呢…

TCL表达式

目录 操作数 运算符和优先级 数学函数 操作数 TCL 表达式的操作数通常是整数或实数。整数一般是十进制的, 但如果整数的第一个字符是 0(zero),那么 TCL 将把这个整数看作八进制的,如果前两个字符是 0x 则这个整数被看作是十 六进制的。TC…

I2C项目问题总结

1、项目里面用到哪些接口?都是怎么用的? 项目里面用到了rkv_i2c_if、lvc_i2c_if、lvc_apb_if。rkv_i2c_if用来将DUT内部的intr中断信号、debug信号、ic_en使能信号、i2c和apb的时钟复位信号引出,在接口中声明了一个大位宽信号用来表示intr中…

分布式消息中间件RocketMQ的工作原理

RocketMQ 工作原理 消息的生产 消息的生产过程 ​ Producer可以将消息写入到某Broker中的某Queue中,其经历了如下过程: Producer发送消息之前,会先向NameServer发出获取消息Topic的路由信息的请求NameServer返回该Topic的路由表及Broker列…

kubernetes yaml文件|--dry-run导出yaml文件

kubernetes yaml文件|--dry-run导出yaml文件 YAML 语法格式:二 查看 api 资源版本标签三 写一个nignx.yaml文件demo四、编写service服务的资源清单详解k8s中的port五 用–dry-run命令生成yaml资源清单六 将现有的资源生成模板导出写yaml太累怎么办? YAML…

关于FLAME和SMPL模型

英文参考文献:https://medium.com/offnote-labs/3d-face-and-body-reconstruction-95f59ada1040 一个训练好的FLAME模型的输入是一个参数向量,包括形状参数、姿势参数和表情参数。这些参数分别控制人脸的身份特征、头部的旋转和平移、面部的表情变化。一…

算法设计与分析:线性规划问题和单纯形算法(作业-必做)(头歌实验)

第1关:单纯性算法解一般线性方程组 任务描述 本关任务:编写一个利用两阶段单纯性算法求一般线性规划的程序。 相关知识 单纯形算法的第1步:选出使目标函数增加的非基本变量作为入基变量。 查看单纯形表的第 1 行(也称之为z行…

UnityVR--Managers--对象池1

本篇中使用的API&#xff1a;gameObject.CompareTag("标签")、UnityEvent()事件管理、ObjectPool<GameObject>&#xff08;&#xff09;对象池 参照unity官方教程&#xff1a;Hi ObjectPool 目录 1. 应用场景 2. 对象池的原理 3. 查看资源消耗情况 4. 不使用…