概要
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的请求进行服务了。
相关推荐
**Zookeeper原理及应用** Apache ZooKeeper 是一个分布式协调服务,它为分布式应用程序提供一致性服务。这个系统广泛应用于配置管理、命名服务、集群管理、分布式锁、分布式队列等多个场景。在深入理解 ZooKeeper ...
《Paxos到Zookeeper——分布式一致性原理与实践》是一本深入探讨分布式一致性问题的书籍,对于理解并应用Zookeeper这一关键的分布式协调系统具有重要价值。本书旨在帮助读者掌握分布式环境中的数据一致性原理,并...
Zookeeper 集群的工作原理 在 Zookeeper 集群中,每个服务器都维护着一个状态机,每个服务器都可以是 Leader 或 Follower。Leader 服务器负责维护集群的状态,而 Follower 服务器则负责复制 Leader 服务器的状态。 ...
### 分布式一致性原理与实践:从Paxos到Zookeeper #### 一、引言 随着互联网技术的发展,分布式系统已经成为现代软件架构的核心组成部分。在分布式系统中,多个节点协同工作来完成复杂的任务,而如何确保这些节点...
Zookeeper是Apache Hadoop项目下的一个子项目,它是一个分布式的、开放源码的分布式应用程序协调服务,是集群管理的基石,提供了诸如配置维护、命名服务、分布式同步、组服务等分布式基础服务。本教程将深入讲解在...
《从Paxos到Zookeeper分布式一致性原理与实践》与《ZooKeeper-分布式过程协同技术详解》这两本书深入探讨了分布式系统中的一个重要概念——一致性,以及如何通过ZooKeeper这一工具来实现高效的分布式协同。...
而Zookeeper则是一个分布式协调服务,常用于管理分布式应用的配置信息、命名服务、集群同步、分布式锁等场景,它是Apache Hadoop的一个子项目,基于Java实现。 标题中的“ActiveMQ与Zookeeper集群测试代码”指的是...
ZooKeeper是一种分布式协调服务,用于维护和监控存储数据状态的变化,解决分布式集群中应用程序的一致性问题。 ZooKeeper的核心是原子广播机制,保障了各个Server之间的同步。 ZooKeeper架构与原理 ZooKeeper的...
ZooKeeper是一个分布式的,开放源码的分布式应用程序协调服务,它是集群的管理者,监视着集群中各个节点的状态根据节点提交的反馈进行下一步合理操作。最终将简单易用的接口和性能高效、功能稳定的系统提供给用户。...
### 深入分析Zookeeper实现原理 #### 初识Zookeeper 在深入了解Zookeeper之前,我们先简要介绍下Zookeeper以及它所处的分布式环境的一些特点。 **分布式环境的特点:** - **分布性:** 系统由多个通过网络连接的...
6. 启动Kafka broker:在每个节点上启动Kafka服务,集群中的每个broker都会注册到Zookeeper,并与其他broker保持通信。 7. 配置生产者和消费者:编写像`RequestServiceServlet.java`这样的程序,作为Kafka的生产者...
Apache ZooKeeper 是一个分布式协调服务,它为分布式应用程序提供了一个简单、高效且高度可靠的系统。Zookeeper 提供了命名服务、配置管理、集群同步、分布式锁等核心功能,广泛应用于大数据处理、微服务架构和...
客户端是应用程序与 Zookeeper 服务端交互的接口,提供了各种操作 Zookeeper 的方法,如创建、删除、读取和更新节点等。 Zookeeper 的原理基于 Paxos 算法,这是一种基于分布式系统的容错算法。 Paxos 算法可以确保...
### Zookeeper概述 Zookeeper是一种分布式服务框架,其主要功能在于提供高效且可靠的分布式协调服务。...无论是作为配置中心、集群管理工具还是分布式锁服务,Zookeeper都能够有效地简化分布式程序的设计和实现过程。
本书《从PAXOS到ZOOKEEPER分布式一致性原理与实践》将深入剖析PAXOS的理论基础,详细解释其工作流程,然后逐步过渡到ZOOKEEPER的实际操作和应用场景。读者将有机会了解到如何在实际环境中部署和管理ZOOKEEPER,以及...
Zookeeper 是一个分布式协调服务,源自 Apache Hadoop 项目,为分布式应用程序提供了高效且可靠的同步、...它的工作原理涉及复杂的选举算法、数据一致性保证和高效的通信机制,为大规模分布式系统提供了坚实的基础。
在IT行业中,Zookeeper是一个广泛使用的分布式协调服务,由Apache软件基金会开发。它提供了一种高效、可靠的机制...通过深入研究这些代码,开发者可以更好地掌握Zookeeper的工作原理,以及如何在实际项目中利用其功能。
Zookeeper是一个分布式的、开放源码的分布式应用程序协调服务,它是集群的管理者,监视着集群中各个节点的状态根据节点提交的反馈进行下一步合理操作。最终将简单易用的接口和性能高效、功能稳定的系统提供给用户。...
《从PAXOS到ZOOKEEPER分布式一致性原理与实践》是一本深入探讨分布式系统一致性问题的书籍,其中源码部分对于理解ZOOKEEPER如何实现分布式一致性具有极高的价值。PAXOS算法是分布式计算领域的一个里程碑,它为解决...
ZooKeeper是一个广泛使用的开源分布式协调服务,由雅虎开发,其设计灵感来源于Google的Chubby系统。它的主要目标是为分布式应用...理解并熟练掌握ZooKeeper的工作原理和配置对于构建和维护高可用的分布式系统至关重要。