什么是脑裂

脑裂(split-brain)就是“大脑分裂”,也就是本来一个“大脑”被拆分了两个或多个“大脑”,我们都知道,如果一个人有多个大脑,并且相互独立的话,那么会导致人体“手舞足蹈”,“不听使唤”。

脑裂通常会出现在集群环境中,比如ElasticSearch、Zookeeper集群,而这些集群环境有一个统一的特点,就是它们有一个大脑,比如ElasticSearch集群中有Master节点,Zookeeper集群中有Leader节点。

本篇文章着重来给大家讲一下Zookeeper中的脑裂问题,以及是如果解决脑裂问题的。

Zookeeper集群中的脑裂场景

对于一个集群,想要提高这个集群的可用性,通常会采用多机房部署,比如现在有一个由6台zkServer所组成的一个集群,部署在了两个机房:

正常情况下,此集群只会有一个Leader,那么如果机房之间的网络断了之后,两个机房内的zkServer还是可以相互通信的,如果不考虑过半机制,那么就会出现每个机房内部都将选出一个Leader。

这就相当于原本一个集群,被分成了两个集群,出现了两个“大脑”,这就是脑裂。

对于这种情况,我们也可以看出来,原本应该是统一的一个集群对外提供服务的,现在变成了两个集群同时对外提供服务,如果过了一会,断了的网络突然联通了,那么此时就会出现问题了,两个集群刚刚都对外提供服务了,数据该怎么合并,数据冲突怎么解决等等问题。

刚刚在说明脑裂场景时,有一个前提条件就是没有考虑过半机制,所以实际上Zookeeper集群中是不会出现脑裂问题的,而不会出现的原因就跟过半机制有关。

过半机制

在领导者选举的过程中,如果某台zkServer获得了超过半数的选票,则此zkServer就可以成为Leader了。

过半机制的源码实现其实非常简单:

public class QuorumMaj implements QuorumVerifier {private static final Logger LOG = LoggerFactory.getLogger(QuorumMaj.class);int half;// n表示集群中zkServer的个数(准确的说是参与者的个数,参与者不包括观察者节点)public QuorumMaj(int n){this.half = n/2;}// 验证是否符合过半机制public boolean containsQuorum(Set<Long> set){// half是在构造方法里赋值的// set.size()表示某台zkServer获得的票数return (set.size() > half);}}
复制代码

大家仔细看一下上面方法中的注释,核心代码就是下面两行:

this.half = n/2;
return (set.size() > half);
复制代码

举个简单的例子: 如果现在集群中有5台zkServer,那么half=5/2=2,那么也就是说,领导者选举的过程中至少要有三台zkServer投了同一个zkServer,才会符合过半机制,才能选出来一个Leader。

那么有一个问题我们想一下,选举的过程中为什么一定要有一个过半机制验证? 因为这样不需要等待所有zkServer都投了同一个zkServer就可以选举出来一个Leader了,这样比较快,所以叫快速领导者选举算法呗。

那么再来想一个问题,过半机制中为什么是大于,而不是大于等于呢?

这就是更脑裂问题有关系了,比如回到上文出现脑裂问题的场景:

当机房中间的网络断掉之后,机房1内的三台服务器会进行领导者选举,但是此时过半机制的条件是set.size() > 3,也就是说至少要4台zkServer才能选出来一个Leader,所以对于机房1来说它不能选出一个Leader,同样机房2也不能选出一个Leader,这种情况下整个集群当机房间的网络断掉后,整个集群将没有Leader。

而如果过半机制的条件是set.size() >= 3,那么机房1和机房2都会选出一个Leader,这样就出现了脑裂。所以我们就知道了,为什么过半机制中是大于,而不是大于等于。就是为了防止脑裂。

如果假设我们现在只有5台机器,也部署在两个机房:

此时过半机制的条件是set.size() > 2,也就是至少要3台服务器才能选出一个Leader,此时机房件的网络断开了,对于机房1来说是没有影响的,Leader依然还是Leader,对于机房2来说是选不出来Leader的,此时整个集群中只有一个Leader。

所以,我们可以总结得出,有了过半机制,对于一个Zookeeper集群,要么没有Leader,要没只有1个Leader,这样就避免了脑裂问题。

作者:1点25
链接:https://juejin.im/post/5d36c2f25188257f6a209d37
来源:掘金
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

脑裂是什么,zk是如何解决脑裂问题的相关推荐

  1. zk 是如何解决脑裂问题的

    脑裂概念解释 这里举例, 2 个机房, 6 个节点. 每个机房是 3 个节点 如果两个机房之间网络断开, 那么每个机房都需要重新选举 leader zk 通过过半原则解决脑裂问题. 过半原则: 超过半 ...

  2. keepalived高可用解决脑裂,nginx高可用配置详细篇

