【是什么】
ZooKeeper是一个分布式的,开放源码的分布式应用程序协调服务,是Google的Chubby一个开源的实现,是Hadoop和Hbase的重要组件。它是一个为分布式应用提供一致性服务的软件,提供的功能包括:配置维护、域名服务、分布式同步、组服务等。以上官方说法,只知道ZooKeeper是一个分布式服务框架,好了,接着往下看。
【有什么】
一、类似文件系统的数据模型结构(在网上看到的图,感觉很合适就直接拿来借用啦)
如上图的目录项,例如NameServices和Configuration之流,都成为znode,每个znode都存储了数据,我们可以自由的增减znode,当然也可以增减znode下的znode。
znode的类型,有四种:
①Persistent(持久化目录节点):客户端与Zookeeper断开连接后,该节点依旧存在
②Persistent_sequential(持久化顺序编号目录节点):客户端与Zookeeper断开连接后,该节点依旧存在,只是Zookeeper给该节点名称进行顺序编号。
③Ephemeral(临时目录节点):客户端与Zookeeper断开连接后,该节点被删除。
④Ephemeral_Sequential(临时顺序编号目录节点):客户端与Zookeeper断开连接后,该节点被删除,只是Zookeeper给该节点名称进行顺序编号。
二、通知机制
客户端注册监听它所关心的目录节点,简单说,当该目录节点发生变化时,Zookeeper就会通知客户端。
【应该场景】
1.配置管理
如果程序分散部署在多台机器上,对程序的配置或者对配置的改变就会变得很麻烦。如果将这些配置都放到Zookeeper上去,保存在Zookeeper相应的目录节点中,然后利用Zookeeper的监听功能,当配置信息发生变化时,相应的客户端就会收到Zookeeper的通知,然后从Zookeeper中获取最新的配置信息即可。
2.集群管理
集群管理,主要应用了Zookeeper的监听,监听是否有机器退出和加入。
所有机器都在父目录下创建临时目录节点。剩下的就是对父目录节点的监听啦。一旦有机器退出,该机器就与Zookeeper的连接断开,那么,该节点所创建的临时目录节点被删除,父目录下所有的机器都收到通知;新机器加入类似。