Apache ZooKeeper的功能以及工作原理

Hadoop 12/06 阅读 4 views次 人气 0
摘要:

一个分布式的,开放源码的分布式应用程序协调服务,是Google的Chubby一个开源的实现,它是集群的管理者,监视着集群中各个节点的状态根据节点提交的反馈进行下一步合理操作。

ZooKeeper是一个分布式数据一致性的解决方案,可以基于它实现数据发布/订阅、负载均衡、命名服务、分布式协调/通知、集群管理、Master选举、分布式锁和分布式队列等功能。

ZooKeeper.jpg

Zookeeper字面上理解就是动物管理员,Hadoop生态圈中很多开源项目使用动物命名,那么需要一个管理员来管理这些“动物”。

在集群的管理中Zookeeper起到非常重要的角色,他负责分布式应用程序协调的工作。

Zookeeper管理集群会选举一个Leader节点(可参考FastLeader选举算法,即快速选举Leader节点),Leader节点主要负责整个Zookeeper集群的运行管理,Follower负责管理具体的数据存储与读取。

Zookeeper是一款通用的集群管理工具,不仅适用于Hadoop集群,在其他的集群中也可能被用到,比如ESB集群。

搭建Zookeeper集群要求整个集群节点为奇数,这样可以避免选举中选票相同的两个节点出现,类似于7大常委或11个国会成员在进行选举时不允许弃权,两个备选的节点总有一个会胜出。


ZooKeeper特性

顺序一致性

从同一个客户端发起的事务请求,最终会严格按照发起的顺序被应用到ZooKeeper中去。

原子性

所有事务请求的处理结果在整个集群中所有机器上的应用情况是一致的。要么所有机器都应用了某一个事务,要么都没有。

单一视图

无论客户端连接的是哪个ZooKeeper服务器,其看到的服务端数据模型都是一致的。

可靠性

一旦服务端成功的应用了一个事务,并完成对客户端的响应,那么服务端的状态变更会被一直保留下来。个人认为,这应该是持久性。

实时性

这里是指,ZooKeeper仅仅能保证在一定时间内,客户端最终一定能从服务端读取到最新的数据状态。


ZooKeeper基本概念

集群角色

ZooKeeper中有三个角色——Leader、Follower和Observer。所有机器中选定一台作为Leader,其他机器包括Follower和Observer。Follower和Observer都能提供读服务。而Observer不参与选举Leader的过程,也不参与写操作的“过半成功”策略,因此Observer可以在不影响写性能的情况下提升集群的读性能。

会话(Session)

在ZooKeeper中,一个客户端连接是指客户端和服务器之间的一个TCP长连接。当服务器压力太大、网络故障或是客户端主动断开连接等各种原因使得。

数据节点(ZNode)

节点分两类,机器节点和数据节点。这里说的数据节点为ZNode。ZooKeeper将所有数据存储在内存中,数据模型是一棵树(ZNode Tree),由“/”进行分割。每个ZNode都会保存自己的数据内容,还有数据信息。ZNode也分为两种——持久节点和临时节点。临时节点和会话Session相关联,持久节点,除非将其移除才会失效。另外,ZooKeeper的节点有一个特殊属性:SEQUENTIAL。有了这个标记,ZooKeeper会自动在其节点后面追加上一个整形数字,这个数字是由父节点维护的自增数字。

版本

对于ZNode,ZooKeeper都会维护一个Stat的数据结构,Stat中记录了这个ZNode的三个数据版本,分别是version(当前ZNode的版本)、cversion(当前ZNode子节点的版本)和aversion(当前ZNode的ACL版本)。


时间监听器 (Watcher)

ZooKeeper允许用户用指定节点上注册一些Watcher,触发的时候会将事件通知到感兴趣的客户端上去。

ACL

ZooKeeper采用ACL策略来进行权限控制。

在深入了解ZooKeeper之前,很多人认为ZooKeeper就是Paxos算法的一个实现。但事实上ZooKeeper并没有完全采用Paxos算法,而是使用了一种称为ZooKeeper Atomic Broadcast(ZooKeeper原子消息广播协议)的协议作为数据一致性的核心算法。

ZAB协议的核心定义了对于那些改变ZooKeeper服务器数据状态的事务请求的处理方式,即:

所有事务请求必须由一个全局唯一的服务器来协调处理,这样的服务器被成为Leader服务器,而余下的其他服务器则成为Follower服务器。Leader服务器负责将一个客户端事务请求转换成一个事务Proposal(提议),并将该Proposal分发给集群中所有的Follower服务器。之后Leader服务器需要等待所有Follower服务器的反馈,一旦超过半数的Follower服务器进行了正确的反馈后,那么Leader就会再次向所有的Follower服务器分发Commit消息,要求其将前一个Proposal进行提交。


评论

表情

分享到: