谈话ZooKeeper(一个)分析ZooKeeper的Quorums机制–预防Split-Brain问题

谈话ZooKeeper(一个)分析ZooKeeper的Quorums机制–预防Split-Brain问题

大家好,又见面了,我是全栈君,今天给大家准备了Idea注册码。

使用ZooKeeper学生们应该看到一个参数。它是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. 通知client数据已经安全保存前集群中最少数量的节点数已经保存了该数据。

一旦这些节点保存了该数据。client将被通知已经安全保存了。能够继续其它任务。而集群中剩余的节点将会终于也保存了该数据

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


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

所以集群要防止出现Split-Brain的问题出现,Quoroms是一种方式,即仅仅有集群中超过半数节点投票才干选举出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

版权声明:本文博客原创文章。博客,未经同意,不得转载。

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/117268.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • java 开发中常用的字符串工具类,StringUtil

    java 开发中常用的字符串工具类,StringUtil

    2022年3月7日
    33
  • django权限管理例子_django admin 自定义页面

    django权限管理例子_django admin 自定义页面前言上一篇我们分析了认证的源码,一个请求认证通过以后,第二步就是查看权限了,drf默认是允许所有用户访问权限源码分析源码入口:APIView.py文件下的initial方法下的check_per

    2022年8月7日
    7
  • EVE模拟器的安装使用

    EVE模拟器的安装使用文章目录模拟器的安装一、为什么要使用模拟器?二、模拟环境要求1、硬件配置要求:2、系统配置要求三、模拟器的配置流程1、安装vmwareworkstation虚拟软件2、下载eve工具3、安装搜狗浏览器4、安装EVE工具包5、打开EVE虚拟机6、测试eve是否能正常使用模拟器的使用模拟器的安装一、为什么要使用模拟器?以前学习网络,没有一个好的模拟器,大家都用真实的设备做实验,但是效率太低了,而且每次学习新的内容需要自己插拔网线,搭建新的拓扑(或者使用万能拓扑),这样学习的效率十分低下,而且十分困难,导致

    2022年6月12日
    35
  • SQL 增删改查语句

    SQL 增删改查语句选用那个数据库 USEtests 查看已有表格 SHOWTABLES 创建表格 createtablet cou idint cou namevarchar 20 查询语句 SELECTcou id cou nameFROMcour SELECT FROM

    2025年12月3日
    6
  • stream.map的用法_stream

    stream.map的用法_stream使用Stream流时发现其中的map方法使用不好容易理解,以一个小案例详细探讨Stream中map的使用。案例涉及知识点:1、Stream中of方法传入可变参数2、Stream中map元素类型转化方法3、Function匿名接口,自定义类匿名对象的使用4、Lambda表达式为了便于理解,首先借鉴其他博客中的说法,stream()优点无存储。stream不是一种数据结构,它只是某种数据源的一个视图,数据源可以是一个数组,Java容器或I/Ochannel等。为函数式编程而生。对strea

    2025年10月6日
    3
  • ubuntu 硬盘安装图解

    ubuntu 硬盘安装图解br MaverickMeer 10 启用了全新的安装程序 使得整个安装过程不但焕然一新 对那些不太熟悉 Linux 环境的用户来说也更容易使用了 br 在安装过程中 用户可以下载软件更新 安装无线网卡官方驱动 并完成对 MP3 音频文件 AdobeFlashPl 播放器 Java DVD 播放的支持 br 下面说说在 WindowsXP 系统下硬盘安装 Ubuntu10 10 双系统的全程图解 安装很快 30 分钟不到就能安装好 br 1 首先下

    2025年11月8日
    3

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号