Redis中的Sentinel(六)

Sentinel

选举领头Sentinel.

当一个主服务器被判断为客观下线时,监视这个下线主服务器的各个Sentinel会进行协商,选举出一个领头Sentinel,并由领头
Sentinel对下线主服务器执行故障转移操作。以下是Redis选举领头Sentinel的规则和方法:

  • 1.所有在线的Sentinel都由被选为领头Sentinel的资格,换句话说,监视同一个主服务器的多个在线Sentinel中的任意一个都有可能成为领头Sentinel。
  • 2.每次进行领头Sentinel选举之后,不论选举是否成功,所有Sentinel的配置纪元(configuration epoch)的值都会自增一次。配置纪元实际上就是一个计数器,并没有什么特别的。
  • 3.在一个配置纪元里面,所有的Sentinel都有一次将某个Sentinel设置为局部领头Sentinel的机会,并且局部领头一旦设置,在这个配置纪元里面就不能再更改。
  • 4.每个发现主服务器进入客观下线的Sentinel都会要求其他Sentinel将自己设置为局部领头Sentinel
  • 5.当一个Sentinel(源Sentinel)向另一个Sentinel(目标Sentinel)发送SENTINEL is-master-down-by-addr命令,并且命令中的runid不是*符号而是源Sentinel的运行ID时,这表示源Sentinel要求目标Sentinel将前者设置为后者的局部领头Sentinel
  • 6.Sentinel设置局部林构图Sentinel的规则是先到先得:最先向目标Sentinel发送设置要求的源Sentinel将成为目标Sentinel的局部领头Sentinel,而之后接收到的所有设置要求都会被目标Sentinel拒绝
  • 7.目标Sentinel在接收到SENTINEL is-master-down-by-addr命令之后,将向源Sentinel返回一条命令回复,回复中的leader_runid参数和leader_epoch参数分别记录了目标Sentinel的局部领头Sentinel的运行ID和配置纪元
  • 8.源Sentinel在接收到目标Sentinel返回的命令回复之后,会检查回复中的leader_epoch参数的值和自己的配置纪元是否相同,如果相同的话,那么源Sentinel继续取出回复中的leader_runid参数,如果leader_runid参数的值和源Sentinel的运行ID一直,那么表示目标Sentinel将源Sentinel设置成了局部领头Sentinel
  • 9.如果有某个Sentinel被半数以上的Sentinel设置成了局部领头Sentinel,那么这个Sentinel成为领头Sentinel。举个例子,在一个由
    10个Sentinel组成的Sentinel系统里面,只要有大于等于10/2+16个Sentinel将某个Sentinel设置为局部领头Sentinel,那么被设置的那个Sentinel就会成为领头Sentinel
  • 10.因为领头Sentinel的产生需要半数以上Sentinel的支持,并且每个Sentinel在每个配置纪元里面只能设置一次局部领头Sentinel,所以在一个配置纪元里面,只会出现一个领头Sentinel
  • 11.如果在给定时限内,没有一个Sentinel被选举出领头Sentinel,那么各个Sentinel将在一段时间之后再次进行选举,直到选出领头
    Sentinel为止

例子

  • 举个例子。
    假设现在有三个Sentinel正在监视同一个主服务器,并且这三个Sentinel之前已经通过SENTINEL is-master-down-by-addr命令确认主服务器进入了客观下线状态,如图所示,那么为了选出领头Sentinel,三个Sentinel将再次向其他Sentinel 发送SENTINEL is-master-down-by-addr
    命令。如图所示。和检测客观下线状态时发送的SENTINEL is-master-down-by-addr命令不同,Sentinel这次发送的命令会带有Sentinel自己的运行ID,例如
SENTINEL is-master-down-by-addr 127.0.0.1 6379 0 a5bd47a1e569ed14567eca650de57f9d83301638

如果接收到这个命令的Sentinel还没有设置局部领头Sentinel的话,他就会将运行ID为a5bd47a1e569ed14567eca650de57f9d83301638的sentinel设置为自己的局部领头Sentinel,并返回类似以下的命令回复

1.1
2.a5bd47a1e569ed14567eca650de57f9d83301638
3.0

