[梁山好汉说IT] 如何理解脑裂问题

本文通过梁山好汉的例子来加深理解脑裂问题。

1. 问题描述

Split-brain, 就是在集群环境中,因为异常情况发生后,产生两个子集群。每个子集群都选出一个leader(master)节点。最后互相竞争资源导致故障。

2. 如何解决?

概括起来有几种常见的办法(包括软件,硬件),比如上级干预,内部联络,自己反省,延时处理.

我们假设梁山好汉108人失散了,各54人,宋江卢俊义各率领一半,都以为另外一半挂了,就分别成立了梁山忠义堂。那么双方见面之后,怎么决定谁是老大呢?

a. 上级干预: 使用额外的探测节点,当双方直连断开之后,使用一个约定好的共同节点来探测是否是直连故障。 回到梁山这里,就是两帮好汉都去九天玄女庙,让玄女娘娘指定谁是老大.

b. 专线直连 假如宋江这伙里面有解珍,卢俊义这里有解宝。哥俩之间有特殊心跳联系。所以两帮人知道大家实际都没挂,所以不会分别内部选举而是等待重聚时候再选老大

c. 过半机制 只有某个子集群超过原集群数目一半,才允许选出老大 梁山这里,因为都是54人,都不超过一半,所以都不能选举,只能等待重聚时候选老大

d. 延长选举时间 比如es有参数,据此参数决定从节点访问主节点后如果n秒之内没有回复则默认主节点挂了。这个参数可以调大。 梁山这里,就是约好了如果失散之后1个月联系不上,才能选举老大。现在调整为1年之后才能选举。那么1年之内其实重聚的可能性很大。

3. 具体案例

a. Zookeeper采用“过半机制”解决

在领导者选举过程中,如果某台zkserver获得了超过半数的选票,则此zkServer就可以成为leader了。 关键代码:

return (set.size() > n/2);
n 表示旧集群中zkServer参与者的数目
set标是故障之后,本子集群的参与者个数。

关键点是:必须超过原集群的半数才能成为leader。这就保证了无论怎么出现故障分裂,所以子集群中或者都没有leader,或者只有一个leader(该子集群超过半数了)。比如原来6台,n/2=3。如果分裂成两个3台的子集群,则都没有leader,如果一个4台,一个2台,则4台的会成为leader.

b. ElasticSearch有调节参数

 discovery.zen.ping_timeout:3    

此参数指定从节点访问主节点后如果3秒之内没有回复则默认主节点挂了,我们可以适当的把它改大,改成5到6秒这样可以减少出现脑裂的概率。

discovery.zen.minimum_master_nodes:1

该参数的意思是,当具备成为主节点的从节点的个数满足这个数字且都认为主节点挂了则会进行选举产生新的主节点。 例如:es集群有三个从节点有资格成为主节点,这时这三个节点都认为主节点挂了则会进行选举,此时如果这个参数的值是4则不会进行选举。 我们可以适当的把这个值改大,减少出现脑裂的概率,官方给出的建议是(n/2)+1。

4. 参考:

https://my.oschina.net/u/236698/blog/525413

https://mp.weixin.qq.com/s/VlkK_Lb-ZlGcYi-QfHC22Q

https://blog.csdn.net/ty4315/article/details/52491799

