参考链接: 分布式服务框架zookeeper
Apache Zookeeper是Apache软件基金会的一个软件项目,它为大型分布式计算提供开源的分布式配置服务、同步服务和命名注册,zookeeper曾经是Hadoop的一个子项目,但现在是一个独立的顶级项目。
Zookeeper的架构通过冗余服务实现高可用行,因此,如果第一次无应答,客户端就可以询问另一台Zookeeper主机。Zookeeper节点将他们的数据存储于一个分层的命名空间,非常类似于一个文件系统或一个前缀树结构。客户端可以在节点读写,从而以这种方式拥有一个共享的配置服务。
网络上讲解zookeeper的文章很多,此处记录一下学习记录。
一、zookeeper数据模型
Zookeeper会维护一个具有层次关系的数据结构,它非常类似于一个标准的文件系统,如下图所示:
Zookeeper这种数据结构有如下特点:
- 每个子目录项如NameService都被称作znode,这个znode是被他所在的路径唯一标识,如Server1这个znode的标识为/NameService/Server1
- znode可以有子节点目录,并且每个znode可以存储数据,注意
EPHEMERAL
类型的目录节点不能有子节点目录。 - znode是有版本的,每个znode中存储的数据可以有多个版本,也就是一个访问路径中可以存储多份数据
- znode可以是临时节点,一旦创建这个znode的客户端与服务器失去联系,这个znode也将自动删除,Zookeeper的客户端和服务器通信采用长连接方式,每个客户端和服务器通过心跳来保持连接,这个链接状态称为session,如果znode是临时节点,这个session失效,znode也就删除了
- znode的目录名称可以自动编号,如App1已经存在,再创建的话,将会自动命名为App2
- znode可以被监控,包括这个目录节点中存储的数据的修改,子节点目录的变化等,一旦变化可以通知设置监控的客户端,这个是Zookeeper的核心特性,Zookeeper的很多功能都是基于这个特性实现的
二、安装和配置
zookeeper的安装很简单,只需要下载解压就算安装成功了,下载地址: zookeeper下载地址
配置文件在conf
目录下, 复制zoo_sample.cfg
并改名为zoo.cfg
,此文件就是zookeeper的配置文件。
三、基本命令
zookeeper的操作命令在bin
目录下,主要操作命令如下:
1 | sh zkServer.sh start # 启动zookeeper |
zkCli.sh
的基本命令
1 | ls path # 列出节点列表 |
四、Watch触发器
1、watch概述
Zookeeper可以为所有的读操作设置watch,这些操作包括: exists()
、getChildren()
、getData()
。watch事件是一次性的触发器,当watch的对象状态发生变化时,将会触发此对象上watch所对应的事件。watch事件将被异步地发送到客户端,并且Zookeeper为watch机制提供了有序的一致性保证。理论上,客户端接收watch事件的时间要快于其看到watch对象状态变化的时间。