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

节点管理

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

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.rhkb.cn/news/439490.html

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

相关文章

VUE2常见问题以及解决方案汇总(不断更新中)

解决vue项目中 el-table 的 row-click 事件与行内点击事件冲突,点击事件不生效(表格行点击事件和行内元素点击事件冲突)需要阻止事件冒泡 问题描述 1.点击列的编辑按钮,会触发按钮本身事件,同时会触发行点击事件 2.点…

Kotlin 处理字符串和正则表达式(二十一)

导读大纲 1.1 处理字符串和正则表达式1.1.1 分割字符串1.1.2 正则表达式和三引号字符串1.1.3 多行三引号字符串IntelliJ IDEA 和 Android Studio 中三重引号字符串内部的语法高亮显示 1.1 处理字符串和正则表达式 Kotlin 字符串与 Java 字符串完全相同 可以将 Kotlin 代码中创建…

R包的安装、加载以及如何查看帮助文档

0x01 如何安装R包 一、通过R 内置函数安装(常用) 1.安装CRAN的R包 install.packages()是一个用于安装 R 包的重要函数。 语法:install.packages(pkgs, repos getOption("repos"),...) 其中: pkgs:要安…

问题-python-运行报错-SyntaxError: Non-UTF-8 code starting with ‘\xd5‘ in file 汉字编码问题

​ 编码: 把字符转换成字节序列的过程。因为计算机只能处 理二进制数据,所以不能直接处理文本,需要先把文本转换为二进制数据。 解码: 把二进制数据转换成字符的过程。把接收到的数据转换成程序中使用的编码方式。 ​ 这个报错原因就是编码和解码没达成…

【C++ STL】手撕vector,深入理解vector的底层

vector的模拟实现 前言一.默认成员函数1.1常用的构造函数1.1.1默认构造函数1.1.2 n个 val值的构造函数1.1.3 迭代器区间构造1.1.4 initializer_list 的构造 1.2析构函数1.3拷贝构造函数1.4赋值运算符重载 二.元素的插入,删除,查找操作2.1 operator[]重载函数2.2 push_back函数:…

[已解决] Install PyTorch 报错 —— OpenOccupancy 配环境

目录 关于 常见的初始化报错 环境推荐 torch, torchvision & torchaudio cudatoolkit 本地pip安装方法 关于 OpenOccupancy: 语义占用感知对于自动驾驶至关重要,因为自动驾驶汽车需要对3D城市结构进行细粒度感知。然而,现有的相关基准在城市场…

TriLite完成A轮扩展融资:加速AR微型投影仪技术创新与市场拓展

近日,全球领先的AR微型投影仪开发商TriLite宣布成功完成A轮扩展融资,将A轮融资总额提升至超过2000万欧元。这一轮融资不仅彰显了资本市场对TriLite技术实力和市场潜力的高度认可,更为其后续在AR微型投影仪领域的技术研发、产品迭代以及市场拓展提供了坚实的资金保障。以下是…

大厂笔试现已经禁用本地IDE怎么看

如果我说本来面试做题这种事情就是反人类你相信吗? 这个罪恶的源头就是 Google,说是为了选择高素质的计算机编程水平的人才,然后把面试就变成了考试,最大的受益者当然是印度人了。 当把一个考察过程变成标准化的考试过程&#x…

【AI知识点】置信区间(Confidence Interval)

置信区间(Confidence Interval, CI) 是统计学中用于估计总体参数的范围。它给出了一个区间,并且这个区间包含总体参数的概率等于某个指定的置信水平(通常是 90%、95% 或 99%)。与点估计不同,置信区间通过区…

Unity Input System自动生成配置

参考视频 创建及配置新输入系统 New Input System|Unity2022.2 最新教程《勇士传说》入门到进阶|4K_哔哩哔哩_bilibili ProjectSettings设置 Unity编辑器菜单栏选择Edit->Project Settings->Player->Other Settings,将Api Compatibility Level…

OpenAI 开发者大会!实时语音功能有API了,GPT-4o支持多模态微调,上下文cache功能上线

家人们!十一假期第1天, OpenAI一年一度的开发者大会又来了惹!今年的开发者大会分成三部分分别在美国、英国、新加坡三个地点举办,刚刚结束的是第一场。 去年的OpenAI开发者大会公布了GPT-4 Turbo和GPTs,今年没有大更新…

allegro精确画圆形边框

1.显示原点位置: 2.class-subclass依次选择Board Geometry-Outline 3.菜单ADD---Circle,右侧option,依次设置如下,如图可设置为圆心(0,0),半径为42mm的边框,不要忘了右键Done,完成绘…

【目标检测】工程机械车辆数据集2690张4类VOC+YOLO格式

数据集格式:Pascal VOC格式YOLO格式(不包含分割路径的txt文件,仅仅包含jpg图片以及对应的VOC格式xml文件和yolo格式txt文件) 图片数量(jpg文件个数):2694 标注数量(xml文件个数):2694 标注数量(txt文件个数):2694 标注…

《Windows PE》3.2.4节表

节表由多个节表项(IMAGE_SECTION_ HEADER)组成,每个节表项(40个字节)记录了 PE中与某个特定的节有关的信息,如节的属性、节 的大小、在文件和内存中的起始位置等。节表中节的数量由字段IMAGE_FILE_HEADER. …

防止错误输入!Excel单元格限制输入内容的三种有效方式

在Excel中,限制单元格输入内容可以帮助避免数据输入错误,确保数据的一致性和准确性。今天小编分享三种方法,可以轻松限制Excel单元格的输入内容,确保数据输入符合预期要求,一起来看看吧! 方法一&#xff1a…

el-pagination组件封装

组件使用 源代码&#xff1a; <script setup> import Pagination from /components/pagination/index.vue import {ref} from "vue";const pageNum ref(1) const pageSize ref(10) const total ref(120)function loadData() {// 加载数据 } </script>…

[云] Hands-on with a sample application--DockerCoins 挖矿程序!

DockerCoins 挖矿程序&#xff01;&#x1f4b0;&#x1f433;&#x1f4e6;&#x1f6a2; 不&#xff0c;你不能用 DockerCoins 买咖啡。 DockerCoins 如何工作&#xff1a; 生成一些随机字节&#xff1a; 程序首先生成一串随机的字节数据。这些随机字节用于模拟挖矿过程中的…

R语言绘制散点图

散点图是一种在直角坐标系中用数据点直观呈现两个变量之间关系、可检测异常值并探索数据分布的可视化图表。它是一种常用的数据可视化工具&#xff0c;我们通过不同的参数调整和包的使用&#xff0c;可以创建出满足各种需求的散点图。 常用绘制散点图的函数有plot()函数和ggpl…

算法专题三: 二分查找

目录 1. 朴素版: 二分查找2. 查找排序数组元素第一个和最后一个位置3. 搜索插入位置4. x的平方根5. 山脉数组的峰顶索引6. 寻找旋转数组中的最小值7. 点名 博客主页: 酷酷学!!! 感谢您的关注~ 正文开始 1. 朴素版: 二分查找 题目思路: 仅需根据题意, 找出二段性, 正确更新下标…

躺平成长:微信小程序运营日记第二天

在进行属于生活的开源之后&#xff0c;自己更加感受到自己存在的渺茫&#xff0c;同时更加开始深刻领会&#xff0c;开源的重要性&#xff0c;在开源&#xff0c;开放&#xff0c;创造&#xff0c;再创新的思维模式下&#xff0c;不发布八部金刚功相关的训练视频&#xff0c;自…