【Redis分析】(二) Sentinel

news2024/12/25 23:43:58

哨兵 - 高可用

哨兵(Sentinel) 是 Redis 的高可用性解决方案:由一个或多个 Sentinel 实例组成的 Sentinel 系统可以监视任意多个主服务器,以及这些主服务器属下的所有从服务器。

Sentinel 可以在被监视的主服务器进入下线状态时,自动将下线主服务器的某个从服务器升级为新的主服务器,然后由新的主服务器代替已下线的主服务器继续处理命令请求。

Sentinel 的作用总结:

  1. 监控
  2. 故障转移: Redis Master 下线时, 自动选举新的 Master
  3. 通知: 使用 Sentinel 时, 客户端通过 Sentinel 获得 Redis 服务器地址, Sentinel 会自动通知最新的 Master 连接信息给客户端;

检查主观下线状态

默认情况下,Sentinel 会以每秒一次的频率向所有与它创建了连接的实例(包括主服务器、从服务器、其他 Sentinel 在内的所有机器)发送 PING 命令来判断实例是否在线。

如果一个实例在 down-after-miliseconds 毫秒内,连续向 Sentinel 返回无效回复,那么 Sentinel 会标记这个实例已经进入主观下线状态。

检查客观下线状态

当 Sentinel 将一个主服务器判断为主观下线之后,为了确定这个主服务器是否真的下线了,它会向同样监视这一服务器的其他 Sentinel 进行询问,看它们是否也认为主服务器已经进入了下线状态(可以是主观下线或者客观下线)。

当 Sentinel 从其他 Sentinel 那里接收到 quorum 个已下线判断之后,Sentinel 就会将服务器置为客观下线,在 flags 上打上 SRI_O_DOWN 标识,并对主服务器执行故障转移操作。

对于每个 Redis 结点, quorum 是独立配置的; 不同的结点 quorum 可以不同;

故障转移

当哨兵监测到某个主节点客观下线之后 (从节点下线不会干啥) ,就会开始故障转移流程。核心流程如下:

  1. 发起一次选举,选举出领头 Sentinel, 由领头哨兵去触发故障转移;

  2. 需要超过半数个的哨兵授权, 才能真正进行故障转移; 并且, Sentinel 结点的数量是固定的, 假设本来有 5 个 Sentinel结点, 现在有三个掉线了, 那么永远都无法获得超过半数的授权, 永远都无法故障转移;

  3. 根据 Redis 官方文档, quorum 仅用来判断客观下线状态, 如果要执行故障转移, 需要超过半数的 Sentinel 结点投票同意; 这也是为什么建议 Sentinel 结点数量 >= 3; 后面会再详细介绍这个问题;

    High availability with Redis Sentinel | Docs

  4. 领头 Sentinel 在已下线主服务器的所有从服务器里面,选举一个从服务器,并将其升级为新的主服务器, 会将新的配置写到配置文件里。

    1. slave 结点会有优先级配置, 越小优先级越高, 0 代表没有被选举权
    2. 优先级相同, 选主从同步的 offset 最大的(说明和上一任主机最接近)
    3. 还相同, 选 id 小的;
  5. 领头 Sentinel 将剩余的所有从服务器改为复制新的主服务器, 会将这个配置写到配置文件里。

  6. 领头 Sentinel 更新相关配置信息,当这个旧的主服务器重新上线时,将其设置为新的主服务器的从服务器。

选举新主节点的方法和选举领头 Sentinel 的方法非常相似,两者都是基于 Raft 算法的领头选举(leader election)方法来实现的。

Raft, 总结一句话 : 少数服从多数, 先到先得;

至少3个哨兵

图中, M是主节点, R是从节点, S是哨兵, C是客户端; quorum 配置为 1;

如果M1和S1下线, 那么剩下的一个哨兵有权判断客观下线, 但无权执行故障转移(因为要超过半数同意);

并且, 如果只是两台机器之间的通信断开, 并未真正下线, 那么两边都可以认为自己是主机, 所以不要这样做;

脑裂问题

