Redis: Sentinel节点管理,故障迁移一致性以及TILT模式

news2024/10/3 15:57:43

节点管理

  • 节点管理指的是在我们环境正常的情况下,我们想要动态的去添加或者删除节点

1 )添加 Sentinel

添加单个 Sentinel

  • 如果在一个环境中,我们想要去添加 Sentinel,实际上是非常简单的
  • 因为基于 Sentinel 自动发现的机制
    • 我们只需要启动配置了 sentinel monitor mymaster 这个配置项的一个新的 Sentinel 即可
  • 在10秒内 Sentinel 将会获得其他 Sentinel 列表以及被监控的 master 的所有内部的相关信息
    • 这就是它的便捷之处
    • 因为他们内部要 PING 和 PONG, 要 INFO
    • 有定时任务在那,所以你只需要把配置文件配好
    • 启动这个Sentinel就十秒内一般就集成到这个环境中

添加多个Sentinel

  • 有时候我们可能想要添加多个,建议一个一个去添加
  • 因为我们每添加一个Sentinel的时候
    • 我们要保证它跟我们环境中其他的Sentinel节点都已经完全建立了通信关系
    • 再去添加下一个,否则频繁的快速的添加多个的时候,可能会导致有的Sentinel就会增加失败
    • 这样可能就会导致环境出问题
  • 如果你想要有效的保证大多数的 Sentinel 都是正常的
    • 一般建议每30秒添加一个,尤其是添加完了以后
    • 最好是使用 SENTINEL MASTER mastername 这个命令
      • 这个 mastername 替换成自己配置的,比如 mymaster
      • 在返回中,有相关的信息,可以查看对比
      • 检查所有Sentinel是否已经完全获取到所有 Master 信息
      • 去查看一下你当前Sentinel的节点和你的主从的信息

2 )删除 Sentinel

  • Sentinel 不会完全清除已经添加过的Sentinel信息
    • 因为你如果要删 Sentinel,Sentinel的配置文件里边记入了所有的Sentinel相关环境的信息
    • 启动 Sentinel 的时候,要指定配置文件,否则它会拒绝启动
    • 因为它要通过配置文件来读取当前的环境,因为他把环境全部写到这个配置文件里边去了
    • 比如说我要删除一个节点,这个配置文件里边有它找到的其他的Sentinel节点的信息
    • 正因为这个机制,它不会频繁的去修改自己的配置
    • 它内部尽量减少 Sentinel 配置版本的一个更新
    • 所以,即使咱们的 Sentinel 很长时间无法访问,它也不会把这个信息给清掉
  • 如果说我们真的要删这些信息,应遵循以下步骤
    • 第一步,停止要删除的 Sentinel 进程
    • 第二步,SENTINEL RESET * 向其他的Sentinel实例发送重置命令。
      • 这个 * 代表的是你要重置的一个主机
      • 可以用确切的主机来代替
      • 如果要删除多个,则一个接一个的去执行,就跟添加一样
      • 我建议是30秒,最好删完了去查看一下,每个Sentinel之间的数据数量是不是一致了
      • 再去执行下一个,这样的话得重置一下,配置就会相当于重新的去添加一下
      • 就会永久的把你想删的Sentinel给删掉了
      • 否则它内部的机制是不会频繁去修改配置的
      • 这个需要谨慎操作
  • 一般我们就是在最初的时候确定好环境了,就不再动它了
    • 尽可能就是添加,那万一删除操作不当可能会对我们环境会有很大的影响

3 )删除旧的 Master 或者无法访问的 Slave

  • 比如说, 按照我们的主从环境,并发上来了之后是可以动态的去添加从节点的
  • 而且添加从节点也非常简单,只需要启动一个新的Redis,其配置文件里边有 slaveof 或 replicaof
    • 就是让它去复制谁,它就会加入到咱们的主从环境里
  • 现在我想要把它删除掉,同样的配置文件里边,它会记住这些信息
  • 这里和上面一样,谨慎操作,遵循以下步骤
    • 将当前无用的 Slave 进程停止后,向所有 Sentinel 发送命令 SENTINEL RESET mastername
    • 重置 mastername 所有状态信息,重置当前主从信息,停掉的 Slave 就不会被加载进来了

故障迁移一致性

  • 这里用到了分布式一致性的算法 Raft 共识算法,就是怎样选举 Sentinel 节点为领头节点

1 ) Sentinel自动故障迁移使用Raft算法来选举领头(leader)Sentinel, 从而确保在一个给定的周期(epoch)里,只有一个领头产生

2 ) 这表示在同一个周期中,不会有两个Sentinel同时被选中为领头,并且各个Sentinel在同一个节点中只会对一个领头进行投票

3 ) 更高的配置节点总是优于较低的节点,因此每个Sentinel都会主动使用更新的节点来代替自己的配置。

简单来说,我们可以将Sentinel配置看作是一个带有版本号的状态。一个状态会以最后写入者胜出 (last-write-wins) 的方式(也即是,最新的配置总是胜出) 传播至所有其他 Sentinel

