`
zhengchao860730
  • 浏览: 61250 次
  • 性别: Icon_minigender_1
  • 来自: 福州
社区版块
存档分类
最新评论

ZooKeeper原理与它的集群工作流程

阅读更多

概要

ZooKeeper是Hadoop的正式子项目,它是一个针对大型分布式系统的可靠协调系统,提供的功能包括:配置维护、名字服务、分布式同步、组服务等。

本文仅阐述ZooKeeper工作原理,对于如何使用ZooKeeper本文不做讨论

 

ZooKeeper的特性

原子性:一个update操作不是成功就是失败,不会有第三种状态出现。

顺序性:在一个ZooKeeper集群中,其中一台ZooKeeper服务器上消息a在消息b之前发布,那么在所有ZooKeeper服务器上的消息a都在消息b前被发布ZooKeeper会保持一致顺序。

实时性对于每个clientZooKeeper集群中的所有服务器都会保持实时更新制度,使得所有的服务视图都会是最新的。

统一镜像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的请求进行服务了。

 

分享到:
评论

相关推荐

    Zookeeper篇.pdf

    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 机制

    zookeeper面试专题.pdf

    14.Zookeeper 工作原理 15.zookeeper 是如何保证事务的顺序一致性 的? 16.Zookeeper 下 Server 工作状态 17.zookeeper 是如何选取主 leader 的? 18.Zookeeper 同步流程 19.分布式通知和协调 20.机器中为什么会有 ...

    java高级软件工程师教程快速入门Zookeeper+dubbo视频教程

    本套课程中,第一阶段深入Zookeeper原理和源码,分析Zookeeper的核心实现,并通过多个应用场景说明,体现出其重要性和广泛的应用性。第二阶段深入Dubbo RPC、SPI等核心功能点,列举多个示例加以应用说明,期望能够...

    第6章 Zookeeper 2 6.1. Zookeeper入门 2 6.1.1. 概述 2 6.1.2. 特点 3 6.1.3

    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.docx

    本文档主要介绍了zookeeper的基础理论知识、集群搭建流程、内部原理、命令行操作、zookeeper的API

    分布式专题-04分布式协调服务之Zookeeper实践及与原理分析

    事务的实现原理深入分析Watcher机制的实现原理ClientCnxn 初始化客户端通过 exists 注册监听cnxn.submitRequestSendThread 的发送过程client 和 server 的网络交互服务端接收请求处理流程处理客户端传送过来的数据包...

    zetcd:脱离ZooKeeper运行ZooKeeper应用程序

    zetcd是一款架在ZooKeeper与etcd之间的代理程序,它可以将ZooKeeper客户端的请求消息转换成etcd要求的格式,并转发给etcd,然后将响应消息转换后返回给客户端。本文介绍了zetcd的使用方法、工作原理以及性能评测。...

    尚硅谷大数据之Zookeeper视频(笔记+代码+资料)

    Zookeeper主要应用于大数据开发中的,统一命名服务、...本套课程讲解了,Zookeeper的集群安装、选举机制、监听器原理、写数据流程、Shell命令行操作、客户端API操作、服务器节点动态上下线综合案例以及企业真实面试题。

    Hadoop开发者第四期

    ZooKeeper 服务器工作原理和流程; ZooKeeper 实现共享锁; Hadoop 最佳实践; 通过Hadoop 的API 管理Job; Hadoop 集群的配置调优; Hadoop 平台的Java 规范及经验; MapReduce 开发经验总结; Hadoop 中的tar 命令...

    ZooKeeper 实现分布式锁的方法示例

    ZooKeeper 是一个典型的分布式数据一致性解决方案,分布式应用程序可以基于 ZooKeeper 实现诸如数据发布/订阅、负载均衡、分布式协调/通知、集群管理、Master 选举、分布式锁等功能。 节点 在介绍 ZooKeeper 分布式...

    23份大数据岗位求职简历参考模板合集.rar

    1.熟练掌握 SparkSql、SparkStreaming、Spark Core,理解 Spark 工作机制及 Spark 任务的执行流程。 2.熟练掌握 Hadoop 分布式集群安装、部署、搭建和配置,能够熟悉应用 Hadoop 相关工具 进行相关应用开发。 3.熟悉...

    华为HCIA-Big Data V2.0 LVC公开课培训.rar

    第十二章 ZooKeeper集群分布式协调服务 12.1_ZooKeeper简介-与组件的关系 第十三章 FusionInsight HD 解决方案介绍 13.1_FusionInsight概述-FusionInsight特性介绍 13.2_FusionInsight HD 成功案例

    Java思维导图xmind文件+导出图片

    从0开始搭建3个节点额度zookeeper集群 深入分析Zookeeper在disconf配置中心的应用 基于Zookeeper Watcher 核心机制深入源码分析 Zookeeper集群升级、迁移 基于Zookeeper实现分布式服务器动态上下线感知 深入...

    一文带你吃透 Kafka 这些原理

    如果只是为了开发 Kafka 应用程序,或者只是在生产环境使用 Kafka,那么了解 Kafka 的内部工作原理不是必须的。不过,了解 Kafka 的内部工作原理有助于理解 Kafka 的行为,也利用快速诊断问题。下面我们来探讨一下这...

    华为HCIA-Big Data V2.0 LVC公开课培训视频教程【共25集】.rar

    目录:网盘文件永久链接 1.1.1 大数据的定义及其应用领域 1.2.1 大数据时代的机遇与挑战...12.1.1 ZooKeeper集群分布式协调服务 13.1.1 FusionInsight HD 解决方案介绍 (1) 13.2.1 FusionInsight HD 解决方案介绍 (2

    大数据视频_Zookeeper视频教程

    Zookeeper主要应用于大数据开发中的,统一命名服务、...本套课程讲解了,Zookeeper的集群安装、选举机制、监听器原理、写数据流程、Shell命令行操作、客户端API操作、服务器节点动态上下线综合案例以及企业真实面试题。

    新版Hadoop视频教程 段海涛老师Hadoop八天完全攻克Hadoop视频教程 Hadoop开发

    第五天 hadoop2.x中HA机制的原理和全分布式集群安装部署及维护 01-zookeeper.avi 02-zookeeper2.avi 03-NN高可用方案的要点1.avi 04-hadoop-HA机制的配置文件.avi 05-hadoop分布式集群HA模式部署.avi 06-hdfs...

    新版全面系统完整的Zookeeper视频教程

    Zookeeper主要应用于大数据开发中的,统一命名服务、统一配置管理、统一集群管理、服务器节点动态上下线、软负载均衡等场景。该框架相当于大数据框架中的润滑剂。是大数据大数据开发工程师必须会的框架之一。 本套...

    Hadoop实战丛书

    第12-17章详细而系统地讲解了hive、hbase、mahout、pig、zookeeper、avro、chukwa等所有与hadoop相关的子项目的原理及使用,以及这些子项目与hadoop的整合使用;第18章以实例的方式讲解了常用hadoop插件的使用和...

    大数据培训视频.rar

    014 mapreduce工作流程-mp4 015 hadoop部署分类-mp4 016 hadoop单机部署介绍及软件包获取-mp4 017 hadoop单机部-mp4 018 hadoop单机部客应用测试mp4 019 hadoop伪分布式介绍及软件准备-mp4 015 hadoop部分类mp4 016 ...

Global site tag (gtag.js) - Google Analytics