1. ZooKeeper 是什么
ZooKeeper 是一个针对大型分布式系统的可靠协调系统;它提供的功能包括:配置维护、名字服务、分布式同步、组服务等; 它的目标就是封装好复杂易出错的关键服务,将简单易用的接口和性能高效、功能稳定的系统提供给用户; ZooKeeper
已经成为 Hadoop 生态系统中的基础组件。
2. ZooKeeper特点
1、最终一致性:为客户端展示同一视图,这是 ZooKeeper 最重要的性能。
2、可靠性:如果消息被一台服务器接受,那么它将被所有的服务器接受。
3、实时性:ZooKeeper 不能保证两个客户端同时得到刚更新的数据,如果需要最新数据,应该在读数据之前调用sync()接口。
4、等待无关(wait-free):慢的或者失效的 client 不干预快速的client的请求。
5、原子性:更新只能成功或者失败,没有中间其它状态。
6、顺序性:对于所有Server,同一消息发布顺序一致。
3. ZooKeeper 架构
ZooKeeper 的架构图如下:
通过ZooKeeper
架构图我们可以了解以下几点 :
1、每个Server 在内存中存储了一份数据。
2、ZooKeeper 启动时,将从实例中选举一个 leader(根据Paxos协议来选举,大家知道有这么个协议即可)。
3、Leader 负责处理数据更新等操作(这里用到Zab协议,大家知道有这么个协议即可)
4、一个更新操作成功的标志是当且仅当大多数Server在内存中成功修改数据。
4. Zookeeper 角色
Zookeeper中的角色主要有以下三类:领导者(leader)、跟随者(Follower)、观察者(ObServer)。
领导者(leader)是整个集群的主节点,复制响应所有对Zookeeper状态变更的请求。它会将每个状态更新请求进行排序和编号,以便保证整个集群内部消息处理的FIFO。负责进行投票的发起和决议,更新系统状态。
跟随者(Follower)用于接收客户请求并向客户端返回结果,在选主过程中参与投票。
跟随者(Follower)用于接收客户请求并向客户端返回结果,在选主过程中参与投票。
ObServer 可以接收客户端连接,将写请求转发给leader节点。Observer 可以同步 leader的状态,但observer不属于法定人数,即不参加选举也不响应提议。ObServer 的目的是为了扩展系统,提高读取速度。observer不需要将事务持久化到磁盘,一旦observer被重启,需要从leader重新同步整个名字空间。
5. ZooKeeper Server
1、Leader 选举算法采用了 Paxos 协议。2、Paxos
核心思想是当多数 Server 写成功,则任务数据写成功。
1)如果有3个Server,则需两个写成功即表示任务数据写成功。
2)如果有4或5个Server,则需三个写成功即表示任务数据写成功。
3、Server
数目一般为奇数,例如 3、5、7等等。
1)如果有3个Server,则最多允许1个Server
挂掉。
2)如果有4个Server,则同样最多允许1个Server挂掉。
既然3个或者4个Server,同样最多允许1个Server挂掉,那么它们的可靠性是一样的,所以选择奇数个ZooKeeper
Server即可,这里选择3个Server。
6. ZooKeeper 写数据流程
ZooKeeper 写数据的流程图如下所示:
ZooKeeper 的写数据流程主要分为以下几步:
1、比如 Client 向 ZooKeeper 的 Server1 上写数据,发送一个写请求。
2、如果Server1不是Leader,那么Server1
会把接受到的请求进一步转发给Leader,因为每个ZooKeeper的Server里面有一个是Leader。这个Leader 会将写请求广播给各个Server,比如Server1和Server2,
各个Server写成功后就会通知Leader。
3、当Leader收到大多数
Server 数据写成功了,那么就说明数据写成功了。如果这里三个节点的话,只要有两个节点数据写成功了,那么就认为数据写成功了。写成功之后,Leader会告诉Server1数据写成功了。
4、Server1会进一步通知
Client 数据写成功了,这时就认为整个写操作成功。ZooKeeper整个写数据流程就是这样的。
本文介绍了ZooKeeper的基本概念,探讨了其在大型分布式系统中的作用,并详细解释了ZooKeeper的特点、架构、角色以及写数据流程。
335

被折叠的 条评论
为什么被折叠?



