ZooKeeper是Hadoop的正式子项目,它是一个针对大型分布式系统的可靠协调系统,提供的功能包括:配置维护、名字服务、分布式同步、组服务等。ZooKeeper的目标就是封装好复杂易出错的关键服务,将简单易用的接口和性能高效、功能稳定的系统提供给用户。
zookeeper是伴随着分布式服务而生的。利用zookeeper的特性可以管理好集群,但是zookeeper并不能直接管理各个服务,而是作为一个数据储存系统储存各个服务的状态,信息这些。在本质上,ZooKeeper是一个分布式的小文件存储系统,本身也提供一些数据增删改查的操作。其数据结构是一个树形结构,树形结构上有一些端点znode,每个znode可以存储一些数据,zookeeper可以增加,修改,删除端点和端点中的数据。znode有四种:
PERSISTENT-持久化目录节点
客户端与zookeeper断开连接后,该节点依旧存在,直到有删除操作来主动清除这个节点——不会因为创建该节点的客户端会话失效而消失。PERSISTENT_SEQUENTIAL-持久化顺序编号目录节点
客户端与zookeeper断开连接后,该节点依旧存在,只是Zookeeper给该节点名称进行顺序编号EPHEMERAL-临时目录节点
客户端与zookeeper断开连接后,该节点被删除EPHEMERAL_SEQUENTIAL-临时顺序编号目录节点
客户端与zookeeper断开连接后,该节点被删除,只是Zookeeper给该节点名称进行顺序编号
zookeeper本质上只有两个功能:一个是管理节点和数据,第二是监听节点和数据的变化。
在zookeeper集群中包含多个zookeeper服务器,这些服务器分为三种角色:leader、 follow、 0observer。
zookeeper特性:
全局数据一致
多个zookeeper组成的集群中,数据是一致的分布式读写
更新请求转发,由leader实施更新请求顺序
进行来自同一个client的更新请求按其发送顺序依次执行数据更新原子性
要么都成功,要么都不成功
zookeeper重要机制:
通知机制
通知机制就是zookeeper的watch机制,当设置watch后,端点的变化会通知到客户端选举机制
当集群中的一半端点失效时,按照一定逻辑重新选出leader角色。
示意图如上图,zookeeper集群中包含了多个zookeeper节点服务,每个节点服务都有自己的znode树,当更改任意一个znode节点的时候,这个系统会将此节点的修改同步改到各个zookeeper节点上,保证不同client访问zookeeper时的数据一致性。