1. 什么是zookeeper?
因为分布式系统或者说分布式环境就像是一个公园,里面可能包含很多tomcat服务,jetty服务,hadoop服务等等,而zookeeper在里面起到的作用就是协调服务与服务之间的关系类似公园管理者的角色所以叫zookeeper.官方给出的定义是:zookeeper是一个为了更好的维护分布式配置信息,命名,分布式同步,组合服务(同一服务的集群模式)的一个中心化的服务。详情可参见:zookeeper官网
2. zookeeper常用命令
- ls 用来获取某个目录下所有的节点
- ls2 与ls不同的是它能够查看到time,version等信息
- create 创建node,并且初始化值(创建持久有序:create -s, 创建临时有序: create -e -s)
- get 获取node的信息
- set 修改node的值
- delete 删除node(不能级联删除)
- quit 退出客户端
- rmr 自持级联删除的命令
3. 节点类型
- PERSISTENT 持久类型一旦创建只能通过手动删除该节点
- PERSISTENT_SEQUENTIAL 持久有序类型
- EPHEMERAL 临时类型 客户端session失效,节点自动删除 不能有子节点
- EPHEMERAL_SEQUENTIAL 临时有序类型 session失效,节点自动删除 不能有子节点
4. zookeeper state structure
- czxid(zxid: zookeeper transaction id) 创建node时的zookeeper事务id
- mzxid 最后一次更新node信息的zookeeper事务id
- pzxid 最后一次更新该node下的child的zookeeper事务id
- ctime 创建时间
- mtime 最后一次更新时间
- version node的更新次数
- cversion 该node下的child更新次数
5.zookeeper watch 机制
客户端可以在znode上注册watch,在znode上的state的改变会触发watch之后清空watch。一旦触发watch,zookeeper会向client发起通知,所有的在zookeeper上面的read操作都可以注册watch,包括getData,getChild,exists
- watch 是一种一次性的触发机制,如果在一个node上已经触发了watch,则之后该node在发生changes,不会再触发watch,如果要继续触发,需要重新再改node上面注册watch。
- 通知将发送给通过getData,getChild,exists上watch设置为true的客户端上
- 发送给client的通知是有序的