Redis 哨兵 问题

前言


 相关系列

  • 《Redis & 目录》(持续更新)
  • 《Redis & 哨兵 & 源码》(学习过程/多有漏误/仅作参考/不再更新)
  • 《Redis & 哨兵 & 总结》(学习总结/最新最准/持续更新)
  • 《Redis & 哨兵 & 问题》(学习解答/持续更新)
     
     

什么是哨兵?


    哨兵是用于为主从同步提供自动化故障转移功能的组件。在主从同步主节点已宕机的情况下,想要令从节点代替主节点对外提供服务需要执行“修改从节点配置文件/重启从节点/重新建立主从关秀/修改客户端配置文件/重启客户端”等操作。这些操作在人为执行时是相当繁复/易错/耗时的,因此为了快速/准确的完成故障转移Redis便设计了哨兵以实现对上述行为的全自动化执行…哨兵的相关功能具体如下:

  • 节点监控:监测主/从节点是否正常工作;
  • 消息通知:在某节点宕机时向管理员发送通知;
  • 故障转移:在主节点宕机时自动选择其从节点以作为新主节点;
  • 配置中心:为客户端提供访问地址,从而避免在主节点宕机时人为修改客户端配置文件中的访问地址。
     
     

哨兵推荐以什么形式工作?为什么?


    哨兵被推荐以奇数集群的方式工作,因为单个哨兵对节点的监测结果可能并不准确,而多哨兵的综合监测将大幅提升节点状态判定的准确性。那为什么是奇数集群呢?这是因为在判断主节点已宕机的情况下哨兵集群协同投票选举出监测数据最新的哨兵成为领导哨兵,目的是由其根据从节点的优先级/主机数据的同步进度/运行ID的大小等因素选择出可用性最高的从节点以作为新的主节点。而由于奇数数量的哨兵有助于避免因为平票/少票而导致的重复选举,因此哨兵被推荐以奇数集群的方式进行工作。
 
 

集群中的哨兵是如何通讯的?


    集群中的哨兵有两种通讯方式:一是基于主机的发布/订阅功能进行的间接通讯;二是基于哨兵间的TCP连接进行的直接通讯。

    监测相同主机的哨兵会自动归属于一个集群,因此间接通讯是先天就存在的。哨兵启动后会自动订阅主机上一个名为__sentinel__:hello的频道用于进行信息交互,并会在后续通过间接通讯持续向其它哨兵共享数据。这些共享数据包含的内容主要有二:一是哨兵自身的元数据,例如IP/端口等,以便其它哨兵能对自身进行定位;二是哨兵监测到的主/从机运行数据,以便其它哨兵能对自身的检测结果进行综合性判定。

    直接通讯是在间接通讯的基础上后天建立起来的,因为哨兵会根据其它哨兵共享的地址信息而与之建立TCP连接。哨兵通过直接通讯进行的信息交互主要有两类:一是对其它发送{PING}指令以检测哨兵的运行状态;二则是在主机宕机时进行故障转移的信息交互。直接通讯是哨兵集群在执行故障转移时的通讯功能承担方,这一方面是因为主机宕机会使得间接通讯失去作用,另一方面也是因为其同步交互的特性可及时返回回应。
 
 

哨兵集群执行故障转移的流程是什么样的?


  • 哨兵每秒向主机发送{PING}指令已检测器运行状态,并在超过指定时间未收到回应的情况下判定其已主观下线;
  • 为了确定主机是否真的已经下线,哨兵会其集群中的其它哨兵发送指令以询问其各自的检测结果;
  • 其它哨兵收到指令并返回自身的监测结果,这其间可能会触发其它哨兵对主机的心跳检测;
  • 哨兵在统计询过结果时如果发现判定主机已(主观/客观)下线的其它哨兵数量已达指定数量,那么就会将主机判定为客观下线;
  • 将主机判定为客观下线的主机会向其它哨兵发送指令以发起投票,目的是将自身选举为领导哨兵以进行故障转移,即挑选从机作为新主机;
  • 其它哨兵接受到指令后会整体遵循“先到先得”的准测进行投票,即先请求投票(集群中判定主机客观下线的哨兵可能有多个)的会得到票,而后续的请求就都无效了;
  • 哨兵在统计票数时如果发现票数已达指定数量(一般是总数/2+1),那么就意味着自身已成为领导哨兵。在通知完其它哨兵这个消息后,领导哨兵会根据从机的优先级/主机数据的同步进度/运行ID的大小等因素挑选出可用性最高的从机作为新主机,并修改其它从机的配置以令之向新主机同步,最后再将新主机告知其它哨兵;
  • 领导哨兵会通知客户端新主机的地址以进行连接;
  • 领导哨兵会持续监测旧主机,并在其恢复运行时将之设置为新主机的从机。

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

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

