Zookeeper简介
Zookeeper 是一个 开源的、分布式的、为分布式框架提供协调服务的Apache项目,是一个基于观察者模式的分布式服务管理框架,负责存储和管理重要数据,接受观察者的注册。一旦数据的状态发生变化,Zk就负责通知在ZK上注册的那些观察者做出响应的反映。
zookeeper=文件系统+通知机制
特点:
- Zookeeper是一个领导者(Leader),多个跟随者(Follower)组成的集群
- 集群上只要有半数以上节点存活,Zookeeper集群就可以正常服务,建议安装奇数台服务器
- 全局数据一致:每个Server保存一份相同的数据副本,Client无论连接到哪个server,数据都是一致的。
- 更新请求顺序执行,来自同一个Client的更新请求按其发送顺序依次执行。
- 数据更新原子性,依次数据更新要么成功,要么失败。
- 实时性,在一定时间范围内,Client能读取到最新数据。
Zookeeper数据结构
Zookeeper数据结构模型与Unix系统比较类似,整体可以看做一棵树,每个节点称作ZNode,每个ZNode默认存储1MB的数据,每个ZNode都可以通过其路径作为唯一标识
应用场景
统一命名服务
分布式环境下,经常需要对应用/服务进行统一命名。
配置统一管理
- 分布式环境下,配置文件同步非常常见
- 一般要求一个集群中,所有节点信息的配置时一致的(Kafka集群)
- 对配置文件修改后,希望能快速同步到各个节点上
- 配置管理可交给Zookeeper实现
- 可以将配置信息写入Zookeeper上的一个Znode
- 各个客户端服务器监听这个Znode
- 一旦Znode的数据被修改,Zookeeper将通知各个客户端服务器。
统一集群管理
- 分布式环境中,实时掌握每个节点的状态时必要的,可以根据节点状态做出一些调整
- zookeeper可以实现实时监控节点状态变化
- 可以将节点信息写入到ZNode上
- 监听Znode可以获取实时状态变化
服务器动态上下线
- 客户端能实时洞察到服务器上下线变化
软负载均衡
在ZK中记录每台服务器访问数,访问数最少的服务器去处理新的客户端请求。