Redis哨兵原理,我忍你很久了!(3)

本文涉及的产品
云数据库 Redis 版,社区版 2GB
推荐场景:
搭建游戏排行榜
简介: Redis哨兵原理,我忍你很久了!

三、哨兵工作原理

配置完哨兵后,就需要对其工作原理进行解析了,只有知道其工作流程,才能对哨兵有更好的理解。


本文讲解原理没有那么干巴!让你可以把一篇技术文章当故事去看。


进入正题,哨兵作用是监控、通知、故障转移。那么工作原理也是围绕这三点来讲的。


1. 监控工作流程


image.png


  1. 哨兵发送info指令,并且保存所有哨兵状态,主节点和从节点的信息
  2. 主节点会记录redis实例的信息,主节点记录的信息跟哨兵记录的信息看起来是一样的,实际上还是有点区别哈。
  3. 哨兵会根据在主节点拿到的从节点信息,给对应的从节点也发送info指令
  4. 接着哨兵2来了,同样的也会改主节点发送info指令,并且建立cmd连接
  5. 这个时候哨兵2也会保存跟哨兵1一样的信息,只不过是保存的哨兵信息是2个。
  6. 这个时候为了每个哨兵的信息都一致它们之间建立了一个发布订阅。为了哨兵之间的信息长期对称它们之间也会互发ping命令。
  7. 当再来一个哨兵3时,也会做同样的事情,给主节点和从节点发送info。并且跟哨兵1和哨兵2建立连接。

2. 通知工作流程

Sentinel会给主从的所有节点发送命令获取其状态,并且会把信息发布到哨兵的订阅里。


image.png


3. 故障转移原理(本文重点)


image.png


  • 哨兵会一直给主节点发送publish sentinel :hello,直到哨兵报出sdown,这个词这会是有不是有点熟悉了。没错就是我们上文中把主节点断开后哨兵服务端报出的信息。哨兵报出主节点sdown后还没有完,哨兵还会往内网里发布消息说明这个主节点挂了。发送的指令是sentinel is-master-down-by-address-port
  • 其余的哨兵接收到指令后,主节点挂了吗?让我去看看到底挂没挂。发送的信息也是hello。其余的哨兵也会发送他们收到的信息并且发送指令sentinel is-master-down-by-address-port到自己的内网,确认一下第一个发送sentinel is-master-down-by-address-port的哨兵说你说的对,这个家伙确实挂了。当所有人都认为主节点挂了后就会修改其状态为odown。当一个哨兵认为主节点挂了标记的是sdown,当半数哨兵都认为挂了其标记的状态是odown。这也就是配置哨兵为什么配置单数的原因。
  • 对于一个哨兵认为主节点挂了称之为主观下线,半数哨兵认为主节点挂了称之为客官下线。
  • 一旦被认为主节点客官下线后,哨兵就会进行下一步操作

这时哨兵已经检测到问题所在了,那么到底是那个哨兵去负责推选新的主节点呢!不能是张三也去,李四也去,王五也去,这样就乱套了、于是就需要在所有的哨兵里选出领头的,那么是如何选的呢!请看下图。


这个时候呢!五个sentinel就在一起开会了,所有的哨兵都在一个内网中,然后他们会做一件事情就是五个sentinel会同时发送指令sentinel is-master-down-by-address-port并且携带上自己竞选次数和runid。


image.png


每个sentinel既是参选者也是投票者,每个sentinel都有一票,信封就代表自己的投票权。


image.png


当sentinel1和sentinel4同时把指令发送到群里准备竞选时,sentinel2这个时候就说我先接到谁的指令就把票投给谁。假如sentinel1发的早,那么sentinel2的票就会投给sentinel1。


image.png


按照这样的规则一直发起投票直到有一个sentinel的票数为总sentinel数量的一半之多。假设说是sentinel1的票数满足总哨兵数量的一半之多后,sentinel1就会当选。这个时候就进行到了下一个阶段。


image.png


在上边哨兵已经选出了sentinel1为代表去所有的从节点找出一个作为主节点。这个挑选主节点不是随便拿一个是有一定的规则的。


先把不在线的干掉


image.png