脑裂是指哨兵系统中的一个主节点没有下线, 只是和从节点之间的网络断开了, 从节点被选举为新的主节点, 从而出现了多个主节点;

M1和从节点的连接断开后(没有下线), S2 和 S3 有权做故障转移, 假设M2被选举为主节点; 同时C1在往M1写入新的数据;

M1和其余两个结点的连接重新建立后, M1被设置为M2的从节点, 进行主从复制(会先清空M1原本的数据), 造成M1的数据丢失

预防数据丢失:

min-replicas-to-write 1
min-replicas-max-lag 10

当一个主节点(例如上例中的M1) 超过 max-lag 秒无法写入至少 1 个从节点时, 他将拒绝接收客户端新的写入请求;

但是, 这样又有新的问题, 如果是所有从节点下线了, 主节点就会停止工作, 即使主节点可以单机正常工作;

所以, Sentinel 并没有完全解决脑裂问题; 是一种权衡, 在可用性, 数据一致性上的权衡;

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

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

相关文章

mysql windows安装与远程连接配置

安装包在主页资源中 一、安装(此安装教程为“mysql-installer-community-5.7.41.0.msi”安装教程,安装到win10环境) 保持默认选项,点击”Next“。 点开第一行加号展开一路展开找到“MySQL Server 5,7,41 - X64”点击选中点击一下中间只想右侧的箭头看到…

encoding with ‘idna‘ codec failed (UnicodeError: label empty or too long)

今天在使用Flask连接mysql的时候,遇到了一个报错:encoding with ‘idna’ codec failed (UnicodeError: label empty or too long) 网上查了一下说是字符集的问题,然后尝试修改了一下字符集,结果还是不行。 最后去翻阅SQLAlchemy…

AI时代的学术写作:Kimi如何助力文献综述?

在学术研究的浩瀚海洋中,文献综述无疑是探索知识边界的重要工具。它不仅是对现有研究的梳理,更是对未来研究方向的指引。然而,撰写一篇高质量的文献综述并非易事,它要求研究者具备广泛的文献检索能力、深刻的分析批判能力以及严谨…

基于springboot的城市垃圾分类管理系统--论文pf

TOC springboot487基于springboot的城市垃圾分类管理系统--论文pf 绪论 1.1 研究背景 当前社会各行业领域竞争压力非常大,随着当前时代的信息化,科学化发展,让社会各行业领域都争相使用新的信息技术,对行业内的各种相关数据进…

Spring发送邮件性能优化?如何集成发邮件?

Spring发送邮件安全性探讨!Spring发送邮件功能有哪些? 邮件发送的性能逐渐成为影响用户体验的重要因素之一。AokSend将探讨如何在Spring框架中进行Spring发送邮件的性能优化,确保系统能够高效、稳定地处理大量邮件请求。 Spring发送邮件&am…

《机器学习》KNN算法搭配OpenCV训练模型、识别图片 No.2

一、使用KNN算法识别数字 1、明确目的: 有一张图片,其中有一份数据,其中共有0-9的不同写法的数字,共5000条,现在想要对这张图片中的数据进行训练,以完成当输入一张图片,图片内为手写的数字&…

MaxKB(三):通过修改代码去掉社区版限制

由于社区版对创建用户、创建应用、创建知识库等功能有数量显示,既然咱们都有源码了,那限制能否解除呢,经过尝试是可以的。 首选源代码需要能运行起来,具体见《MaxKB(二):Ubuntu24.04搭建maxkb开…

暑假算法刷题日记 Day 10

目录 重点整理 054、 拼数 题目描述 输入格式 输出格式 输入输出样例 核心思路 代码 055、 求第k小的数 题目描述 输入格式 输出格式 输入输出样例 核心思路 代码 总结 这几天我们主要刷了洛谷上排序算法对应的一些题目,相对来说比较简单 一共是13道…

数据埋点系列 18| 数据驱动产品开发:用洞察力塑造卓越产品

