概要
ZooKeeper是Hadoop的正式子项目,它是一个针对大型分布式系统的可靠协调系统,提供的功能包括:配置维护、名字服务、分布式同步、组服务等。
本文仅阐述ZooKeeper工作原理,对于如何使用ZooKeeper本文不做讨论。
ZooKeeper的特性
原子性:一个update操作不是成功就是失败,不会有第三种状态出现。
顺序性:在一个ZooKeeper集群中,其中一台ZooKeeper服务器上的消息a在消息b之前发布,那么在所有的ZooKeeper服务器上的消息a都会在消息b之前被发布,ZooKeeper会保持一致顺序。
实时性:对于每个client,ZooKeeper集群中的所有服务器都会保持实时更新制度,使得所有的服务视图都会是最新的。
统一镜像:client无论连接到集群中的哪一个ZooKeeper服务,都是得到同样的镜像视图。
可靠性:如果一个update请求被集群中其中某一台ZooKeeper服务接受了,那么就等于被所有ZooKeeper服务接受了;只有下次的update请求进来才会发生改变。
ZooKeeper 集群中存在的各种角色
角色名称 |
职责 |
领导者(Leader) |
就是ZooKeeper集群的老大,它不接受client的请求,是管理其他ZooKeeper服务的,只负责进行投票的发起和决议,最终更新状态 |
追随者(Follower) |
追随者(Follower)的上司是领导者(Leader),参与领导者(Leader)发起的投票,向下是面向客户端的交互,用于接收客户端的请求和反馈客户端的结果。参与领导者(Leader)发起的投票。 |
观察者(Observer) |
观察者可以接收客户端连接,将写请求转发给领导者(Leader)节点。但是Observer不参加投票过程,只是同步领导者(Leader)的状态。Observer为系统扩展提供了一种方法。 |
ZooKeeper集群在没有(观察者角色)的情况下的运作
通常ZooKeeper由2n+1台servers组成集群服务,每个server都知道彼此的存在。每个server都维护有内存状态镜像以及持久化存储的事务日志和快照。对于2n+1台server,只要有n+1台(大多数)server可用,整个系统保持可用。
系统启动时,集群中的server会选举出一台server为领导者(Leader),其它的就作为追随者(Follower),接着由追随者(Follower)来服务client的请求,对于不改变系统一致性状态的读操作,由追随者(Follower)的本地内存数据库直接给client返回结果;对于会改变系统状态的更新操作,则交由领导者(Leader)进行提议投票,超过半数通过后返回结果给client。
ZooKeeper工作原理
ZooKeeper的核心是原子广播,这个机制保证了各个server之间的同步。实现这个机制的协议叫做Zab协议。
Zab协议有两种模式,它们分别是恢复模式和广播模式。
恢复模式:一般是在服务刚启动或者在领导者(Leader)崩溃后,开始进入恢复模式,此时先就会开始选举领导者(Leader),当领导者(Leader)被选举出来,并且追随者(Follower)完成了和当前领导者(Leader)的状态及数据同步以后,恢复模式就结束了。
广播模式:恢复模式结束后,即领导者(Leader)已经和追随者(Follower)进行了状态同步以后,他就可以开始广播消息了,即进入广播状态(开始当国王来管束子民)。
在集群中动态新增一个新的ZooKeeper实例节点
这时候当一个新的ZooKeeper实例加入到当前的集群中时,它会在恢复模式下启动,然后去寻找当前集群的领导者(Leader),并与领导者(Leader)进行状态数据同步。直到同步结束,它也参与消息广播,此时他也成为了一名追随者(Follower)。
总之,ZooKeeper服务一直维持在广播模式状态,直到领导者(Leader)崩溃了或者领导者(Leader)失去了大部分的追随者(Follower)的支持。
广播模式(ZooKeeper集群处理事务的逻辑规则)
广播模式模式极其类似于分布式事务中的2pc(two-phrase commit 两阶段提交):即领导者(Leader)提起一个决议,由追随者(Follower)s进行投票,领导者(Leader)对投票结果进行计算决定是否通过该决议,如果通过执行该决议(事务),否则什么也不做。
广播模式需要保证提议(proposal)被按顺序处理,因此ZooKeeper采用了递增的事务id号(zxid)来保证。所有的提议(proposal)都在被提出的时候加上了zxid。实现中zxid是一个64为的数字,它高32位是epoch用来标识领导者(Leader)关系是否改变,每次一个领导者(Leader)被选出来,它都会有一个新的epoch。低32位是个递增计数。
当领导者(Leader)崩溃或者领导者(Leader)失去大多数的追随者(Follower),这时候ZooKeeper进入恢复模式,恢复模式需要重新选举出一个新的领导者(Leader),让所有的server都恢复到一个正确的状态。
恢复模式中 选举领导者(Leader)的规则
首先看一下选举的过程,ZooKeeper的实现中用了基于paxos算法(主要是fastpaxos)的实现。具体如下:
1.每个Server启动以后都询问其它的Server它要投票给谁。
2.对于其他server的询问,server每次根据自己的状态都回复自己推荐的领导者(Leader)的id和上一次处理事务的zxid(系统启动时每个server都会推荐自己)
3.收到所有Server回复以后,就计算出zxid最大的哪个Server,并将这个Server相关信息设置成下一次要投票的Server。
4.计算这过程中获得票数最多的的sever为获胜者,如果获胜者的票数超过半数,则改server被选为领导者(Leader)。否则,继续这个过程,直到领导者(Leader)被选举出来。
此外恢复模式下,如果是重新刚从崩溃状态恢复的或者刚启动的的server还会从磁盘快照中恢复数据和会话信息。(ZooKeeper会记录事务日志并定期进行快照,方便在恢复时进行状态恢复)
选完领导者(Leader)以后,ZooKeeper就进入状态同步过程。
1.领导者(Leader)就会开始等待server连接
2.追随者 (Follower) 连接 领导者(Leader),将最大的zxid发送给领导者(Leader)
3.领导者(Leader)根据追随者(Follower)的zxid确定同步点
4.完成同步后通知追随者(Follower) 已经成为uptodate状态
5.追随者 (Follower) 收到uptodate消息后,又可以重新接受client的请求进行服务了。
相关推荐
1.0 zookeeper 是什么?...2.2 zk 的工作原理 2.3 zk 是如何保证事物的顺序一致性 2.4 zk 集群下 server 工作状态 2.5 zk 是如何选举 Leader 的? 2.6 zk 同步流程 2.7 分布式通知和协调 2.8 zk 的 session 机制
14.Zookeeper 工作原理 15.zookeeper 是如何保证事务的顺序一致性 的? 16.Zookeeper 下 Server 工作状态 17.zookeeper 是如何选取主 leader 的? 18.Zookeeper 同步流程 19.分布式通知和协调 20.机器中为什么会有 ...
本套课程中,第一阶段深入Zookeeper原理和源码,分析Zookeeper的核心实现,并通过多个应用场景说明,体现出其重要性和广泛的应用性。第二阶段深入Dubbo RPC、SPI等核心功能点,列举多个示例加以应用说明,期望能够...
6.4. Zookeeper内部原理 28 6.4.1. 节点类型 29 6.4.2. Stat结构体 29 6.4.3. 监听器原理(面试重点) 30 6.4.4. Paxos算法(扩展) 32 6.4.5. 选举机制(面试重点) 34 6.4.6. 写数据流程 35 6.5. 企业面试真题 37 ...
本文档主要介绍了zookeeper的基础理论知识、集群搭建流程、内部原理、命令行操作、zookeeper的API
事务的实现原理深入分析Watcher机制的实现原理ClientCnxn 初始化客户端通过 exists 注册监听cnxn.submitRequestSendThread 的发送过程client 和 server 的网络交互服务端接收请求处理流程处理客户端传送过来的数据包...
zetcd是一款架在ZooKeeper与etcd之间的代理程序,它可以将ZooKeeper客户端的请求消息转换成etcd要求的格式,并转发给etcd,然后将响应消息转换后返回给客户端。本文介绍了zetcd的使用方法、工作原理以及性能评测。...
Zookeeper主要应用于大数据开发中的,统一命名服务、...本套课程讲解了,Zookeeper的集群安装、选举机制、监听器原理、写数据流程、Shell命令行操作、客户端API操作、服务器节点动态上下线综合案例以及企业真实面试题。
ZooKeeper 服务器工作原理和流程; ZooKeeper 实现共享锁; Hadoop 最佳实践; 通过Hadoop 的API 管理Job; Hadoop 集群的配置调优; Hadoop 平台的Java 规范及经验; MapReduce 开发经验总结; Hadoop 中的tar 命令...
ZooKeeper 是一个典型的分布式数据一致性解决方案,分布式应用程序可以基于 ZooKeeper 实现诸如数据发布/订阅、负载均衡、分布式协调/通知、集群管理、Master 选举、分布式锁等功能。 节点 在介绍 ZooKeeper 分布式...
1.熟练掌握 SparkSql、SparkStreaming、Spark Core,理解 Spark 工作机制及 Spark 任务的执行流程。 2.熟练掌握 Hadoop 分布式集群安装、部署、搭建和配置,能够熟悉应用 Hadoop 相关工具 进行相关应用开发。 3.熟悉...
第十二章 ZooKeeper集群分布式协调服务 12.1_ZooKeeper简介-与组件的关系 第十三章 FusionInsight HD 解决方案介绍 13.1_FusionInsight概述-FusionInsight特性介绍 13.2_FusionInsight HD 成功案例
从0开始搭建3个节点额度zookeeper集群 深入分析Zookeeper在disconf配置中心的应用 基于Zookeeper Watcher 核心机制深入源码分析 Zookeeper集群升级、迁移 基于Zookeeper实现分布式服务器动态上下线感知 深入...
如果只是为了开发 Kafka 应用程序,或者只是在生产环境使用 Kafka,那么了解 Kafka 的内部工作原理不是必须的。不过,了解 Kafka 的内部工作原理有助于理解 Kafka 的行为,也利用快速诊断问题。下面我们来探讨一下这...
目录:网盘文件永久链接 1.1.1 大数据的定义及其应用领域 1.2.1 大数据时代的机遇与挑战...12.1.1 ZooKeeper集群分布式协调服务 13.1.1 FusionInsight HD 解决方案介绍 (1) 13.2.1 FusionInsight HD 解决方案介绍 (2
Zookeeper主要应用于大数据开发中的,统一命名服务、...本套课程讲解了,Zookeeper的集群安装、选举机制、监听器原理、写数据流程、Shell命令行操作、客户端API操作、服务器节点动态上下线综合案例以及企业真实面试题。
第五天 hadoop2.x中HA机制的原理和全分布式集群安装部署及维护 01-zookeeper.avi 02-zookeeper2.avi 03-NN高可用方案的要点1.avi 04-hadoop-HA机制的配置文件.avi 05-hadoop分布式集群HA模式部署.avi 06-hdfs...
Zookeeper主要应用于大数据开发中的,统一命名服务、统一配置管理、统一集群管理、服务器节点动态上下线、软负载均衡等场景。该框架相当于大数据框架中的润滑剂。是大数据大数据开发工程师必须会的框架之一。 本套...
第12-17章详细而系统地讲解了hive、hbase、mahout、pig、zookeeper、avro、chukwa等所有与hadoop相关的子项目的原理及使用,以及这些子项目与hadoop的整合使用;第18章以实例的方式讲解了常用hadoop插件的使用和...
014 mapreduce工作流程-mp4 015 hadoop部署分类-mp4 016 hadoop单机部署介绍及软件包获取-mp4 017 hadoop单机部-mp4 018 hadoop单机部客应用测试mp4 019 hadoop伪分布式介绍及软件准备-mp4 015 hadoop部分类mp4 016 ...