哨兵模式--哨兵节点的功能?

哨兵节点的主要功能有:

  1. 集群监控:监控 主、从节点的健康状况;
  2. 自动切换主节点:当 Master 运行故障,哨兵启动自动故障恢复流程:从 slave 中选择一台作为新 master。
  3. 通知:让 slave 执行 replicaof,与新的 master 同步;并且通知客户端与新 master 建立连接。

集群监控

哨兵(Sentinel)会给 主、从节点 发送PING 命令:

  • 对于 主节点:如果当前哨兵 发送给主节点的PING命令,但主节点并未回复,就会被当前哨兵视为主观下线。如果哨兵集群中的多数哨兵(一般是超过一半)都认为主节点是 主观下线,则 主节点 会被视为客观下线
  • 对于 从节点:如果当前哨兵 发送给主节点的PING命令,但主节点并未回复,就会被当前哨兵视为主观下线

自动切换主节点(故障转移)

在集群监控中,如果 主节点 被视为 客观下线。就会触发 自动切换主节点。选举新的主节点 的条件是(按照如下顺序进行筛选):

  1. 健康状况:那些经常被标记为 主观下线的从节点,会被视为不健康,会被过滤掉;
  2. slave 优先级:每一个节点都会在配置文件中有一个优先级设置(slave-prority),优先级高的从节点 胜出;
  3. 比较 slave 与旧 master 复制进度的差距 offsetoffset值越大,表示从节点和主节点的数据越接近。(如 slave2 的 offset 为90, slave1 偏移量 为100。那么哨兵就会认为slave2的网络不佳,优先选择slave1为新的主节点)、
  4. runIDrunID是每个redis节点启动时随机生成的(按照其字典序比较大小),ID 号最小的从库得分最高,会被选为新主节点。

通知

选举完新主节点之后,还需要:

  1. 哨兵 将 新主节点的信息,发送给其他 从节点,让 slave 执行 replacaof 命令,和新「master 节点」建立连接,并进行数据复制;
  2. 哨兵 还需要将 新主节点信息 通知到所有的客户端,让客户端将读、写请求转移到 新的 master 节点。

补充

如何建立 哨兵 与 master节点、slave节点的通信?

  1. 配置哨兵节点的配置文件:首先,需要配置哨兵的配置文件(通常为sentinel.conf),指定主节点的IP地址、端口以及主节点的名称。
  2. 向master节点发送INFO指令:Sentinel启动后根据配置向Master发送 INFO 指令,获取并保存所有哨兵(Sentinel)状态,主节点(Master)和从节点(Slave)信息。此时,就建立了 哨兵 与 master节点、slave节点的通信信息了。

如何建立 哨兵 与 哨兵 之间的通信?

哨兵之间可以相互通信,主要归功于 Redis 的 pub/sub (发布/订阅)机制。具体步骤:

  1. 哨兵 与 master 节点 建立通信;
  2. 然后,就可以利用 Master 提供的发布/订阅机制,通过订阅Master的__sentinel__:hello频道,当自身节点启动或更新其状态时,重新发布自己的当前状态和信息(Name、IP、Port消息),同时订阅其他哨兵发布的Name、IP、Port消息。
  • 互相发现之后建立起了连接,后续的消息通信就可以直接进行交互

image

主从动态切换(故障转移)的具体流程

参考:详解Redis哨兵模式下,主节点掉线而重新选取主节点的流程 -阿里云开发者社区 (aliyun.com)

主要分为两部分:

  1. 哨兵集群中,选出一个节点作为leader;
  2. 由哨兵leader负责挑选出新的master节点;

哨兵集群选择leader

步骤:

  1. 哨兵集群中的每一个哨兵都会发起一个“拉票请求”。
  2. 收到这个拉票请求的 哨兵节点会 回复一个“投票响应”,有两种结果:投、不投;
  3. 一轮投票完成之后,得票数超过半数的哨兵节点将成为leader;
  4. 如果出现平票的情况,则重新再投一次票。【这也是建议哨兵节点数量设置为 奇数的原因:不容易产生平票的情况。】

img

注意:这里的投票逻辑是:Raft 算法的核心是 “先下手为强”,谁率先发出了拉票请求,谁就有更大的概率成为 leader。

img

哨兵leader挑选出新master节点

