谈话ZooKeeper(一个)分析ZooKeeper的Quorums机制--预防Split-Brain问题
使用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
版权声明:本文博客原创文章。博客,未经同意,不得转载。
谈话ZooKeeper(一个)分析ZooKeeper的Quorums机制--预防Split-Brain问题的更多相关文章
- 161209、简要分析ZooKeeper基本原理及安装部署
一.ZooKeeper 基本概念 1.ZooKeeper 是什么? Zookeeper官网地址: http://zookeeper.apache.org/ Zookeeper官网文档地址:http:/ ...
- [转]分析zookeeper能做什么
Zookeeper是hadoop的一个子项目,虽然源自hadoop,但是我发现zookeeper脱离hadoop的范畴开发分布式框架的运用越来越多.今天我想谈谈zookeeper,本文不谈如何使用zo ...
- zookeeper的下载安装和选举机制(zookeeper一)
1. 简要概述 Zookeeper是一个开源的分布式的,为分布式应用提供协调服务的框架.Zookeeper从设计模式角度来理解:是一个基于观察者模式设计的分布式服务管理框架它负责存储和管理大家都关心的 ...
- 【Zookeeper系列】ZooKeeper机制架构(转)
原文链接:https://www.cnblogs.com/sunddenly/p/4133784.html 一.ZooKeeper权限管理机制 1.1 权限管理ACL(Access Control L ...
- Zookeeper原理分析之存储结构Snapshot
Zookeeper内存结构 Zookeeper数据在内存中的结构类似于linux的目录结构,DataTree代表这个目录结构, DataNode代表一个节点.DataTree默认初始化三个目录:&qu ...
- java架构之路-(分布式zookeeper)zookeeper集群配置和选举机制详解
上次博客我们说了一下zookeeper的配置文件,以及命令的使用https://www.cnblogs.com/cxiaocai/p/11597465.html.我们这次来说一下我们的zookeepe ...
- Kafka源码系列之源码分析zookeeper在kafka的作用
浪尖的kafka源码系列以kafka0.8.2.2源码为例给大家进行讲解的.纯属个人爱好,希望大家对不足之处批评指正. 一,zookeeper在分布式集群的作用 1,数据发布与订阅(配置中心) 发布与 ...
- 从头开始搭建一个dubbo+zookeeper平台
本篇主要是来分享从头开始搭建一个dubbo+zookeeper平台的过程,其中会简要介绍下dubbo服务的作用. 首先,看下一般网站架构随着业务的发展,逻辑越来越复杂,数据量越来越大,交互越来越多之后 ...
- 搭建一个dubbo+zookeeper平台
本篇主要是来分享从头开始搭建一个dubbo+zookeeper平台的过程,其中会简要介绍下dubbo服务的作用. 首先,看下一般网站架构随着业务的发展,逻辑越来越复杂,数据量越来越大,交互越来越多之后 ...
随机推荐
- USACO comehome Dijkstra
USER: Kevin Samuel [kevin_s1] TASK: comehome LANG: C++ Compiling... Compile: OK Executing... Test 1: ...
- ubuntu12.04 安装和配置jdk1.7
第一步:下载jdk-7-linux-i586.tar.gz wget -c http://download.oracle.com/otn-pub/java/jdk/7/jdk-7-linux-i586 ...
- zabbix通过脚本发送短信
zabbix通过脚本发送短信 原则 和zabbix电子邮件是一样的,他们是action内部配置,司的api来完毕.当然网上有不少利用139邮箱来发的,这个事实上算调用email的一种,这里复述的是调用 ...
- bridge pattern
10.5 桥接模式总结 桥接模式是设计Java虚拟机和实现JDBC等驱动程序的核心模式之一,应用较为广泛.在软件开发中如果一个类或一个系统有多个变化维度时,都可以尝试使用桥接模式对其进行设计.桥接模 ...
- Android SwipeRefreshLayout 官方下拉刷新控件介绍
转载请标明出处:http://blog.csdn.net/lmj623565791/article/details/24521483 下面App基本都有下拉刷新的功能,以前基本都使用XListView ...
- Quartz CronTrigger运用
CronTrigger配置格式: 格式: [秒] [分] [小时] [日] [月] [周] [年] 序号 说明 是否必填 同意填写的值 同意的通配符 1 秒 是 0-59 , - ...
- lsb_release: command not found 解决方法(转)
问题:通过lsb_release -a 是查看linux系统版本时报错,具体的解决办法如下: [root@localhost ~]# lsb_release -a-bash: lsb_release: ...
- AndroidAnnotations说明—AndroidAnnotations它是如何工作的?
AndroidAnnotations它的工作原理很easy,它使用标准java注塑加工工具,自己主动加她一个额外的步骤生成源代码编译. 源代码是什么?每个增强的类.比方每个用@EAct ...
- 乐在其中设计模式(C#) - 单例模式(Singleton Pattern)
原文:乐在其中设计模式(C#) - 单例模式(Singleton Pattern) [索引页][源码下载] 乐在其中设计模式(C#) - 单例模式(Singleton Pattern) 作者:weba ...
- perl操作sqlserver实现BCP
#!C:\Perl64\bin #由BCP备份和恢复SQLSERVER指定表 use 5.014; #加载用户和password型材 my $username ; my $passwd; ##得到us ...