[梁山好汉说IT] 如何理解脑裂问题的更多相关文章

  1. [梁山好汉说IT] 如何理解一致性Hash

    [梁山好汉说IT] 如何理解一致性Hash 0x00 摘要 用梁山酒店分配客人为例来理解一致性Hash. 0x01. 与经典哈希方法的对比 经典哈希方法:总是假设内存位置的数量是已知且固定不变的.因为 ...

  2. ES脑裂问题

    脑裂:一个集群中的不同节点对于集群的状态有了不一样的理解 ES集群的总体状态是red,本来9个节点的集群在结果中只显示4个节点在线: 正常情况下,集群中的所有节点应该对集群中的master的选择是一致 ...

  3. centos HA高可用集群 heartbeat搭建 heartbeat测试 主上停止heartbeat服务 测试脑裂 两边都禁用ping仲裁 第三十二节课

    centos   HA高可用集群  heartbeat搭建 heartbeat测试  主上停止heartbeat服务  测试脑裂  两边都禁用ping仲裁  第三十二节课 heartbeat是Linu ...

  4. keepalived脑裂问题

    一.对脑裂的理解 在高可用(HA)系统中,当联系2个节点的“心跳线”断开时,本来为一整体.动作协调的HA系统,就分裂成为2个独立的个体.由于相互失去了联系,都以为是对方出了故障.两个节点上的HA软件像 ...

  5. [梁山好汉说IT] 容器概念在北宋社会的应用

    [梁山好汉说IT] 容器概念在北宋社会的应用 0x00 摘要 如何对没有软件开发经验的人解释容器? 集装箱真的能够完美解释容器嘛? 除了集装箱还有其他常见实体能够解释容器嘛? 我找到了一个能够 和集装 ...

  6. [梁山好汉说IT] 熵的概念 & 决策树ID3如何选择子树

    [梁山好汉说IT] 熵的概念 & 决策树ID3如何选择子树 0x00 摘要 记录对概念的理解,用梁山好汉做例子来检验是否理解正确. 0x01 IT概念 1. 事物的信息和信息熵 1.1 事物的 ...

  7. 脑裂 CAP PAXOS 单元化 网络分区 最终一致性 BASE

    阿里技术专家甘盘:浅谈双十一背后的支付宝LDC架构和其CAP分析 https://mp.weixin.qq.com/s/Cnzz5riMc9RH19zdjToyDg 汤波(甘盘) 技术琐话 2020- ...

  8. 【Redis集群原理专题】分析一下相关的Redis集群模式下的脑裂问题!

    技术格言 世界上并没有完美的程序,但是我们并不因此而沮丧,因为写程序就是一个不断追求完美的过程. 什么是脑裂 字面含义 首先,脑裂从字面上理解就是脑袋裂开了,就是思想分家了,就是有了两个山头,就是有了 ...

  9. Zookeeper的选举算法和脑裂问题

    ZK介绍 ZK = zookeeper ZK是微服务解决方案中拥有服务注册发现最为核心的环境,是微服务的基石.作为服务注册发现模块,并不是只有ZK一种产品,目前得到行业认可的还有:Eureka.Con ...

随机推荐

  1. @总结 - 10@ Miller-Rabin素性测试与Pollard-Rho因数分解

    目录 @1 - 素性测试:Miller-Rabin算法@ @1.1 - 算法来源@ @1.2 - 算法描述@ @1.3 - 算法实现@ @2 - 因数分解:Pollard-Rho算法@ @2.0 - ...

  2. 【Android内存机制分析】了解Android堆和栈

    昨天用Gallery做了一个图片浏览选择开机画面的功能,当我加载的图片多了就出现OOM问题.以前也出现过这个问题,那时候并没有深究.这次打算好好分析一下Android的内存机制. 因为我以前是做VC+ ...

  3. hdu 3272 Mission Impossible

    Mission Impossible Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Other ...

  4. Project Euler Problem 21-Amicable numbers

    先说最暴力的算法,直接对一万内的每个数字暴力分解因子(对每个数字的时间复杂度是O(sqrt(n)的),然后,用个数组记录下来因子和,然后寻找 亲密数. 好一点:要先打个素数表,然后对每个数字,分解素因 ...

  5. Python--day71--ORM分组补充

    1,ORM映射对应的sql语句: 2,QuerySet QuerySet方法大全 ########################################################### ...

  6. 2019-9-2-本文说如何显示SVG

    title author date CreateTime categories 本文说如何显示SVG lindexi 2019-09-02 12:57:38 +0800 2018-2-13 17:23 ...

  7. 【codeforces 766D】Mahmoud and a Dictionary

    time limit per test4 seconds memory limit per test256 megabytes inputstandard input outputstandard o ...

  8. python模块之序列化模块

    序列化 """ 序列--字符串 序列化--其他数据类型转化为字符串数据类型 反序列化--字符串转化为其他数据类型 """ json模块 &q ...

  9. Pandas库之DataFrame

    Pandas库之DataFrame 1 简介 DataFrame是Python中Pandas库中的一种数据结构,它类似excel,是一种二维表. 或许说它可能有点像matlab的矩阵,但是matlab ...

  10. 【js】 vue 2.5.1 源码学习(十二)模板编译

    大体思路(十) 本节内容: 1. baseoptions 参数分析 2. options 参数分析 3. parse 编译器 4. parseHTNL 函数解析 // parse 解析 parser- ...