[梁山好汉说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. wepy中组件之间通信方法

    events events是WePY组件事件处理函数对象,存放响应组件之间通过broadcast.emit.$invoke所传递的事件的函数. $broadcast —— 父往子传 $broadcas ...

  2. Java练习 SDUT-1580_闰年

    闰年 Time Limit: 1000 ms Memory Limit: 32768 KiB Problem Description 时间过得真快啊,又要过年了,同时,我们的人生也增长了一年的阅历,又 ...

  3. Helm V3 新版本发布

    Helm v3.0.0 Alpha 1 is coming! Helm 作为 Kubernetes 体系的包管理工具,已经逐渐成为了事实上的应用分发标准.根据 2018 年 CNCF 的一项云原生用户 ...

  4. H3C V.24接口线缆

  5. jieba完整文档

    jieba “结巴”中文分词:做最好的 Python 中文分词组件 "Jieba" (Chinese for "to stutter") Chinese tex ...

  6. poj 3181 Dollar Dayz(完全背包)

    Dollar Dayz Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 5419   Accepted: 2054 Descr ...

  7. pytorch nn.LSTM()参数详解

    输入数据格式:input(seq_len, batch, input_size)h0(num_layers * num_directions, batch, hidden_size)c0(num_la ...

  8. jstack简介

    jstack:Java进程中线程的堆栈信息跟踪工具 功能简介 jstack常用来打印Java进程/core文件/远程调试端口的Java线程堆栈跟踪信息,包含当前虚拟机中所有线程正在执行的方法堆栈信息的 ...

  9. 【t013】无聊的军官

    Time Limit: 1 second Memory Limit: 32 MB [问题描述] 每个学年的开始,高一新生们都要进行传统的军训.今年有一个军训教官十分奇怪,他为了测试学员们的反应能力,每 ...

  10. MySQL中Index Merge简介

    索引合并优化 官网翻译 MySQL5.7文档 索引合并是为了减少几个范围(type中的range类型:range can be used when a key column is compared t ...