然后接收到命令回复的Sentinel就可以根据这一回复,统计出有多少个Sentinel将自己设置成了局部领头Sentinel.根据命令请求发送的先后顺序不同,可能会有某个Sentinel的SENTINEL is-master-down-by-addr命令比起其他Sentinel发送的相同命令都更快到达,并最终胜出领头Sentinel的选举,然后这个领头Sentinel就可以开始对主服务器执行故障转移操作了
在这里插入图片描述
在这里插入图片描述

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

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

相关文章

display grid 概要

display grid 概要 Grid 基本概念: 什么是 CSS Grid 布局? CSS Grid 布局是一个二维布局系统,允许开发者创建复杂的网格布局,这是一个在行和列上同时控制布局的方法。 Grid 布局与 Flexbox 有什么不同? 与 Flexbox 相比&#xff…

大日志精选案例四:某省级大数据集团日志审计优化实战解析

“在集团日常运营中,数据安全始终是我们关注的重点。过去,数据量大、处理速度慢,导致日志数据难以迅速获取和分析,影响业务决策。但自从引入聚铭大日志解决方案后,系统日志和用户行为数据都得到了高效处理与存储。该方…

如何创建虚拟环境打包py文件

Python 项目通常依赖于特定的库和版本。不同的项目可能依赖于相同库的不同版本,这可能导致冲突。使用虚拟环境,你可以为每个项目创建一个独立的 Python 环境,每个环境都有自己的库和版本,从而避免了依赖冲突。 采用虚拟环境打包P…

【工具】将类里的属性解析成属性描述的JSONArray数组

新建一个类&#xff0c;将类里的属性逐个解析出来&#xff0c;用一个json对象封装每一个属性的描述&#xff0c;展示上下级关系&#xff1b; maven依赖 <dependency><groupId>com.alibaba</groupId><artifactId>fastjson</artifactId><versi…

Nginx配置之localhost和反向代理

文章目录 第一步、查看安装位置和配置文件第二步、web服务器设置第三步、localhost 指令第四步、设置反向代理 清明假期&#xff0c;在家练习Nginx配置&#xff0c;在前期【 linux环境下安装配置nginx代理服务器】已经完成nginx环境搭建&#xff0c;本期主要实践web服务器&…

力扣刷题 102.二叉树的层序遍历

目录 题干 解题思路 总结与反思 题干 给你二叉树的根节点 root &#xff0c;返回其节点值的 层序遍历 。 &#xff08;即逐层地&#xff0c;从左到右访问所有节点&#xff09;。 示例 1&#xff1a; 输入&#xff1a;root [3,9,20,null,null,15,7] 输出&#xff1a;[[3],[9…

windows@命令行管理用户和用户组

文章目录 abstract命令行与用户管理一览这些命令的别名权限 创建新用户&#x1f60a;创建本地用户归入用户组(可选操作)Users组用户权限调整提升为管理员&#x1f60a; 查看用户属于哪些组FAQNew-LocalUser 执行报错 创建单个或少数用户的推荐做法创建大量测试用户的做法 补充查…

守护用户数据安全,共筑企业利益长城——遵循常州小程序安全防护指南

在数字化浪潮席卷各行各业的今天&#xff0c;小程序以其轻量化、便捷化的特点&#xff0c;成为连接企业和用户的桥梁&#xff0c;极大地提升了服务效率与用户体验。然而&#xff0c;随着用户数据价值日益凸显&#xff0c;小程序的安全防护工作显得尤为重要。常州小程序安全防护…

蓝桥杯练习题 —— 圆的面积(python)

# encoding utf-8 # 开发者&#xff1a;xxx # 开发时间&#xff1a; 21:45 # "Stay hungry&#xff0c;stay foolish." import math r int(input()) S math.pi*r*r print(format(S,".7f"))所用方法 format函数【四舍五入】 可以在print()打印处使用&…

闲鱼订阅监控/上新提醒

