什么是脑裂

脑裂(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

脑裂是什么?Zookeeper是如何解决的?相关推荐

  1. it 脑裂_脑裂是什么?Zookeeper是如何解决的?

    什么是脑裂 脑裂(split-brain)就是"大脑分裂",也就是本来一个"大脑"被拆分了两个或多个"大脑",我们都知道,如果一个人有多个大 ...

  2. 关于ZooKeeper集群脑裂及其解决方案

    本文来说下ZooKeeper集群脑裂及其解决方案 文章目录 概述 Zookeeper集群节点为什么要部署成奇数 Zookeeper集群中的"脑裂"场景说明 Zookeeper集群& ...

  3. 脑裂是什么,zk是如何解决脑裂问题的

    什么是脑裂 脑裂(split-brain)就是"大脑分裂",也就是本来一个"大脑"被拆分了两个或多个"大脑",我们都知道,如果一个人有多个大 ...

  4. 分布式系统的“脑裂”到底是个什么玩意?

    目前大多数项目都在往分布式上发展,一旦系统采用分布式系统,便会引入更多复杂场景和解决方案.比如,当你在系统中使用了Elasticsearch.ZooKeeper集群时,你是否了解过集群的"脑 ...

  5. [转]HA高可用集群中“脑裂“问题解决

    什么是脑裂(split-brain) 在"双机热备"高可用(HA)系统中,当联系两个节点的"心跳线"断开时(即两个节点断开联系时),本来为一个整体.动作协调的H ...

  6. 【Zookeeper】Zookeeper集群“脑裂”问题处理大全

    本文重点分享Zookeeper脑裂问题的处理办法.ZooKeeper是用来协调(同步)分布式进程的服务,提供了一个简单高性能的协调内核,用户可以在此之上构建更多复杂的分布式协调功能. 脑裂通常会出现在 ...

  7. Zookeeper集群脑裂问题

    关于集群中的"脑裂"问题,之前已经在这里详细介绍过,下面重点说下Zookeeper脑裂问题的处理办法.ooKeeper是用来协调(同步)分布式进程的服务,提供了一个简单高性能的协调 ...

  8. Zookeeper和分布式环境中的假死脑裂问题(转)

    Zookeeper和分布式环境中的假死脑裂问题 最近和同事聊天无意间发现他们的系统也存在脑裂的问题.想想当初在我们的系统中为了解决脑裂花了非常大的功夫,现在和大家一起讨论下脑裂,假死等等这些问题和解决 ...

  9. 【zookeeper】zookeeper 脑裂问题

    1.概述 转载:https://blog.csdn.net/yjp198713/article/details/79400927 1.1 为什么zookeeper要部署基数台服务器? 所谓的zooke ...

最新文章

  1. GPU算力免费用?百度AI Studio两周年惊喜活动开启
  2. 硬件知识:固态硬盘相关知识介绍
  3. 4个空格和一个tab有什么区别_火花塞为什么一换就是4个?只换一个不行吗?
  4. 终于知道以后该咋办了!
  5. Git submodule 知识总结
  6. SQL中的ROW_NUMBER()和while循环对每一行执行操作
  7. css实现面包屑导航
  8. 湖北省金税盘服务器链接网站,湖北省网上税务局入口:https://wsswj.hb-n-tax.gov.cn...
  9. 远程连接工具rdcman
  10. UReport2导出word报错
  11. 差分管电路图_电子管差分放大电路改造方案
  12. vue+element项目,升级element后带tabs模块的页面。导致页面崩溃白屏问题?
  13. MacBook Air 2013全新安装Win7
  14. 我想我是海 梦坠西子湖
  15. 旁注、目录越权、跨库、CDN绕过
  16. c语言scandf用法,scan的用法总结大全
  17. 127.0.0.1:xxxx端口映射到物理机IP
  18. Python+Vue计算机毕业设计校园旧物交易系统iv9w4(源码+程序+LW+部署)
  19. Linux下Python脚本的编写(二)
  20. Linux----高级IO(参考UNP)

热门文章

  1. Google Open API授权认证体系
  2. 收款鸿蒙系统手机,鸿蒙系统+ 升降镜头双重加持,荣耀智慧屏你心动没?
  3. 快餐业的噩梦?机器人一个小时可做150个汉堡 | 深度
  4. 为什么说没有物联网,就没有 AI
  5. PR/AE等应用程序无法正常启动0xc000007b/0xc0000005,应如何解决?
  6. 通过机器学习得到样本的特征权重
  7. Can‘t resolve ‘path‘ in ‘/Users/72cy-0101-01-0017/Desktop/vue3-elementplus-admin/src/utils‘
  8. 新办法│小帮软件机器人援助电子政务公共平台解决“重复录入”难题
  9. 云队友丨知乎高赞:35岁失业的中年人,都去了哪儿?
  10. HTML游戏黑屏,-七雄争霸官方网站-腾讯游戏-腾讯首款休闲战争网页游戏