Zookeeper中的脑裂

简单点来说,脑裂(Split-Brain) 就是比如当你的 cluster 里面有两个节点,它们都知道在这个cluster 里需要选举出一个 master。那么当它们两个之间的通信完全没有问题的时候,就会达成共识,选出其中一个作为 master。但是如果它们之间的通信出了问题,那么两个结点都会觉得现在没有 master,所以每个都把自己选举成 master,于是 cluster 里面就会有两个 master。

对于Zookeeper来说有一个很重要的问题,就是到底是根据一个什么样的情况来判断一个节点死亡down掉了?在分布式系统中这些都是有监控者来判断的,但是监控者也很难判定其他的节点的状态,唯一一个可靠的途径就是心跳,Zookeeper也是使用心跳来判断客户端是否仍然活着。

使用ZooKeeper来做Leader HA基本都是同样的方式:每个节点都尝试注册一个象征leader的临时节点,其他没有注册成功的则成为follower,并且通过watch机制监控着leader所创建的临时节点,Zookeeper通过内部心跳机制来确定leader的状态,一旦leader出现意外Zookeeper能很快获悉并且通知其他的follower,其他flower在之后作出相关反应,这样就完成了一个切换,这种模式也是比较通用的模式,基本大部分都是这样实现的。但是这里面有个很严重的问题,如果注意不到会导致短暂的时间内系统出现脑裂,因为心跳出现超时可能是leader挂了,但是也可能是zookeeper节点之间网络出现了问题,导致leader假死的情况,leader其实并未死掉,但是与ZooKeeper之间的网络出现问题导致Zookeeper认为其挂掉了然后通知其他节点进行切换,这样follower中就有一个成为了leader,但是原本的leader并未死掉,这时候client也获得leader切换的消息,但是仍然会有一些延时,zookeeper需要通讯需要一个一个通知,这时候整个系统就很混乱可能有一部分client已经通知到了连接到新的leader上去了,有的client仍然连接在老的leader上,如果同时有两个client需要对leader的同一个数据更新,并且刚好这两个client此刻分别连接在新老的leade上,就会出现很严重问题。

这里做下小总结:
假死: 由于心跳超时(网络原因导致的)认为leader死了,但其实leader还存活着。

脑裂: 由于假死会发起新的leader选举,选举出一个新的leader,但旧的leader网络又通了,导致出现了两个leader ,有的客户端连接到老的leader,而有的客户端则连接到新的leader。

相关推荐

  1. Zookeeper

    2024-04-02 16:08:02       34 阅读
  2. Zookeeper解决方案

    2024-04-02 16:08:02       35 阅读
  3. Redis问题

    2024-04-02 16:08:02       47 阅读
  4. 【Redis】Redis集群原因及解决方案

    2024-04-02 16:08:02       34 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-04-02 16:08:02       94 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-04-02 16:08:02       100 阅读
  3. 在Django里面运行非项目文件

    2024-04-02 16:08:02       82 阅读
  4. Python语言-面向对象

    2024-04-02 16:08:02       91 阅读

热门阅读

  1. ApiFox 使用教程

    2024-04-02 16:08:02       87 阅读
  2. 程序员养生指南

    2024-04-02 16:08:02       41 阅读
  3. 一个基于大数据的派单管理系统

    2024-04-02 16:08:02       39 阅读
  4. gpt的构造和原理

    2024-04-02 16:08:02       34 阅读
  5. zookeeper 监控 与 JVM 设置

    2024-04-02 16:08:02       35 阅读
  6. 机器学习模型之随即森林

    2024-04-02 16:08:02       33 阅读
  7. 人工智能在现代科技中的应用和未来发展趋势

    2024-04-02 16:08:02       42 阅读
  8. 【React】在React中如何渲染空格

    2024-04-02 16:08:02       46 阅读
  9. 掏心窝子聊聊35岁了程序员何去何从?

    2024-04-02 16:08:02       39 阅读
  10. 基于springboot的高校线上心理咨询室

    2024-04-02 16:08:02       42 阅读
  11. 深入浅出SQL排序与函数

    2024-04-02 16:08:02       38 阅读
  12. AIGC重塑金融:AI大模型驱动的金融变革与实践

    2024-04-02 16:08:02       40 阅读