以前闲鱼推出过一款服务&#xff0c;叫做闲鱼助手&#xff0c;帮助用户快速显示最新发布的信息。当时我也开发过一款闲鱼助手的工具。 写一个闲鱼助手的助手工具_闲鱼助手源码-CSDN博客 但是时间并不是很长&#xff0c;该功能被取消了。 最近不知道闲鱼从哪个版本开始&#x…

如何在其他线程中安全地调用Unity的API?

前言 Unity的大部分API&#xff08;例如&#xff0c;与游戏对象交互&#xff0c;修改组件属性等&#xff09;都需要在主线程中调用。然而&#xff0c;有时你可能在另一个线程&#xff08;例如&#xff0c;网络请求&#xff0c;长时间运行的计算等&#xff09;中完成一些工作&am…

【LangChain学习之旅】—(15)工具和工具箱:LangChain中的Tool和Toolkits一览

【LangChain学习之旅】—(15)工具和工具箱:LangChain中的Tool和Toolkits一览 工具是代理的武器如何加载工具LangChain 支持的工具一览使用 arXiv 工具开发科研助理LangChain 中的工具箱一览使用 Gmail 工具箱开发个人助理工具是代理的武器 LangChain 之所以强大,第一是大模…

基于Python的自然语言的话题文本分类(V2.0),附源码

博主介绍&#xff1a;✌程序员徐师兄、7年大厂程序员经历。全网粉丝12w、csdn博客专家、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和毕业项目实战✌ &#x1f345;文末获取源码联系&#x1f345; &#x1f447;&#x1f3fb; 精彩专栏推荐订阅&#x1f447;…

具有温度系数(Temperature)的Softmax函数

Softmax 函数 softmax 函数是一种激活函数&#xff0c;通常用作神经网络最后一层的输出函数。该函数是两个以上变量的逻辑函数的推广。 Softmax 将实数向量作为输入&#xff0c;并将其归一化为概率分布。 softmax函数的输出是与输入具有相同维度的向量&#xff0c;每个元素的…

C语言程序与设计——指针地址与main函数

指针变量 在C语言中&#xff0c;最重要的就是对于指针和地址的理解&#xff0c;因为C语言是更接近底层的编程语言&#xff0c;所以它可以允许开发者对内存操作&#xff0c;这也是区别于其它编程语言的一个重要特性。 如何对内存进行操作呢。我们知道在编程过程中&#xff0c;在…

题目:学习使用external的用法。

题目&#xff1a;学习使用external的用法。 There is no nutrition in the blog content. After reading it, you will not only suffer from malnutrition, but also impotence. The blog content is all parallel goods. Those who are worried about being cheated should l…

JavaScript之闭包的实现原理和作用详解

闭包是JavaScript中强大而灵活的概念&#xff0c;它不仅可以解决作用域的问题&#xff0c;还能够实现函数式编程的一些特性。本文将详细解释JavaScript闭包的实现原理和作用&#xff0c;包括什么是闭包、闭包的实现原理、闭包的作用以及具体的代码示例。 1. 闭包的定义 闭包是指…

C++面试100问与自动驾驶100问

C的学习和面试其实是非常的不友好的&#xff0c;首先C的学习内容非常的多&#xff0c;其次C的面试不单单面试C的知识点&#xff0c;还有它的“七大姑八大姨”&#xff08;计算机网络、数据结构、算法、计算机组成原理、操作系统、编译、xxx的底层实现 and so on&#xff09;。 …

突破编程_前端_SVG(基础元素介绍)

1 rect 矩形 在 SVG 中&#xff0c;<rect> 元素用于创建圆形。 &#xff08;1&#xff09;基本语法 <rectx"x坐标"y"y坐标"width"宽度"height"高度"rx"可选&#xff1a;圆角x半径"ry"可选&#xff1a;圆角…

用可视化案例讲Rust编程5.用泛型和特性实现自适配绘制和颜色设置

上一节我们讲了用泛型实现返回结果&#xff0c;这一节我们来讲讲在函数签名里面使用泛型来对输入参数进行自适配。 先看UML设计图&#xff1a; 好吧&#xff0c;看起来有点复杂&#xff0c;我们一个个来解释。 首先定义的是一个生成绘图元素需要的参数结构,并且定义个特性&am…