一.ZooKeeper概述
ZooKeeper是一个分布式的,开放源码的分布式应用程序协调服务,是Google的Chubby一个开源的实现,是Hadoop和Hbase的重要组件。它是一个为分布式应用提供一致性服务的软件,提供的功能包括:配置维护、域名服务、分布式同步、组服务等。
ZooKeeper的目标就是封装好复杂易出错的关键服务,将简单易用的接口和性能高效、功能稳定的系统提供给用户。
ZooKeeper包含一个简单的原语集,提供Java和C的接口。
ZooKeeper代码版本中,提供了分布式独享锁、选举、队列的接口,代码在$zookeeper_home\src\recipes。其中分布锁和队列有Java和C两个版本,选举只有Java版本。
二.ZooKeeper特点
1、ZooKeeper:一个领导者,多个跟随者组成的集群
2、集群只要有半数节点存活,那么ZooKeeper集群就能正常服务,所以说ZooKeeper适合奇数台服务器。
3、全局数据一致:每个Server保存一份相同的数据副本,Client无论连接到哪个Server,数据都是一致的。
4、更新请求顺序执行,来自同一个Client的更新请求按顺序依次执行。
5、数据更新原子性,一次更新要么成功,要么失败。
6、实时性,ZooKeeper的同步时间很快,任何一台服务器保存了数据,其他服务器也会保存相同数据。
三.ZooKeeper数据结构
ZooKeeper的数据结构和Unix文件系统很类似,整体上可以看做一棵树,每个节点称作ZNode,每个ZNode默认能够存储1M的数据,每个ZNode都可以通过路径唯一标识。
四.ZooKeeper应用场景
ZooKeeper提供的服务包括:统一命名服务、统一配置管理、统一集群管理、服务器节点动态上下线、软负载均衡等。
1.统一命名服务
在分布式环境下,通常对服务进行统一命名,便于识别。例如:IP不易记,域名易记。
2.统一配置管理
(1)分布式环境下,配置文件同步非常常见
- 一般要求一个集群中,所有节点的配置信息是一致的。如Kafka集群。
- 对配置文件修改后,希望可以快速同步到各个节点上。
(2)配置信息可由ZooKeeper实现
- 可将配置信息写入ZooKeeper的一个ZNode。
- 客户端服务器监听这个Znode。
- 一旦ZNode中的数据发生修改,ZooKeeper会通知客户端服务器。
3.统一集群管理
(1)分布式环境下,需要实时掌握每个节点的状态。
- 可根据节点实时状态做出一些调整。
(2)ZooKeeper可以实现实时监控节点的状态变化。
- 可将节点信息写入ZooKeeper中的一个ZNode。
- 监听这个ZNode可获取实时的状态变化。
4.服务器节点动态上下线
5.软负载均衡
在ZooKeeper中记录每台服务器的访问数量,让访问最少的服务器去处理最新的客户端请求。