TILT模式

  • 因为Sentinel是比较严重的依赖系统时间的,在配置文件里边,它有很多跟时间相关的配置

  • 如果拿不到系统时间,我怎么判断这个时间是不是超时了

  • 怎么判断这个故障迁移是不是已经超出了规定时间

  • 它一般会记录最后一次回复PING的时间,并和当前的时间进行判断

  • 但是假如现在系统时间出了问题了,比如说某些原因,服务器压力很大

  • 因为你获取系统时间,它际际上也是一个进程,可能会被阻塞,拿不到系统时间

  • 为了确保这个问题能得到有效的解决, Redis 的作者就增加了一个TILT模式

  • 该模式是一种特殊的保护模式,就是说如果有一个Sentinel 节点拿不到系统时间了

  • 然后就会让这个节点抓紧进入TITL模式,它实际上是一种保护模式

  • 当处于TITL模式,Sentinel 或持续监控所有状态,但:

    • 停止处理请求
    • 当有实例向这个Sentinel发送 SENTINEL is-master-down-by-addr 命令时,Sentinel返回负值:因为这个Sentinel所进行的下线判断已经不再准确
  • 如果TILT可以正常维持30秒钟 (SENTINEL_TILT_PERIOD时长,默认为30s), 那么Sentinel 退出TILT模式,TITL模式是Sentinel的被动模式

  • 如果说退出之后,仍然还是拿不到系统时间,可能还是有问题,它就会再重新进去。

    • 假如说,现在在TILT模式里边,我们可能还要去做一些跟时间相关的判断
    • 无法判断,它就会延长TILT的模式的一个时长,默认是30秒

总结

  • raft 共识算法保证了故障迁移一致性
    • 在同一个周期里边,不会产生多个领头者
    • 也就不会产生多个故障迁移
    • 保证了故障迁移的一致性
  • TILT模式
    • 是当前节点如果服务器压力大,或者说因为某些其他的原因导致获取不到系统时间
    • 没有办法有效的做出命令的回复的一个间隔判断,那么它就会进入TILT这个保护模式
    • 当这个保护模式正常运行 30 秒钟,它就会退出
    • 如果在这个保护模式期间仍然要做时间判断,还是没有办法去处理,它会延长TILT的这个模式

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

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

相关文章

FP7209: 用于紫外线消毒灯的 升压LED恒流驱动芯片

现在社会对于居家消毒也越发重视起来。而居家消毒除了75%浓度酒精及各类消毒液外,利用紫外线灯给衣物表面、房间消毒也是一种很好的选择。FP7209 定位于低压线性恒流驱动,精度高、外围电路简单、使用方便且可靠性高,更可广泛应用于商业照明系…

【大数据入门 | Hive】函数{单行函数,集合函数,炸裂函数,窗口函数}

1. 函数简介: Hive会将常用的逻辑封装成函数给用户进行使用,类似于Java中的函数。 好处:避免用户反复写逻辑,可以直接拿来使用。 重点:用户需要知道函数叫什么,能做什么。 Hive提供了大量的内置函数&am…

深度学习-19-深入理解并训练自己的Tokenizer分词器

文章目录 1 tokenization是什么2 Tokenization方法简介2.1 单词级的Tokenization2.2 子词Tokenization技术2.3 举例说明2.3.1 字符级别2.3.2 词语级别2.3.3 子词级别3 训练自己的Tokenizer3.1 下载数据集3.2 huggingface的Tokenizer实现3.3 my-tokenizer.json字段说明3.4 验证一…

猫猫cpu的缓存

原题过长,放一下题目大意 题目大意 给你 m m m 个 1 1 1 到 n n n 之间的整数,你要找到若干个大小为固定的 k k k 的闭区间,使得所有这些数都在你找到的某个区间内。你需要最小化这些区间的并集的大小,并输出此大小。本题里…

[RabbitMQ] Spring Boot整合RabbitMQ

🌸个人主页:https://blog.csdn.net/2301_80050796?spm1000.2115.3001.5343 🏵️热门专栏: 🧊 Java基本语法(97平均质量分)https://blog.csdn.net/2301_80050796/category_12615970.html?spm1001.2014.3001.5482 🍕 Collection与…

【AI驱动TDSQL-C Serverless 数据库技术实战营】基于Langchain的电商可视化分析

