1.功能说明
zookeeper是一个分布式应用程序协调服务;它提供的功能有:命名服务、配置管理、集群管理、分布式锁、队列管理。
命名服务:在zookeeper的文件系统里创建一个目录可与下游程序约定好路径,通过路径即能互相探索发现。
配置管理:在做应用服务器集群的时候;可以将项目修改的配置文件全部放到zookeeper上面,保存到zookeeper的某个目录节点中,然后相关程序对这个目录节点进行监听,一有配置文件发送变化,那么每个应用程序都将收到通知,然后从zk里面获取最新配置文件同步到应用服务器上。
集群管理:在应用服务器集群的时候,是否有集群节点加入或退出的时候,zookeeper可以感知并通知其它应用服务器知晓当前各个集群节点的在线状态。所有机器约定在父目录下创建临时目录节点,然后监听父目录节点的子节点变化消息。一旦有机器挂掉,该机器与 zookeeper的连接断开,其所创建的临时目录节点被删除,所有其他机器都收到通知:某个兄弟目录被删除。
分布式锁:zookeeper上的一个znode看作是一把锁,通过createznode的方式来实现。所有客户端都去创建 /distribute_lock 节点,最终成功创建的那个客户端也即拥有了这把锁。用完删除掉自己创建的distribute_lock 节点就释放出锁。(关于分布式锁,可以使用redis的setnx命令来实现也是一种方法)
队列管理:第一种同步队列:当一个队列的成员都聚齐时,这个队列才可用,否则一直等待所有成员到达(在约定目录下创建临时目录节点,监听节点数目是否是要求的数目)。第二种队列按照 FIFO 方式进行入队和出队操作。
2.工作原理
Zookeeper 的核心是原子广播,这个机制保证了各个Server之间的同步。实现这个机制的协议叫做Zab协议。Zab协议有两种模式,它们分别是恢复模式(选主)和广播模式(同步)。当服务启动或者在领导者崩溃后,Zab就进入了恢复模式,当领导者被选举出来,且大多数Server完成了和 leader的状态同步以后,恢复模式就结束了。状态同步保证了leader和Server具有相同的系统状态。