前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >Redis Cluster节点故障探测算法笔记

Redis Cluster节点故障探测算法笔记

作者头像
颇忒脱
发布于 2019-07-10 09:14:06
发布于 2019-07-10 09:14:06
8970
举报

本笔记是对Redis Cluster Spec - Failure Detection的归纳总结

状态转换图

  • 每个Node在本地维护了一张其他Node的状态表,并根据Failure Detection算法更新这张表里的Node的状态
  • 每个Node可以自行把其他Node的状态设置为GOOD(这个状态在文档和源码中均不存在,等价于不是PFAIL也不是FAIL)、PFAIL。
  • 如果要把其他Node的状态设置为FAIL则需要大多数Master Node同意才行,一旦设置成功要将这个消息传播给所有其他能连接的Node,其他Node收到这个信息后也要更新本地Node状态表,将Failed Node的状态更新为FAIL。

下面是状态转换图,例举的是Node A观察Node B的例子:

少数派和多数派

多数派:拥有多数Master的一方,可含有Slave。

少数派:拥有少数Master的一方,可含有Slave。

少数派视角

少数派只会看到大多数Master处于PFAIL/FAIL状态,0-所有Slave处于PFAIL/FAIL状态。

多数派视角

多数派只会看到少数Master处于PFAIL/FAIL状态,0-所有Slave处于PFAIL/FAIL状态。

不会存在以下情况:多数派看到大多数Master处于FAIL状态,因为大多数Master处于FAIL就意味着活着的Master们变成了少数派,这就矛盾了。

一些自问自答

Q:为何少数派能够看到Master处于FAIL状态?不是说要大多数Master同意才能变成FAIL状态吗? A:考虑这个情况,在Partition发生的前一秒某些Master被决定为FAIL,随即Partition发生,那么在少数派眼里这些Master依然是处于FAIL状态的。

Q:这里的每个Node是Slave还是Master呢? A:随便,只要是Node就行。

Q:既然每个Master独占的负责Slots,那么少数派继续工作为啥不可以,反正各自管各自的。 A:因为在多数派方,这个Master有可能会被Slave顶替,如果允许少数派继续工作,那么就会形成两个Master,造成split brain

Q:少数派节点是如何知道自己应该停止工作的? A:它发现大多数Master变成了PFAIL / FAIL 状态时,就知道自己不能工作了,Redis源码里是这么写的

Q:多数派节点时如何知道自己应该停止工作的? A:如果这个Cluster要求所有Slots被覆盖,那么当有一个Master处于FAIL状态时,便停止工作,见源码。如果不要求,则继续工作,只不过部分Slots的操作会报错。

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
Redis Cluster配置传播及故障恢复笔记
本笔记是对Redis Cluster Spec - Configuration handling, propagation, and failovers的归纳总结。
颇忒脱
2019/07/15
7590
Redis Cluster配置传播及故障恢复笔记
Redis命令详解:Cluster
前文中我们介绍过了Redis的三种集群方案,没有了解过的同学可以自行前往。今天要介绍的Redis的亲儿子Cluster相关的命令。
Jackeyzhe
2020/03/11
1.1K0
redis cluster(5)- redis集群应用和问题总结
1、新加节点,如果没有分配slot,没有执行redis-trib.rb reshard,
黄规速
2022/04/14
1.2K0
玩转Redis集群之Cluster
前面我们介绍了国人自己开发的Redis集群方案——Codis,Codis友好的管理界面以及强大的自动平衡槽位的功能深受广大开发者的喜爱。今天我们一起来聊一聊Redis作者自己提供的集群方案——Cluster。希望读完这篇文章,你能够充分了解Codis和Cluster各自的优缺点,面对不同的应用场景可以从容的做出选择。
Jackeyzhe
2020/03/11
8650
玩转Redis集群之Cluster
018.Redis Cluster故障转移原理
当集群内某个节点出现问题时,需要通过一种健壮的方式保证识别出节点是否发生了故障。Redis集群内节点通过ping/pong消息实现节点通信,消息不但可以传播节点槽信息,还可以传播其他状态如:主从状态、节点故障等。因此故障发现也是通过消息传播机制实现的,主要环节包括:主观下线(PFAIL-Possibly Fail)和客观下线(Fail)
CoderJed
2020/03/27
6.1K1
Redis Cluster流程原理
Redis 3.0之后,节点之间通过去中心化的方式,提供了完整的sharding、replication(复制机制仍使用原有机制,并且具备感知主备的能力)、failover解决方案,称为Redis Cluster。即:将proxy/sentinel的工作融合到了普通Redis节点里。后面将介绍Redis Cluster这种模式下,水平拆分、故障转移等需求的实现方式。
JavaEdge
2018/08/22
1.6K0
Redis Cluster流程原理
一万字详解 Redis Cluster Gossip 协议
大家好,我是历小冰,今天来讲一下 Reids Cluster 的 Gossip 协议和集群操作,文章的思维导图如下所示。
程序员历小冰
2020/12/03
2.9K0
一万字详解 Redis Cluster Gossip 协议
Redis Cluster深入与实践
1. redis介绍 www.redis.io redis是一个基于内存的K-V存储数据库。支持存储的类型有string,list,set,zset(sorted set),hash等。这些数据类型都支持push/pop、add/remove及取交集并集和差集及更丰富的操作,而且这些操作都是原子性的。redis支持各种不同方式的排序。保证效率的情况下,数据缓存在内存中。同时redis提供了持久化策略,不同的策略触发同步到磁盘或者把修改操作写入追加的记录文件,在此基础上实现了master-slave。 它是一
aoho求索
2018/04/03
1.6K0
Redis Cluster深入与实践
redis cluster
在企业中 如果缓存数据不是很多的时候5g左右可以使用 1master+多个slave来提高读了吞吐量 +哨兵来保证高可用 如果缓存数据很多的时候 一般使用redis cluster来搭建集群。。
丁D
2022/08/12
4950
Redis Cluster集群搭建及节点的添加、删除
Redis Cluster集群搭建及节点的添加、删除
Java架构师必看
2021/05/14
1.7K0
Redis Cluster集群搭建及节点的添加、删除
深入理解Redis Cluster
Redis Cluster采用虚拟槽分区,所有的key根据哈希函数映射到0~16383槽内,计算公式:
星哥玩云
2022/08/18
3710
知道 Redis-Cluster 么?说说其中可能不可用的情况
一个集群模式的官方推荐最小最佳实践方案是 6 个节点,3 个 Master 3 个 Slave 的模式,如 图00 所示。
干货满满张哈希
2021/04/12
5480
知道 Redis-Cluster 么?说说其中可能不可用的情况
【Redis】redis cluster 添加 删除 重分配 节点
如果主节点有从节点,将从节点转移到其他主节点 如果主节点有slot,去掉分配的slot,然后在删除主节点
用户5522200
2019/06/02
2.7K0
Redis高可用-Cluster
Redis有三种高可用方案:主从,哨兵(sentinel),集群(cluster)。哨兵和集群模式都是基于redis主从来实现的,普通的redis主从无法实现自动的高可用切换。
数据库架构之美
2021/03/16
4370
Redis Cluster集群应用与原理
与memcached客户端支持分布式方案不同,Redis更倾向于在服务端构建分布式存储。
JavaEdge
2022/11/30
6530
Redis Cluster集群应用与原理
KubeSphere安装redis集群,全程超带劲
redis是在开发过程中经常用到的缓存中间件,在生产环境中为了考虑稳定性和高可用一般为集群模式的部署。
余生大大
2022/11/02
1K0
KubeSphere安装redis集群,全程超带劲
碾压阿里面试官!RedisCluster集群全网最全知识点!
并发量大了 =》 主从复制解决 =》主从稳定性 =》哨兵解决 =》单节点的写能力、存储能力、动态扩容都很麻烦 =》集群Cluster解决。
JavaEdge
2021/05/06
8140
碾压阿里面试官!RedisCluster集群全网最全知识点!
redis cluster(3)- redis集群管理:伸缩,故障
Redis Cluster中有一个16384长度的槽的概念,他们的编号为0、1、2、3……16382、16383。这个槽是一个虚拟的槽,并不是真正存在的。正常工作的时候,Redis Cluster中的每个Master节点都会负责一部分的槽,当有某个key被映射到某个Master负责的槽,那么这个Master负责为这个key提供服务,至于哪个Master节点负责哪个槽,这是可以由用户指定的,也可以在初始化的时候自动生成(redis-trib.rb脚本)。这里值得一提的是,在Redis Cluster中,只有Master才拥有槽的所有权,如果是某个Master的slave,这个slave只负责槽的使用,但是没有所有权。
黄规速
2022/04/14
7360
redis cluster(3)- redis集群管理:伸缩,故障
redis cluster 的核心原理分析:gossip 通信、jedis smart 定位、主备切换
gossip 的延迟在我们上一章节中迁移 slots 时(reshard),去做另外一个操作,会发现 configuration error,需要等待一会才能达成一致,配置数据才能同步成功
HUC思梦
2020/09/03
1.5K1
redis cluster 的核心原理分析:gossip 通信、jedis smart 定位、主备切换
Docker搭建Redis Cluster集群
Redis Cluster采用无中心结构,每个节点保存数据和整个集群状态,每个节点都和其他所有节点连接。
子润先生
2021/06/23
8.5K2
相关推荐
Redis Cluster配置传播及故障恢复笔记
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档