一. zookeeper概述
Zookeeper 是一个开源的分布式的,为分布式应用提供协调服务的 Apache 项目。它包含一个简单的原语集,分布式应用程序可以基于它实现同步服务,配置维护和命名服务等
1.1 为什么要使用zookeeper
大部分分布式应用需要一个主控、协调器或控制器来管理物理分布的子进程(如资源、任务分配等)。目前,大部分应用需要开发私有的协调程序,缺乏一个通用的机制协调程序的反复编写浪费,且难以形成通用、伸缩性好的协调器。
ZooKeeper:提供通用的分布式锁服务,用以协调分布式应用
1.2 zookeepr可以做什么
Hadoop2.X
使用Zookeeper的事件处理确保整个集群只有一个活跃的NameNode,存储配置信息等.
HBase
使用Zookeeper的事件处理确保整个集群只有一个HMaster,察觉HRegionServer联机和宕机,存储访问控制列表等.
1.3 Zookeeper的角色
领导者(leader),负责进行投票的发起和决议,更新系统状态
学习者(learner),包括跟随者(follower)和观察者(observer),follower用于接受客户端请求并给客户端返回结果,在选主过程中参与投票Observer可以接受客户端连接,将写请求转发给leader,但observer不参加投票过程,只同步leader的状态,observer的目的是为了扩展系统,提高读取速度
客户端(client),请求发起方
1.4 选举机制
半数机制(Paxos 协议):集群中半数以上机器存活,集群可用。所以 zookeeper 适合装在奇数台机器上。
Zookeeper 虽然在配置文件中并没有指定 master 和 slave。但是,zookeeper 工作时,是有一个节点为 leader,其他则为 follower,Leader是通过内部的选举机制临时产生的。
1.5 节点类型
Znode有两种类型:
短暂(ephemeral):客户端和服务器端断开连接后,创建的节点自己删除
持久(persistent):客户端和服务器端断开连接后,创建的节点不删除
Znode有四种形式的目录节点(默认是persistent ):
持久化目录节点(PERSISTENT)
客户端与zookeeper断开连接后,该节点依旧存在
持久化顺序编号目录节点(PERSI