在使用zookeeper的过程中,我们经常会看到这样一些说法:

1.zookeeper cluster的节点数目必须是奇数。

2.zookeeper 集群中必须超过半数节点(Majority)可用,整个集群才能对外可用。

这个说法在大多数情况下是正确的。

实际上ZooKeeper提供了几种方式来认定整个集群是否可用,Majority只是其中的一种。

(http://zookeeper.apache.org/doc/r3.3.5/zookeeperInternals.html)

1. Majority Quorums

2. Weight

3. Hierarchy of groups

所谓整个集群是否可用,隐含的一个意思就是整个集群还能够选举出一个”Leader”。

ZooKeeper默认设置的是采用Majority Qunroms的方式来支持Leader选举。在ZooKeeper中Quorums有2个作用:

1. 集群中最少的节点数用来选举Leader保证集群可用

2. 通知客户端数据已经安全保存前集群中最少数量的节点数已经保存了该数据。一旦这些节点保存了该数据,客户端将被通知已经安全保存了,可以继续其他任务。而集群中剩余的节点将会最终也保存了该数据

采用Quoroms投票的方式来选举Leader主要是为了解决“Split-Brain”问题( http://linux-ha.org/wiki/Split_Brain)。

Split-Brain问题说的是1个集群如果发生了网络故障,很可能出现1个集群分成了两部分,而这两个部分都不知道对方是否存活,不知道到底是网络问题还是直接机器down了,所以这两部分都要选举1个Leader,而一旦两部分都选出了Leader, 并且网络又恢复了,那么就会出现两个Brain的情况,整个集群的行为不一致了。

所以集群要防止出现Split-Brain的问题出现,Quoroms是一种方式,即只有集群中超过半数节点投票才能选举出Leader。

这样的方式可以确保leader的唯一性,要么选出唯一的一个leader,要么选举失败.

ZooKeeper默认采用了这种方式。更广义地解决Split-Brain的问题,一般有3种方式:

1.  Quorums

2. 采用Redundant communications,冗余通信的方式,集群中采用多种通信方式,防止一种通信方式失效导致集群中的节点无法通信。

3. Fencing, 共享资源的方式,比如能看到共享资源就表示在集群中,能够获得共享资源的锁的就是Leader,看不到共享资源的,就不在集群中

理解了Quorums就不难理解为什么集群中的节点数一般配置为奇数。节点数配置成奇数的集群的容忍度更高。

比如3个节点的集群,Quorums = 2, 也就是说集群可以容忍1个节点失效,这时候还能选举出1个lead,集群还可用

比如4个节点的集群,它的Quorums = 3,Quorums要超过3,相当于集群的容忍度还是1,如果2个节点失效,那么整个集群还是无效的

所以4个节点的集群的容忍度 = 3个节点的集群的容忍度,但是4个节点的集群多了1个节点,相当于浪费了资源。

更极端的例子是100个节点的集群,如果网络问题导致分为两个部分,50个节点和50个节点,这样整个集群还是不可用的,因为按照Quorums的方式必须51个节点才能保证选出1个Leader。这时候可以采用Weight加权的方式,有些节点的权值高,有些节点的权值低,最后计算权值,只要权值过半,也能选出1个Leader

Zookeeper的Quorum机制-谈谈怎样解决脑裂(split-brain)相关推荐

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

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

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

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

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

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

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

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

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

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

  6. 算法高级(5)-分布式系统选举算法及脑裂

    一.选举算法定义 分布式中有这么一个疑难问题,客户端向一个分布式集群的服务端发出一系列更新数据的消息,由于分布式集群中的各个服务端节点是互为同步数据的,所以运行完客户端这系列消息指令后各服务端节点的数 ...

  7. Elasticsearch:理解 Master,Elections,Quorum 及 脑裂

    集群中的每个节点都可以分配多个角色:master.data.ingest.ml(机器学习)等. 我们在当前讨论中感兴趣的角色之一是 master 角色. 在 Elasticsearch 的配置中,我们 ...

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

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

  9. 高可用集群的脑裂问题

    本文来说下集群的脑裂问题 文章目录 什么是脑裂(split-brain) 集群脑裂产生的原因 如何预防HA集群脑裂 什么是Fence设备 本文小结 什么是脑裂(split-brain) 在" ...

最新文章

  1. sklearn中train_test_split函数中的random_state有什么用?
  2. 大话Web-Audio-Api
  3. 推荐系统-07-lambda架构
  4. 双眼融合训练一个月_视觉融合你知道多少
  5. 德 梅齐里亚克的砝码问题matlab,德梅齐里亚克砝码问题之解
  6. maven搭建多模块项目和管理
  7. Oracle数据块损坏的恢复实例
  8. 硬刚华为?小米在芬兰成立相机研究公司
  9. 计算机职称评定认可增刊吗,核心期刊增刊评定职称可以用吗?
  10. uvalive 3126 Taxi Cab Scheme
  11. DeepFaceLab
  12. 基于matlab的平面切割、旋转曲面等动图制作
  13. Nacos 服务注册中心
  14. 单片机及开发板介绍(学习笔记)
  15. Windows补丁查询地址
  16. 一般家用路由器买多大的合适_家用路由器多少兆合适
  17. 大众点评数据爬虫思路[更新版]
  18. 如何修复cdn服务器异常,cdn服务器连接异常怎么解决
  19. Es7.x使用RestHighLevelClient进行聚合操作
  20. IOS软件版本检测更新

热门文章

  1. ARM公司推出AI与机器学习用新型微处理器
  2. 在 GitHub 上创建一个 Swift 包:其实一点也不简单
  3. LVSHAproxyNginx区别
  4. 鼠标监听地图让我创造出个性的风格(地图开发)
  5. Linux 基金会发布《软件物料清单和网络安全准备度现状》报告
  6. 恭祝月圆·家圆·团圆
  7. QEMU CVE-2020-14364 漏洞分析(含 PoC 演示)
  8. 8.2-HSRP 第二次:重新搭建拓扑 //IOU
  9. fmri 实验设计 / 范式设计/ paradigm design
  10. MongoDB 安全权限访问控制