前 步是检测 当前主节点是否客观下线的。

  1. 检测当前主节点是否 主观下线:哨兵会定期向主节点和从节点发送PING命令进行心跳检测,以确保这些节点正常运行。如果哨兵在指定的时间内没有收到主节点或从节点的回复,它就会认为该节点主观下线(SDOWN)。

    具体:发送的内容:publish sentinel :hello,如果超时不响应则标记 主观下线(sdown)。超时时间配置 down-after-milliseconds

  2. 检测当前主节点是否 客观下线:当一个哨兵认为主节点主观下线后,它会询问其他哨兵节点,以确定这是否是一个共识。如果足够多的哨兵(一般为超过半数)认为主节点不可达,那么主节点将被标记为客观下线(ODOWN),并开始故障转移流程。

    询问其他哨兵节点时,发送的指令sentinel is-master-down-by-address-port

  3. 哨兵集群选择leader:当确定需要故障转移时,会先选举出一个 哨兵leader,来负责后续的新master节点选举的工作。

  4. 哨兵leader开始选举 新master节点:筛选条件依次如下

    1. 健康状况:那些经常被标记为 主观下线的从节点,会被视为不健康,会被过滤掉;
    2. slave 优先级:每一个节点都会在配置文件中有一个优先级设置(slave-prority),优先级高的从节点 胜出;
    3. 比较 slave 与旧 master 复制进度的差距 offsetoffset值越大,表示从节点和主节点的数据越接近。(如 slave2 的 offset 为90, slave1 偏移量 为100。那么哨兵就会认为slave2的网络不佳,优先选择slave1为新的主节点)、
    4. runIDrunID是每个redis节点启动时随机生成的(按照其字典序比较大小),ID 号最小的从库得分最高,会被选为新主节点。
  5. 信息通知:当选举出新master节点后,哨兵leader会将 ①新主节点 发送给 从节点;②将新主节点信息发送给客户端。

参考

Redis 高可用篇:你管这叫 Sentinel 哨兵集群原理 - Redis - SegmentFault 思否

高可用之战:Redis Sentinal(哨兵模式) - Hello-Brand - 博客园 (cnblogs.com)

redis哨兵模式的原理及部署 - misakivv - 博客园 (cnblogs.com)

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

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

相关文章

社交风潮塑造者:探索用户在Facebook的影响力

在当今数字化社会中,Facebook不仅是人们社交互动的主要平台,更是塑造社交风潮和文化趋势的重要力量。本文将从另一个角度深入探讨用户在Facebook上的影响力,探索其如何通过个人行为和互动,影响和改变社会的各个方面。 个人表达和内…

Cryptographic algorithms—(Green-Book)加密算法

Cryptographic algorithms—加密算法 9.2.3 加密算法9.2.3.1 概述9.2.3.2 哈希函数9.2.3.3 对称密钥算法9.2.3.3.1 概述9.2.3.3.2 加密和解密9.2.3.3.3 高级加密标准9.2.3.3.4 加密操作模式9.2.3.3.5 消息认证码9.2.3.3.6 密钥包装9.2.3.3.7 Galois/Counter Mode9.2.3.3.7.1 概…

探索AudioLM:音频生成技术的未来

目录 2. AudioLM的基础理论 2.1. 音频生成的基本概念 2.2. 语言模型在音频生成中的应用 2.3. 深度学习在音频生成中的作用 3. AudioLM的架构与实现 3.1. AudioLM的基本架构 3.1.1 编码器 3.1.2 解码器 3.1.3 生成模块 3.2. 训练过程 3.2.1 数据预处理 3.2.2 损失函…

工业视觉笔记代码---目录

