redis哨兵原理

server/2024/11/13 11:36:16/

redis集群中为了防止主机宕机导致集群瘫痪,引入了哨兵集群,哨兵集群通过实时监控主机是否正常运行,并且在主机出现故障时及时将另一个满足条件的从机变为新的主机以保证redis集群正常运转,那这一过程具体发生了什么呢?

首先,哨兵集群是如何对redis集群的主机实现监控的呢?

哨兵集群的每个节点会固定周期的向主机发送ping指令,等待主机相应,一旦主机超过既定时间未响应,则该哨兵节点则认定该主机为主观下线(主观下线的意思是,当前节点主观认为该主机故障无法响应,但仍然不能确定是否真的是主机故障,也有可能是当前哨兵节点所处网络环境不好,或者其他原因),当认为主机为主观下线的哨兵节点数量达到quorum数量时(quorum是哨兵配置文件中配置的,通常设置为所有哨兵节点数量的一半以上),则认为该主机为客观下线(客观下限是达到配置文件中既定数量的哨兵节点认为该主机为下线状态,则判定主机确实是出故障了),这时候就会开始选举新的主机。

在挑选新的主机之前,首先哨兵集群要先选举一个老大来负责发送命令选举新的主机,选举过程中,哨兵集群会进行投票,哨兵节点会观察哪个节点的票最多,如果有一个节点的票最多,则会投票给该节点,如果没有得票的节点,则会投票给自己,换句话说,谁先投票,谁就会被选举为哨兵集群的老大,而最先发起投票的通常是最先发现主机客观下线的,这样来说,其实就是第quorum个发现主机主观下线的哨兵节点,会当选哨兵集群老大。

选举完哨兵集群老大后,该节点会继续根据一些规则选举新的主机

1. 首先判断主机与从机断开时间长短,如果超过指定值( down-after-milliseconds * 10 )则会
排除该从机
2. 然后在判断从机配置中的 slave-priority 值,越小优先级越高,如果是 0 则永不参与选举(通常这个值是相等的)
3. 如果 slave-prority 一样,则判断 slave 节点的 offset 值,越大说明数据越新,优先级越高
4. 如果依然相等,则是判断 从机的 id 大小,越小优先级越高。

其实这些条件都在保证从机的数据尽可能的新,最后通过id是确保能够选出来一个作为主机(并不是id越小,数据越新)

当确认新主机后,哨兵集群老大会首先向新主机发送 slaveof no one 命令让其脱离从机身份变成主机,然后在向其他从机发送 slaveof 新主机ip 命令让其他从机跟随新的主机同数据,最后将之前的主机ip标记为从机,当旧主机正常运行时则会变为新主机的从机。

这样一个主机发生故障,哨兵集群发挥作用的流程就结束了。


http://www.ppmy.cn/server/32905.html

相关文章

笔试强训week3

day1 Q1 难度⭐ 牛牛冲钻五_牛客小白月赛38 (nowcoder.com) 题目: 牛牛最近在玩炉石传说,这是一款一对一对战的卡牌游戏,牛牛打算努力冲上钻五分段,获得丰厚的天梯奖励。 炉石传说的段位可以用星数来表示,具体规则…

算法打卡day41

今日任务: 1)198.打家劫舍 2)213.打家劫舍II 3)337.打家劫舍III 4)复习day16 198.打家劫舍 题目链接:198. 打家劫舍 - 力扣(LeetCode) 你是一个专业的小偷,计划偷窃沿街…

Nacos如何支持服务发现和注册?

Nacos如何支持服务发现和注册 在微服务架构的浪潮中,服务发现和注册成为了支撑整个架构稳定运行的关键技术之一。而Nacos,作为阿里巴巴开源的一个动态服务发现、配置管理和服务管理平台,凭借其简单易用、功能强大的特性,受到了广…

AI-数学-高中-51随机变量-条件概率与独立事件

原作者视频:【随机变量】【一数辞典】1条件概率与独立事件_哔哩哔哩_bilibili

【已解决】VSCode 连接远程 Ubuntu :检测到 #include 错误。请更新 includePath。

文章目录 1. 环境声明2. 解决过程 1. 环境声明 即使是同一个报错,在不同的环境中,报错原因、解决方法都是不同的,本文只能解决跟我类似的问题,如果你发现你跟我遇到的问题不太一样,建议寻找其他解法。 必须要吐槽的是…

Vue3组合式API + TS项目中手写国际化插件

文章目录 1. 在项目中创建一个国际化插件的文件i18n.ts2. 创建语言模块json3. 注册插件4. 语言切换组件5. 使用插件(ts中使用全局需注意点) 1. 在项目中创建一个国际化插件的文件i18n.ts <!-- plugins/i18n.ts --> export const i18nPlugin {install(app: any, option:…

建造者模式

建造者模式简介 建造者模式又称为生成器模式,主要用于对复杂对象的构建和初始化,他可以将多个简单的对象按照一定的顺序一步步组装起来,最终形成一个复杂的成品,比如飞船、火车、计算机、积木等等。建造者模式的主要目的在于把繁琐的构建过程从不同的对象抽离出来,使其脱…

【C++题解】1660. 今天要上课吗

问题&#xff1a;1660. 今天要上课吗 类型&#xff1a;分支结构 题目描述&#xff1a; 暑假来了&#xff0c;晶晶报了自己心仪已久的游泳课&#xff0c;非常开心&#xff0c;老师告诉晶晶每周周一、周三、周五、周六四天都要上课的&#xff0c;晶晶担心自己会忘记&#xff0c…