人工智能技术的飞速发展已深刻影响电商行业,显著提升了个性化推荐、用户行为分析、库存管理和市场预测等领域的效率。构建一个高效的AI驱动电商数据分析平台已成为行业的核心需求。本文里,我们将使用腾讯云的高性能应用平台 HAI(专为AI和科学…

物流行业中的AI平台架构与智能化应用

随着物流行业的迅速发展,尤其是电商、仓储、运输的需求日益增多,AI技术逐渐成为推动物流企业高效运营、提升服务水平的关键力量。AI平台架构为物流行业的各个环节提供了智能化解决方案,助力物流企业在仓储管理、运输调度、客户服务等方面实现…

netty之基于Netty搭建WebSocket,模仿微信聊天页面

前言 模仿微信聊天页面,开发一个基于Netty搭建WebSocket通信案例。Netty的应用方面非常广;聊天、MQ、RPC、数据等等,在5G到来的时候更加需要大量数据传输,Netty的应用也会更加广阔。 1:案例使用SpringBootNettyWebSocket搭建功能。…

c++MFC项目结构中有:外部依赖项、头文件,他们两个有啥区别,好像都是.h文件吧?

目录 头文件(Header Files) 特点 示例 外部依赖项(External Dependencies) 特点 示例 区别 作用和来源不同 内容不同 使用方式不同 结合 示例 总结 在C项目结构中,外部依赖项和头文件确实可能都包含.h文件…

力扣(leetcode)每日一题 983 最低票价 |动态规划

983. 最低票价 题干 在一个火车旅行很受欢迎的国度,你提前一年计划了一些火车旅行。在接下来的一年里,你要旅行的日子将以一个名为 days 的数组给出。每一项是一个从 1 到 365 的整数。 火车票有 三种不同的销售方式 : 一张 为期一天 的通…

Linux复习--Linux服务管理类(SSH服务、DHCP+FTP、DNS服务、Apache服务、Nginx服务、HTTP状态码)

前言:本博客仅作记录学习使用,部分图片出自网络,如有侵犯您的权益,请联系删除 一、SSH服务 1、问题引出 哪些设置能够提升SSH远程管理的安全等级? 2、SSH的登录验证方式-口令登录 3、SSH的登录验证方式-密钥登录 4、…

高质量的翻译如何提高界面可用性

翻译质量在提高界面可用性方面起着重要作用,特别是在全球受众使用的应用程序、网站和软件中。有效地翻译界面可以确保清晰度、连贯性和易用性,从而改善不同地区和语言的用户体验。以下是高质量翻译提高界面可用性的关键方法: 清晰直观的导航…

SAP HCM PE51工资单教程

作者:vivi,来源:osinnovation 一:故事背景 最近在做一个越南的ecp集成事情,因为客户是越南,所以对工资单没有国内一样,用微信小程序一套单独开发,而是使用标准的paylisp&#xff0…

【路径规划】路径平滑算法,A星算法拐点的圆弧化处理

摘要 A算法广泛应用于路径规划中,但其生成的路径通常在拐点处呈现不平滑的折线。为了提升路径的平滑性,本文提出了一种基于圆弧的平滑处理方法,用于对A算法产生的路径拐点进行优化。通过在MATLAB中进行仿真验证,该方法能够有效减…

9. 正则表达式

编程工具和技术是以一种混乱、进化的方式生存和传播的。获胜的并不总是最好或最杰出的工具,而是那些在合适的利基市场中发挥足够好的功能,或者恰好与另一项成功的技术相结合的工具。 在本章中,我将讨论这样一种工具--正则表达式。正则表达式是…

YOLOv11改进 | 上采样篇 | YOLOv11引入DySample轻量级动态上采样器

1. DySample介绍 1.1 摘要:我们提出了DySample,一个超轻量和有效的动态上采样器。虽然最近的基于内核的动态上采样器(如CARAFE、FADE和SAPA)的性能提升令人印象深刻,但它们引入了大量工作负载,主要是由于耗…

Spring Boot 中的拦截器 Interceptors

​ 博客主页: 南来_北往 系列专栏:Spring Boot实战 前言 Spring Boot中的拦截器(Interceptor)是一种用于拦截和处理HTTP请求的机制,它基于Spring MVC框架中的HandlerInterceptor接口实现。拦截器允许在请求到达控制器&#…

C++函数模板、选择排序实现(从大到小)

template <class T> void mysw (T &a , T &b) {T temp b;b a;a temp; }template <class T> void muSort( T &arr ,int len) {//该实现为选择排序(高到低)for (int i 0; i < len; i) {int max i ; //首先默认本次循环首位元素为最大for (int j …

scrapy爬取汽车、车评数据【中】

这个爬虫我想分三期来写&#xff1a; ✅ 第一期写如何爬取汽车的车型信息&#xff1b; ✅ 第二期写如何爬取汽车的车评&#xff1b; ✅ 第三期写如何对车评嵌入情感分析结果&#xff0c;以及用简单的方法把数据插入mysql中&#xff1b; 技术基于scrapy框架、BERT语言模型、mysq…

SQL Server中关于个性化需求批量删除表的做法

在实际开发中&#xff0c;我们常常会遇到需要批量删除表&#xff0c;且具有共同特征的情况&#xff0c;例如&#xff1a;找出表名中数字结尾的表之类的&#xff0c;本文我将以3中类似情况为例&#xff0c;来示范并解说此类需求如何完成&#xff1a; 第一种&#xff0c;批量删除…