相关文章

Java常见数据结构

数组 数组的特性存储空间是连续的长度是不可变的只能存储 相同的类型(不严谨)可以通过下标访问数组的内容 a[10] 复杂度是O1每个元素的默认是为零值 0 null false -> 一个对象的基本的数据域的初始化也是这样的 Student 类中的username属性 默认值 链表 查找麻烦 插入和删…

logback日志导入使用

1导入配置 <!-- 日志 &#xff0c; 会自动传递slf4j门面--> <dependency><groupId>ch.qos.logback</groupId><artifactId>logback-classic</artifactId><version>1.2.3</version> </dependency>2 引入配置 Logback要求…

开源实时数仓的构建

设计计思路 基本思路 开源数据平台的设计思路是通过 Flink SQL Batch、StartRocks SQL 、StartRocks物化视图 的能力实现一个离线任务的开发&#xff1b;使用 DolphinScheduler 进行离线工作流编排和调度&#xff1b;通过 Flink CDC 和 Flink SQL 实现流处理能力&#xff0c;进…

HarmonyOS 相对布局(RelativeContainer)

1. HarmonyOS 相对布局&#xff08;RelativeContainer&#xff09; 文档中心:https://developer.huawei.com/consumer/cn/doc/harmonyos-guides-V5/arkts-layout-development-relative-layout-V5   RelativeContainer为采用相对布局的容器&#xff0c;支持容器内部的子元素设…

【C++】—— 模板进阶

【C】—— 模板进阶 1 非类型模板参数1.1 什么是非类型模板参数1.2 非类型模板参数对比宏的优势1.3 array 简单了解 2 模板的特化2.1 引子2.2 函数模板特化2.3 函数模板特化的坑2.4 类模板的特化2.4.1 全特化2.4.2 偏特化&#xff08;半特化&#xff09;2.4.3 选择2.4.4 偏特化…

英伟达GPU算力【自用】

GPU&#xff08;图形处理单元&#xff09;算力的提升是驱动当代科技革命的核心力量之一&#xff0c;尤其在人工智能、深度学习、科学计算和超级计算机领域展现出了前所未有的影响力。2024年的GPU技术发展&#xff0c;不仅体现在游戏和图形处理的传统优势上&#xff0c;更在跨行…

unity项目导出安卓工程后,在AndroidStudio打包报错:unityLibrary:BuildIl2CppTask‘.

下面这个是我在unity开发者社区提问后&#xff0c;他们回答得&#xff1a; 解决方案&#xff1a;我这边按照这几个方案检查了下&#xff0c;NDK和JDK都没问题&#xff0c;最后重启电脑才解决的&#xff0c;应该是文件被锁定了&#xff0c;我用的windows系统的。 验证&#xff…

书生第四期作业:L0G1000 任务作业

永不止步&#xff0c;空杯心态&#xff0c;从零开始&#xff0c;复习一下&#xff0c;争取完成全部任务 SSH登录 PowerShell命令行登录成功 VScode SSH登录成功 进入root文件夹 闯关任务&#xff1a;映射运行hello_world.py 可选任务1&#xff1a;linux命令行基本命令过一边 …

【WPF】中Dispatcher的DispatcherPriority参数使用

在 WPF 中&#xff0c;DispatcherPriority 参数用于指定通过 Dispatcher 调度的操作的执行优先级。加入 DispatcherPriority 参数的情况通常取决于你希望操作何时以及如何被执行。 1.Dispatcher的DispatcherPriority参数使用 以下是几种情况和示例说明&#xff1a; 1.1 需要…

C++——String类讲解