响应慢的干掉,sentinel会给所有的redis发送信息,响应速度慢的就会被干掉


image.png


与原主节点断开时间最久的干掉,这里由于演示不够用了,所有新增了一个slave5,没有任何意义哈!


image.png


以上三个点都判断结束后还有salve4和slave5,就会根据优先原则来进行筛选。


  • 首先会根据优先级,如果优先级一样在进行其他判断
  • 判断offset偏移量,判断数据同步性,假如说slave4的offset为90 slave5偏移量为100 那么哨兵就会认为slave4的网络是不是有问题啊!于是就会选slave5为新的主节点。那如果说是slave4和slave5的offset相同呢!还有最后一个判断
  • 最后一步就是判断runid了,也就是职场中的论资排辈了,也就说根据runid的创建时间来判断,时间早的上位。


选出新的主节点后就要对所有的节点发送指令了。


image.png

image.png



相关实践学习
基于Redis实现在线游戏积分排行榜
本场景将介绍如何基于Redis数据库实现在线游戏中的游戏玩家积分排行榜功能。
云数据库 Redis 版使用教程
云数据库Redis版是兼容Redis协议标准的、提供持久化的内存数据库服务,基于高可靠双机热备架构及可无缝扩展的集群架构,满足高读写性能场景及容量需弹性变配的业务需求。 产品详情:https://www.aliyun.com/product/kvstore     ------------------------------------------------------------------------- 阿里云数据库体验:数据库上云实战 开发者云会免费提供一台带自建MySQL的源数据库 ECS 实例和一台目标数据库 RDS实例。跟着指引,您可以一步步实现将ECS自建数据库迁移到目标数据库RDS。 点击下方链接,领取免费ECS&RDS资源,30分钟完成数据库上云实战!https://developer.aliyun.com/adc/scenario/51eefbd1894e42f6bb9acacadd3f9121?spm=a2c6h.13788135.J_3257954370.9.4ba85f24utseFl
相关文章
|
18天前
|
缓存 NoSQL Apache
【Redis】布隆过滤器原理与应用
【Redis】布隆过滤器原理与应用
20 1
|
2天前
|
存储 监控 NoSQL
Redis哨兵&分片集群
Redis哨兵&分片集群
7 0
|
4天前
|
负载均衡 NoSQL 关系型数据库
深入浅出Redis(六):Redis的主从架构与主从复制原理
深入浅出Redis(六):Redis的主从架构与主从复制原理
|
13天前
|
监控 NoSQL 算法
深入剖析Redis哨兵模式的原理和应用
Redis的哨兵模式是实现高可用性和自动故障转移的机制,当主服务器故障时,哨兵能自动检测并进行故障转移,确保服务连续和稳定性。哨兵模式通过监控主从服务器状态、自动故障转移、防止数据不一致,提高容错能力和负载均衡,降低运维成本,实现高可用性。哨兵通过检测主观下线和客观下线状态,以及选举Leader Sentinel来协调故障转移。Raft算法在其中用于领导者选举和状态一致性。哨兵模式通过综合考虑多种因素选举新主服务器并执行故障转移,保障集群稳定运行。
53 0
深入剖析Redis哨兵模式的原理和应用
|
17天前
|
NoSQL Redis
Redis入门到通关之Redis主从数据同步原理
Redis入门到通关之Redis主从数据同步原理
26 0
|
17天前
|
存储 NoSQL Redis
Redis入门到通关之Redission原理
Redis入门到通关之Redission原理
21 0
|
17天前
|
缓存 NoSQL 算法
【redis】布隆过滤器(Bloom Filter)原理解析与应用
【redis】布隆过滤器(Bloom Filter)原理解析与应用
22 1
|
17天前
|
监控 NoSQL 算法
Redis 搭建哨兵集群
Redis 搭建哨兵集群
21 1
|
1月前
|
存储 NoSQL 算法
09- Redis分片集群中数据是怎么存储和读取的 ?
Redis分片集群使用哈希槽分区算法,包含16384个槽(0-16383)。数据存储时,通过CRC16算法对key计算并模16383,确定槽位,进而分配至对应节点。读取时,根据槽位找到相应节点直接操作。
68 12