工业视觉 一(1-28) 工业视觉需要时可抄的代码---持续更新 一(1-28) 目录 1、批量访问图片,等待键盘 1.2 批量访问图像(不用提前批量重命名)--访问文件夹底下所有同类型图像 1.2.1 单独只有批量访问的 1.3 批量访问图像(也是…

leetcode1985:找出数组中第k大整数中sorted的key=int用法

sorted(nums,keyint)[-k]中的keyint是: 使用 keyint,这通常意味着 nums 实际上可能包含字符串或其他可以转换为整数的数据类型,并且希望根据这些字符串或对象的整数值进行排序。 最后是从小到大,然后-k是从大到小第k个。

Python中相关软件安装

1. python安装 1.下载地址 https://www.python.org/downloads/2.选择安装版本 1. Anaconda安装 安装地址 -- 清华大学镜像站点 https://mirrors.tuna.tsinghua.edu.cn/anaconda/archive/查看anaconda是否安装成功 2.conda安装好后,将镜像源修改为清华大学的镜像…

Vue.js的V-show什么意思

在 Vue.js 中,v-show 是一个指令,它用于根据条件切换元素的 CSS 属性 display。具体来说,当 v-show 的条件为 true 时,元素会被设置为 display: block(或其他相关的值,比如 inline、inline-block 等&#x…

音频Balance源码总结

音频Balance源码总结 何为音频Balance? 顾名思义,Balance及平衡,平衡也就是涉及多方,音频左右甚至四通道,调节所有通道的音量比,使用户在空间内听到各个通道的音频大小不一,好似置身于真实环境…

vue 组件批量删除

element ui table表格中前面这个勾选框 对应 type"selection" 属性,绑定事件时selection-change,当你勾选全面的框时就会触发selection-change 对应的事件 绑定事件里面这样定义方法时,这个val 就是选中的时候那一行的数据,如下图…

CPS 网络术语

CPS(Cost Per Sale)是一种常见的网络营销模式,又称为按销售付费模式。这种模式通过支付佣金来激励推广者帮助商家销售产品或服务。 CPS营销模式主要应用在电子商务、旅游、教育等行业。以下是对CPS营销模式的详细解析: 1.…

一文帮你解决FP独立站引流难题

相信很多FP独立站商家都深受网站流量低推广难的困扰,想用通常的SEO、社交媒体运营等方式来引流吧,又容易审核不通过,就算能侥幸通过,在Facebook、X(原Twitter)、INS等社交软件上打广告来引流,万…

【数据分享】《中国县城建设统计年鉴》2015-2022

而今天要免费分享的数据就是2015-2022年间出版的《中国县城建设统计年鉴》并以多格式提供免费下载。(无需分享朋友圈即可获取) 数据介绍 在中国快速城镇化的进程中,县城作为连接城市与乡村的重要节点,其建设与发展受到了广泛关注…

breakcontinue(Python)

文章目录 一、break二、continue 一、break 当某一条件满足时&#xff0c;不再执行循环体后续步骤&#xff0c;直接退出循环 i 0 while i < 100:print(i)if i 10:breaki 1二、continue 当某一条件满足时&#xff0c;不再执行本次循环体中重复的代码&#xff0c;但进入…

高性价比 ESP32 网络收音机:OLED 显示+编码器控制 (源码开源)

摘要: 本文将详细介绍如何使用 ESP32 开发板制作一个功能完备的网络收音机。我们将涵盖硬件选择、软件架构、网络连接、音频流解码、用户界面设计等方面&#xff0c;并提供完整的代码示例和详细的解释&#xff0c;帮助您轻松构建自己的网络收音机。 关键词: ESP32, 网络收音机…

Scikit-Learn的认识

Scikit-Learn (sklearn) 简介 Scikit-Learn&#xff0c;通常简称为 sklearn&#xff0c;是一个基于 Python 的机器学习库。它建立在 NumPy、SciPy 和 Matplotlib 之上&#xff0c;提供了一系列简单高效的工具&#xff0c;用于数据分析和建模。Scikit-Learn 的目标是简单易用&a…

免交互和嵌入执行模式

目录 概念 语法格式 统计行数 赋值变量 修改密码​编辑往文件里添加内容 ​编辑​编辑引入变量 整体赋值​编辑 加引号不赋值变量 expect实现免交互 免交互设置密码 免交互切换用户 嵌入执行模式 添加用户并免交互设置密码 免交互登录 传参实现ssh 练习 概念 …

梦想CAD二次开发

1.mxdraw简介 mxdraw是一个HTML5 Canvas JavaScript框架&#xff0c;它在THREE.js的基础上扩展开发&#xff0c;为用户提供了一套在前端绘图更为方便&#xff0c;快捷&#xff0c;高效率的解决方案&#xff0c;mxdraw的实质为一个前端二维绘图平台。你可以使用mxdraw在画布上绘…

使用Token管理用户session

起因&#xff1a;单点登录问题&#xff0c;登录时访问的是tomcat1&#xff0c;访问获取用户数据时访问的是tomcat2&#xff0c;而用户的session信息在tomcat1上存储&#xff0c;tomcat2并不知道该用户来过&#xff0c;所以在获取个人信息时从session中获取不到数据&#xff0c;…

Django 日志配置解析

在 Django 中设置和使用日志是一个有效的方式来监控和调试应用程序。日志可以帮助你理解应用的运行状态&#xff0c;记录错误信息&#xff0c;以及跟踪重要的系统事件。Django 使用 Python 的标准 logging 模块来配置和管理日志。 目录 配置日志写日志日志中间件日志配置与日志…

复盘|接口自动化测试框架建设的经验与教训

为什么选择这个话题&#xff1f; 一是发现很多“点工”在转型迷茫期都会问一些自动化测试相关的问题&#xff0c;可以说自动化测试是“点工”升级的必经之路&#xff1b;二是Google一下接口自动化测试&#xff0c;你会发现很多自动化测试框架相关的文章&#xff0c;但是大部分…