一. 为什么学习string类&#xff1f; C语言中&#xff0c;字符串是以\0结尾的一些字符的集合&#xff0c;为了操作方便&#xff0c;C标准库中提供了一些str系列 的库函数&#xff0c;但是这些库函数与字符串是分离开的&#xff0c;不太符合OOP的思想&#xff0c;而且底层空间需…

【C语言刷力扣】1768.交替合并字符串

题目&#xff1a; 解题思路&#xff1a; 将 word1 和 word2 元素依次添加至 ans 的后面。 时间复杂度&#xff1a; &#xff0c; n是word1的长度 m是word2的长度 空间复杂度&#xff1a; char* mergeAlternately(char* word1, char* word2) {int len1 strlen(word1);in…

009:屏幕录制软件FastStoneCapture9.5安装教程

摘要&#xff1a;本文详细介绍屏幕录制软件FastStoneCapture9.5的安装流程。 一、软件介绍 FastStone Capture是一款集屏幕捕获、编辑、注释与分享于一体的高性能工具&#xff0c;支持多种截图方式、高质量的图像输出以及便捷的录屏功能&#xff0c;适用于教育培训、工作辅助和…

代码随想录算法训练营第46期Day37,38,39,41

这几天晚上看比赛&#xff0c;就把刷题耽误了。还好是开新章节&#xff0c;前面的题都比较简单。 然后周天做完了又忘记发了 动态规划 确定dp数组&#xff08;dp table&#xff09;以及下标的含义确定递推公式dp数组如何初始化确定遍历顺序举例推导dp数 Day37前两道题太简单…

ThinkPad T480拆机屏幕改装:便携式显示器DIY指南

ThinkPad T480拆机屏幕改装&#xff1a;便携式显示器DIY指南 本文记录了将旧笔记本电脑 T480 拆机屏幕改装为便携式显示器的全过程。作者在决定升级设备后&#xff0c;选择通过 DIY 方式利用原有的屏幕资源。文章详细介绍了屏幕驱动板的安装、螺丝孔的剪裁、排线连接及固定的步…

vue面试题+wx-open-launch-app开放标签唤醒app方法

vue面试题 核心原理部分 mvc mvvm和mvp的区别&#xff1f; MVVM 就是 Model-View-ViewModel 的缩写&#xff0c;MVVM 将视图和业务逻辑分开。 View&#xff1a;视图层&#xff0c;Model 数据模型&#xff0c;而 ViewModel 是把两者建立通信的桥梁。 在 MVVM 框架下&#…

基于Spring Boot的装饰工程管理系统源码(springboot)

项目简介 基于Spring Boot的装饰工程管理系统实现了以下功能&#xff1a; 系统可以实现合同信息管理&#xff0c;合同报价管理&#xff0c;客户管理&#xff0c;立项项目管理&#xff0c;公告信息管理&#xff0c;员工管理&#xff0c;预算报价管理&#xff0c;装饰材料总计划…

react18中的合成事件与浏览器中的原生事件

React 通过将事件 normalize 以让他们在不同浏览器中拥有一致的属性。 合成事件 SyntheticEvent 实例将被传递给你的事件处理函数&#xff0c;它是浏览器的原生事件的跨浏览器包装器。除兼容所有浏览器外&#xff0c;它还拥有和浏览器原生事件相同的接口&#xff0c;包括 stopP…

Postgresql 配置数据库表添加主键自增id

#1024程序员节&#xff5c;征文# 在 PostgreSQL 数据库中&#xff0c;如果你想创建一个自增的 ID 字段&#xff0c;通常会使用序列&#xff08;sequence&#xff09;配合默认值或者使用带有自动递增特性的 SERIAL 类型。以下是两种常见的方法来实现自增 ID&#xff1a; 使用 …

type C 引脚定义

type C 引脚定义 11 22 Type-C接口封装 Type-C接口封装包括&#xff1a;24Pin Type-C、16Pin Type-C、12Pin Type-C、6Pin Type-C Type-C引脚功能

数据结构与算法-21算法专项(中文分词)(END)

中文分词 搜索引擎是如何理解我们的搜索语句的&#xff1f; mysql中使用 【like “%中国%”】&#xff0c;这样的使用方案 缺点1&#xff1a;mysql索引会失效缺点2&#xff1a;不能模糊&#xff0c;比如我搜湖南省 就搜不到湖南相关的 1 trie树 Trie树&#xff0c;又称前缀树…