zookeeper的主要用来协同多个应用直接的合作。它通过暴露一些类似文件系统的API,让用户调用来定义自己的协同原则。
如下图所示,zookeeper维护一个类似树形结构的目录结构,其中每个节点称为一个znode, 其中叶子节点是具体数据。
用户要做的就是创建znode, 然后zookeeper来管理这些znode, 依次达到相互沟通的目的。
Zookeeper API
Zookeeper提供如下API来让用户创建和检查znode状态:
- create /path data 创建一个名为path的znode,它包含数据data
- delete /path 删除znode /path
- exists /path 检查znode /path是否存在
- setData /path data 为znode /path设置数据
- getChildren /path 返回znode /path的子znodes
Znode 分类
znode可以分为永久性(persistent)和 短暂型(ephemeral)两种类型
其中 永久性的就是永远存在,直到通过delete命令删除;短暂型的znode,在创建它的client 关闭后就会自动被删除。
znode也可以使有顺序的znode(sequential znodes), 有序值的是我们创建znode的时候,系统会自动给他们加上一个序列化,这样我们就可以判断哪个znode先被创建,哪个后被创建了
命令如下:
- create /path data 创建永久性znode
- create -e /path data 创建短暂型znode
- create -s /path data 创建有序型永久znode
- create -s -e /path data 创建有序型短暂znode
监控znode变化
我们可以通过在命令后面加 true的方式来监控znode的变化
如 ls /tasks true
表示监控task子节点的变化,如果节点有增加和删除,则会收到通知,且该通知只会发送一次
Zookeeper编程
Zookeeper分为客户端和服务器端两块,服务器端启动后,客户端通过引入zookeeper的client library来和服务器端交互
Zookeeper安装
去官网http://zookeeper.apache.org下载最新的安装包,减压到指定目录即可
通过命令 bin/zkServer.sh start configfile 即可启动zookeeper server, 如果不指定config file则默认回去conf目录下面找zoo.cfg
bin/zkCli.sh 启动一个客户端,并与server连接
如果我们启动了多个server端机器,则可以通过 -server ip:port, ip:port的方式指定该客户端连接到哪台server上。