博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
谈话ZooKeeper(一个)分析ZooKeeper的Quorums机制--预防Split-Brain问题
阅读量:6095 次
发布时间:2019-06-20

本文共 1355 字,大约阅读时间需要 4 分钟。

使用ZooKeeper学生们应该看到一个参数。它是ZooKeeper超过一半的群集必须节点(Majority)可用的。外来人才在整个集群中可用。在大多数情况下,这种说法是正确的。

谈论这篇文章背后的原因。

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

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”问题。

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

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

你可能感兴趣的文章
mysql Inoodb 内核
查看>>
Redis 基础
查看>>
UITextField的returnkey点击事件
查看>>
特殊字体引用
查看>>
owlcar 用法心得 自定义导航
查看>>
数据结构 学习笔记03——栈与队列
查看>>
DB2 OLAP函数的使用(转)
查看>>
数学之美系列二十 -- 自然语言处理的教父 马库斯
查看>>
Android实现自定义位置无标题Dialog
查看>>
面试总结
查看>>
Chrome浏览器播放HTML5音频没声音的解决方案
查看>>
easyui datagrid 行编辑功能
查看>>
类,对象与实例变量
查看>>
HDU 2818 (矢量并查集)
查看>>
【转】php字符串加密解密
查看>>
22. linux 常用命令
查看>>
ASP.Net 使用GridView模板删除一行的用法
查看>>
(十六)字段表集合
查看>>
JPGraph
查看>>
navicat for mysql 10.0.11 注册码
查看>>