此文是在学习zookeeper期间的笔记,更多的是借鉴官方文档和网上的博客做出的总结。
1、ZooKeeper是什么?
直接参考:zookeeper简单介绍以及zookeeper是什么。
官方的解释:zookeeper是一个用于分布式应用的分布式协调服务。源自Google的论文中提到的Chubby,但Chubby不开源,Yahoo就根据论文重写了一个分布式协调(一致性)服务,叫做zookeeper,完全开源,属于Hadoop的子项目。久经考验,是大多数分布式系统中为了实现一致性服务的首选。
2、Zookeeper能干什么?
最初,zookeeper最终要的用于就是分布式中的高可用集群,leader选举。后来,逐渐增加了配置管理(例如kafka启动时读取zookeeper中的broker信息)、命名服务(例如Dubbo)以及leader选举(集群高可用)等。
这些功能,都依赖于zookeeper的结构和框架设计。
3、zookeeper设计目标及数据模型
参考:官方文档。
设计目标:简单、有序、快速、集群。
简单:内存结构类似于文件系统的树形结构,但其节点可以包含子节点;数据在内存中维护;维护的数据仅仅包含状态信息,而不是数据本身,因此非常轻量级,一般小于1M。
有序:所有的请求事务都生成一个递增的ID。
关于集群(可复制的),即zookeeper本身也应该是由多个服务器组成zookeeper集群。对于client请求的读操作,会通过TCP与某个server建立连接,从server内存中获取相应的数据;server接收到写操作请求时,必须发送到leader,由leader完成写操作后,反馈给接受请求的server,再由server反馈给client。
数据模型:
分为节点和瞬时节点,统称为Znode。瞬时(临时)节点在client失去连接后,会自动删除其节点。
4、watch机制与ACL
参考:zookeeper解惑以及简单介绍。
简单的说,watch机制是client可以在znode上设置watch,当znode结构发生变化时,会立刻触发watch,即通知client这一变化。其特点是一次性触发,之后需要再次注册才会触发。watch的类型根据方法不同又分为Data Watch和Children Watch。
一个ACL就是一个ID与permission的对儿,表示哪些个ID具有哪些个权限,可以进行什么样的操作。权限包括CREATE、READ、WRITE、DELETE、ADMIN。
5、Zookeeper安装配置以及维护
注意一点:zookeeper的参数dataLogDir最好单独设置,因为所有的log信息都会写到此目录,为了性能考虑,最好单独磁盘。
而且,日志最好不要在参数中设置,最好定期清理。参考:zookeeper日志清理。
6、zookeeper client
参考:Zookeeper Client以及zkCli使用。