    第一章 keepalived介绍 keepalived软件起初是专为LVS负载均衡软件设计的,用来管理并监控LVS集群系统中各个服务节点状态,后来又加入了可以实现高可用的VRRP功能.此,keepal ...

  3. mfs分布式文件系统,分布式存储,高可用(pacemaker+corosync+pcs),磁盘共享(iscsi),fence解决脑裂问题

    一.MFS概述 MooseFS是一个分布式存储的框架,其具有如下特性: (1)通用文件系统,不需要修改上层应用就可以使用(那些需要专门api的dfs很麻烦!). (2)可以在线扩容,体系架构可伸缩性极 ...

  4. 耶鲁大学等机构提出的脑机接口软硬件协同设计,增加脑机的更大潜力

    脑机接口(brain -computer Interfaces, BCIs)或脑机接口(brain - machine Interfaces, BMIs)自从被医生和研究人员使用以来,已经为治疗神经系 ...

  5. 城市云脑研究之三,人工智能在城市云脑建设中的地位与作用

    作者:互联网进化论作者,计算机博士刘锋 城市云脑研究之二<城市云脑,像大脑一样建设智慧城市,基于互联网云脑的新架构>一文中,介绍到:"从1969年互联网诞生以来,人类从不同的方向 ...

  6. 脑机接口专栏 | 利用黎曼几何分析EEG脑电信号(二)

    关注微信公众号:脑机接口研习社 了解脑机接口最近进展 系列文章目录 脑机接口专栏 | 利用黎曼几何分析EEG脑电信号(一) 马可·康盖多(Marco Congedo)等人提出了一个可能的新一代脑机接口 ...

  7. 用意念就能控制的操作系统?这家华人团队做的脑机接口,3个电极实现脑波成像...

    萧箫 发自 凹非寺 量子位 报道 | 公众号 QbitAI 脑机接口,又有了新成果. 8月27日,华人脑机接口公司BrainCO,在哈佛大学展示了他们研发人类大脑智能操作系统BrainOS的初步成果. ...

  8. 五个脑叶的功能_有的人部分脑叶功能不一定都一样,什么意思?

    患者 有的人部分脑叶功能不一定都一样,什么意思?(男,30岁) 周晓梅医生 你好 是什么情况下 你想知道脑叶功能的 是你有什么不舒服么 周晓梅医生 脑叶分为额叶 枕叶 颞叶 顶叶 每个脑叶的功能绝大多 ...

  9. 图论在静息态和动态脑连接评估中的应用:构建脑网络的方法——graph theory to assess static and dynamic brain connectivity

    图论在静息态和动态脑连接评估中的应用:构建脑网络的方法 1.引言 2.静态结构和功能脑网络 A 用ROIs构建脑结构网络 B 用ROIs构建脑功能网络 C 用ICA节点构建的脑功能图 D 用仿真比较R ...

最新文章

  1. Thread.Join()用法的理解
  2. [入门]MyEclipse+tomcat搭建java web环境
  3. python工程技巧_重点来了!掌握这些Python技巧,将给你节省大量时间
  4. android组件用法说明,Android第三方控件PhotoView使用方法详解
  5. 机器学习的重新思考:人工智能如何学习“失忆”?
  6. 99%的程序员都在用Lombok,原理竟然这么简单?我也手撸了一个!|建议收藏
  7. string matching(HDU-6629)
  8. 服务端解决跨域问题的方案(一)
  9. C语言为四维数组申请动态内存空间的方法(一)
  10. Mysql Workbench详细使用教程
  11. 华为vrrp默认优先级_华为vrrp配置
  12. 如何用 Python 实时监控文件?方法有三种你喜欢哪一种?
  13. 创建一个jFinal项目
  14. 专题二:MATLAB矩阵处理
  15. 西南科技大学 SWUST OJ系统942: 逆置顺序表
  16. WES7 SKU WES7E和WES7P的区别
  17. C# 海康人脸识别设备初开发(一)
  18. font-family常用字体集合
  19. 长期在计算机房内会有多大辐射,机房辐射范围和预防辐射?计算机房里面适用的屏蔽隔离防辐射材料是什么?...
  20. 阿里云创建AccessKey 和 Access Key Secert

热门文章

  1. Bigtable: a distributed storage system for structured data论文阅读
  2. 获取windows系统时间
  3. scratch——这个电路仿真工具真不错
  4. 繁体批量转换工具:支持繁体字和简体本地化互转
  5. ipynb转化py文件
  6. Mysql技术-innodb引擎-笔记
  7. append()、appendChild() 和 innerHTML 的区别
  8. 原生微信小程序实现号码隐藏,用****代替
  9. 详细设计和概要设计的思考
  10. 如何查找oracle中的服务器端口号,客户端端口号,监听端口及号Enterprise Manager Console HTTP 端口