一:名称
Zookeeper – 分布式服务框架
二:描述
分布式协调服务框架
是Apache Hadoop 的一个子项目
是一个针对分布式应用的可靠协调系统。
可以解决分布式环境中经常遇到的一些数据管理问题:
如:
统一命名服务、
状态同步服务、
集群管理、
分布式应用配置项的管理
提供分布式环境中的 管理数据服务 和 协调数据服务
实例:
动物园管理员 职责 管理动物 和 协调游客去哪观看动物,(做一些动物标识,引导游客)
三:Zookeeper结构
角色:Zookeeper = 服务端 + 客户端
功能:Zookeeper = 文件系统 + 通知机制
1:文件系统
Zookeeper数据结构特点:
2:通知机制
Zookeeper 的客户端和服务器通信采用长连接方式,
客户端 注册监听 它关心的目录节点,
当目录节点发生变化(数据改变、被删除、子目录节点增加删除)时,
每个客户端和服务器通过心跳来保持连接,zookeeper会通知客户端。
3:总结
注:
Zoopkeeper 提供了一套很好的分布式集群管理的机制,
从而可以设计出多种多样的分布式的数据管理模型,
而不仅仅局限于下面提到的几个常用应用场景。
四:Zookeeper应用场景
1:配置数据的管理
场景描述:
数据发布与订阅模型 (配置中心)
发布者将数据发布到某节点上,供订阅者动态获取数据
实现:
应用配置集中到节点上,
应用启动时主动获取,并在节点上注册一个watcher,
每次配置更新都会通知到应用,
达到获取最新配置信息的目的。
好处:
实现配置信息的集中式管理和动态更新,实时同步。
注:
在上面提到的应用场景中,有个默认前提是:数据量很小,但是数据更新可能会比较快的场景。
2:软负载均衡
场景描述:
随着业务量的提高,访问量和数据流量的快速增长,其处理能力和计算强度也相应地增大,使得单一的服务根本无法承担。将负载(工作任务)进行平衡、分摊到多个操作单元上进行执行,在分布式环境中,为了保证高可用性,通常同一个应用或同一个服务的提供方都会部署多份,达到对等服务。
而消费者就须要在这些对等的服务器中选择一个来执行相关的业务逻辑。
好处:
高可用性,减轻服务的压力,实现软负载均衡
实现:
客户请求服务,服务中间件读取Zookeeper服务端取得提供服务的列表,根据规则,把请求定位到某个服务器执行相关的业务。
3:集群管理
集群机器管理:
监控 :监控集群中机器状态,监控机器在线率,实时检测集群机器是否存活
实现:
1.客户端启动时,向 Zookeeper上注册.
2.客户端在节点 x 上注册一个Watcher,那么如果 x的子节点变化了,会通知该客户端。
3.创建临时类型的节点,一旦客户端和服务器的会话结束或过期,那么该节点就会删除。
Master选举:
有些业务逻辑(例如一些耗时的计算,网络I/O处理),往往只需要让整个集群中的某一台机器进行执行,提高性能。
实现:
创建节点时,分配一个序号,选举时,取序列号最小的那个机器作为Master
4:分布式锁
锁:
不同线程间,操作一个资源,存在资源竞争,要用到锁。
分布式锁在进程与进程之间提供了一种互斥机制,在任何时刻,只有一个进程可以持有锁。
锁服务可以分为两类:
保持独占:
得益于ZooKeeper为我们保证了数据的强一致性。
就是所有试图来获取这个锁的客户端,最终只有一个可以成功获得这把锁。
(实现:大家都在某个节点下创建节点,只有一个成功,其它都是失败的)
控制时序:
就是所有视图来获取这个锁的客户端,最终都是会被安排执行,
只是有个全局时序了。
(实现:创建有编号节点,查询按编号排序,取最小的编号,就能得到锁)
一个用户创建一个节点,分配数值
检测父节点下的节点列表的最小数据是否为自已创建的数据
如果是,代表获得锁。
如果不是,代表别的用户已经锁住.
5:队列管理
五:常用接口
注:
1:Zookeeper Client Watcher监听事件
2:监听只会执行一次,必需重新注册监听
六:Zookeeper配置
1:下载
http://hadoop.apache.org/zookeeper/
2:安装
获取到 Zookeeper 的压缩包并解压到某个目录D:\Home\zookeeper-3.4.3
3:配置
D:\Home\zookeeper-3.4.3\conf\zoo_sample.cfg
把这个文件名字改成
D:\Home\zookeeper-3.4.3\conf\zoo.cfg
zoo.cfg内容:
tickTime=2000
dataDir=D:/devtools/zookeeper-3.2.2/build
clientPort=2181
zoo.cfg说明:
tickTime:这个时间是作为 Zookeeper 服务器之间或客户端与服务器之间维持心跳的时间间隔,也就是每个 tickTime 时间就会发送一个心跳。
dataDir:顾名思义就是 Zookeeper 保存数据的目录,默认情况下,Zookeeper 将写数据的日志文件也保存在这个目录里。
clientPort:这个端口就是客户端连接 Zookeeper 服务器的端口,Zookeeper 会监听这个端口,接受客户端的访问请求。
4:启动服务器
执行文件: D:\ProgramFiles\zookeeper-3.4.3\bin\zkServer.cmd