什么是脑裂

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

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

  1. it 脑裂_脑裂官方版下载

    脑裂游戏是一款非常烧脑的小手游,游戏并不是单一显示,而是单屏双模,严重考验玩家的眼脑反映和手上动作,你敢来试试吗?打不过可以叫帮手,快来IT猫扑下载试试吧! 脑裂手游介绍 虐心!烧脑!残手!瞎眼! 史 ...

  2. mysql脑裂_高可用 脑裂问题

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

  3. mysql 解决脑裂_解决keepalived脑裂问题

    解决keepalived脑裂问题 一.介绍 脑裂(split-brain):指在一个高可用(HA)系统中,当联系着的两个节点断开联系时,本来为一个整体的系统,分裂为两个独立节点,这时两个节点开始争抢共 ...

  4. java脑裂_zookeeper脑裂

    出现: 在搭建hadoop的HA集群环境后,由于两个namenode的状态不一,当active的namenode由于网络等原因出现假死状态,standby接收不到active的心跳,因此判断activ ...

  5. 五个脑叶的功能_脑叶功能.ppt

    脑叶功能 脑叶功能及其障碍 脑叶功能及其障碍 额叶功能及其障碍 颞叶功能及其障碍 顶叶功能及其障碍 枕叶功能及其障碍 丘脑功能及其障碍 小脑功能及其障碍 额叶功能及其障碍 额叶功能及其障碍 额叶功能及 ...

  6. JAVA的那个蜥蜴是什么_你知道爬行脑是什么脑吗?

    保罗.麦克里恩提出的"脑的三位一体"假设: 爬行动物脑 边缘系统(古哺乳动物脑) 新皮质(新哺乳动物脑) 也有人称三脑为:爬行脑.情绪脑和视觉脑. 先说说三个脑的由来,这三个脑是随 ...

  7. 从局部脑到全脑:时空域分层神经网络脑电情绪识别模型

    作者丨张玮玮 学校丨东北大学硕士生 研究方向丨情绪识别 引言 论文动机 近年来,脑电图 (EEG) 在处理情感识别方面得到了广泛的应用.虽然近年来人们提出了各种各样的脑电信号情感识别方法,但为了进一步 ...

  8. 生物-脑-脑容量:脑容量

    ylbtech-生物-脑-脑容量:脑容量 脑容量也称"颅容量".颅骨内腔容量大小,即大家所说的脑容量,以毫升为单位. 1.返回顶部 1. 中文名:脑容量亦    称:颅容量 概   ...

  9. 计算机科学与技术脑机接口,脑机接口技术

    脑-机接口是在人脑与计算机或其它电子设备之间建立的直接的交流和控制通道 ,通过这种通道 ,人就可以直接通过脑来表达想法或操纵设备 ,而不需要语言或动作 ,这可以有效增强身体严重残疾[1] 的患者与外界 ...

最新文章

  1. python 中*args 和 **kwargs的区别
  2. 面向自动驾驶领域的3D点云目标检测全栈学习路线!(单模态+多模态/数据+代码)...
  3. 你绝对能懂的“机器学习”(五)
  4. matlab-Grefenstette的编码与解码
  5. 数据源的配置和使用 视频下载
  6. 视频 人员统计 开源_开源人员的独特之处
  7. Linux下的free命令
  8. php添加导航和删除导航,新增/修改/删除ECSHOP后台左侧导航菜单
  9. [置顶]       Web开发百宝箱——提升网站档次的时尚 jQuery 图片滚动插件
  10. 安卓TV开发(前言)— AndroidTV模拟器初识与搭建
  11. web前端优化一些看法
  12. 黑苹果挂载不了分区_黑苹果驱动更新工具(黑苹果中的驱动精灵)
  13. 把时间当作朋友 读书笔记
  14. 从淘宝服务器IP地址服务获取IP地址信息的方法
  15. jeecg官网(jeecg官网 ios开发)
  16. VS2015的下载及安装
  17. AI:人工智能领域算法思维导图集合之有监督学习/无监督学习/强化学习类型的具体算法简介(预测函数/优化目标/求解算法)、分类/回归/聚类/降维算法模型选择思路、11类机器学习算法详细分类之详细攻略
  18. mysql中实现分类统计查询的步骤_在MySQL中如何进行分组统计查询
  19. 室内定位UWB全方位保障井下安全
  20. 郑州轻工业大学OJ python1102: 火车票退票费计算(函数专题)

热门文章

  1. java 安装多版本_一台电脑安装多个版本的jdk
  2. mysql受影响的行: 0_mysql执行update语句受影响行数是0
  3. shell softech 面料_跨越三分之一个世纪的软壳神话
  4. java判断ftp是否连接_校验FTP是否能正常连接的Java类
  5. linux 文件权限标识,linux文件权限学习 包括 特殊权限
  6. 初五迎财神!即使没有年终奖,也要来一发红包!
  7. SQL 查询总是先执行SELECT语句吗?你们都错了!
  8. 从零到两百台服务器的创业野蛮生长史
  9. 深入理解 RPC : 基于 Python 自建分布式高并发 RPC 服务
  10. eclipse java代码某一行需要修改注释_看看这些Java代码开发规范吧!你好,我好,大家好!...