一、Zookeeper简介
ZooKeeper 是 Apache 软件基金会的一个软件项目,它为大型分布式计算提供开源的分布式配置服务、同步服务和命名注册。ZooKeeper是一个集中式服务,用于维护配置信息、命名、提供分布式同步和提供组服务。
1. Zookeeper的工作机制
如图所示,服务器上线时,会将服务器的信息注册到Zookeeper中,客户端会从Zookeeper获取服务器信息列表,进行注册监听,当服务器节点下线或异常时,会通知Zookeeper,Zookeeper进而通知客户端。简单来说,Zookeeper就相当于一个文件系统(存储管理元数据信息)+通知机制。
从设计模式角度来理解,Zookeeper是一个基于观察者模式设计的分布式服务管理框架,它负责存储和管理数据信息,并接受观察者的注册,一旦数据信息发生变化,Zookeeper就负责通知已经注册的这些观察者,让观察者们作出相关的反映。
2. Zookeeper的特点
- Zookeeper是由一个Leader和多个Follower组成的集群
- 集群中只要有半数以上节点存活,Zookeeper集群就能正常服务,所以Zookeeper适合安装基数台服务器
- 全局数据一致:每个Server保存一份相同的数据副本
- 更新请求顺序执行,来自同一个Client的更新请求按照其发送顺序依次执行(先来的请求先处理)
- 数据更新原子性,一次数据更新要么成功,要么失败
- 实时性,在一定时间范围内,Client能读到最新的数据
3. Zookeeper的数据结构
Zookeeper 提供的名称空间非常类似于标准文件系统,key-value 的形式存储。名称 key 由斜线 / 分割的一系列路径元素,Zookeeper 名称空间中的每个节点都是由一个路径标识。其与Linux文件系统类似,整体上可以看作一棵树,每个节点称为一个ZNode,每个ZNode默认能够存储1MB的数据,每个ZNode都可以通过其路径唯一标识。
4. Zookeeper应用场景
1、统一命名服务
在分布式环境下,经常需要对应用/服务统一命名,便于识别
2、统一配置管理
(1)分布式环境下,配置文件同步非常常见:
一般要求一个集群中,所有节点的配置信息是一致的
对配置文件修改后,希望可以快速同步到各个节点上
(2)配置管理可以交给Zookeeper实现
可以将配置信息写入到Zookeeper的一个ZNode
各个客户端服务器监听这个ZNode
一旦Znode中的数据被修改,Zookeeper将通知各个客户端服务器
3、统一集群管理
(1)分布式环境下,实时掌握每个节点的状态是有必要的
- 可以根据节点实时状态做出一些调整
(2)Zookeeper可以实现实时监控节点状态变化
- 可以将节点信息写入到Zookeeper上的一个ZNode
- 监听这个ZNode可以获取它的实时状态变化
4、服务器动态上下线
客户端能实时洞察到服务上下线的情况
5、软负载均衡
在Zookeeper中记录每台服务器的访问数,让访问数最少的服务器去处理最新的客户端请求
二、Zookeeper的安装与配置参数
Zookeeper可以进行单机安装和集群安装,具体的安装教程就在此省略咯。另外看看Zookeeper的配置文件参数说明: