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

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

作者头像
颇忒脱
发布2019-07-10 17:14:06
8750
发布2019-07-10 17:14:06
举报
文章被收录于专栏:颇忒脱的技术博客

本笔记是对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 删除。

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

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 状态转换图
  • 少数派和多数派
    • 少数派视角
      • 多数派视角
      • 一些自问自答
      相关产品与服务
      云数据库 Redis®
      腾讯云数据库 Redis®(TencentDB for Redis®)是腾讯云打造的兼容 Redis 协议的缓存和存储服务。丰富的数据结构能帮助您完成不同类型的业务场景开发。支持主从热备,提供自动容灾切换、数据备份、故障迁移、实例监控、在线扩容、数据回档等全套的数据库服务。
      领券
      问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档