在当今竞争激烈的市场中,数据驱动的产品开发已成为创造成功产品的关键。通过利用数据洞察,公司可以更准确地了解用户需求,做出更明智的产品决策,并持续优化产品性能。本文将探讨如何在产品开发的各个阶段应用数据驱动方法。 目录…

python发邮件

1. SMTP(简单邮件传输协议)基础 SMTP 协议概述 SMTP(Simple Mail Transfer Protocol,简单邮件传输协议)是用于在计算机网络上传输电子邮件的标准通信协议。它定义了发送邮件的基本规则和流程,确保邮件从发…

开源前端埋点监控插件Web-Tracing

Web-Tracing是一款专为前端项目设计的前端监控插件,它基于JavaScript设计,兼容跨平台使用,并提供了全方位的监控功能。 开源地址:https://gitee.com/junluoyu/web-tracing-analysis 以下是关于Web-Tracing的详细介绍:…

李沐:创业一年,人间三年

大家好,我是 Bob! 😊 一个想和大家慢慢变富的 AI 程序员💸 分享 AI 前沿技术、项目经验、面试技巧! 欢迎关注我,一起探索,一起破圈!💪 李沐:创业一年,人间三年 前不久&am…

【项目】Java文档搜索引擎测试报告

一、项目背景 随着Java技术的不断发展和广泛应用,Java开发者对于API文档的需求日益增加。高质量的API文档不仅能帮助开发者快速了解和掌握各种类、接口、方法等的功能与用法,还能显著提升开发效率。然而,在面对庞大的API文档集时&#xff0c…

爱心公益,向阳而生 ——共同家园 “向阳计划“温暖启航

“向阳计划”由大湾区共同家园线上运营建设共同家园社区公益团队。在这个快节奏的时代,总有一份温暖,能穿透喧嚣,照亮人心。今天,共同家园社区我们满怀激动与期待,正式推出“向阳计划”——一项旨在汇聚社会各界爱心力量,共同为需要帮助的人群送去光明与希望的公益行动。我们共…

鸿蒙 点击获取电话号拨打电话 @ohos.telephony.call (拨打电话)

1, 先看看效果 2, 直接CV 代码 import call from ohos.telephony.callEntry Component struct Index {Statephoto: string 15517189270build() {Column() {Row() {Text(this.photo)Image($r(app.media.ic_contacts_incoming_filled)).width(30).height(30).fillColor(Color.Or…

Ajax笔记总结:第二天(Ajax完结)

Xmind鸟瞰图: 简单文字总结: ajax知识总结: Ajax的基本语法: 1.定义一个实例化对象:new XMLHttpRequest() 2.调用open方法填写请求方式和请求地址 3.调用send方法发送请求 4.监听请求状态 5.4代…

05 serv00安装typecho

下载 ‍ cd domain/xxx.serv00.net/# 下载typecho git clone https://github.com/typecho/typecho.git# 当前有两个目录 typecho/ 和 public_html/ ls# 替换html rm -rf public_html/ mv typecho public_html‍ 安装 浏览器访问你的网站 xxx.serv0.net,看见 type…

informer中的WorkQueue机制的实现分析与源码解读(3)之限速队列RateLimitingQueue

概述 前面2篇文章介绍了workqueue中的普通队列FIFO和延时队列。接下来我们分析workqueue中的第三种队列: 限速队列 client-go 的 util/workqueue 包里主要有三个队列,分别是普通队列Queue,延时队列DelayingQueue,限速队列RateLimitingQueue…

IDEA:如何在idea中设置自动导包

这里使用的是idea2020版本,但是不同版本操作不会有较大的差别. 在Editer中展开General之后,选中Auto Import,最后勾选中Add unambiguous imports on the fly.

pygame开发课程系列(7):打砖块,飞行射击,跳跃游戏实例开发

第七章 实践项目 在本章中,我们将通过三个实践项目来巩固和应用前面章节中学到的知识。这些项目涵盖了经典打砖块游戏、飞行射击游戏和简单的平台游戏,它们将帮助你更好地理解 Pygame 的使用,并为你开发自己的游戏提供灵感和实践经验。 7.1…