一、zookeeper是什么
Apache Zookeeper是一个开源的分布式服务框架,为分布式应用提供协调服务,用来解决分布式应用中的数据管理问题,如配置管理、域名服务、分布式同步、集群管理
相关概念:
分布式:将一个大型应用的不同业务部署在不同的服务器上,解决高并发的问题。
集群:将同一个业务部署在多台服务器上,提高系统的高可用性。
二、Zookeeper组成
主要包含两部分: 文件系统、通知机制
2.1文件系统
ZooKeeper维护一个类似Linux文件系统的数据结构,用于存储数据
- 数据模型结构是一种树形结构,由许多节点组成
- 每个节点叫做ZNode(Zookeeper Node)
- 每个节点对应一个唯一路径,通过该路径来标识节点,如果/app1/p2
- 每个节点只能存储大约1M的数据
节点类型由四种:
- 持久化目录节点persistent
客户端与服务器断开连接,该节点仍然存在 - 持久化顺序编号目录节点 persistent_sequential
客户端与服务器断开连接,该节点仍然存在,此时节点会被顺序编号,如:0000001,0000002 - 临时目录节点 ephermeral
客户端与服务器断开连接,该节点会被删除 - 临时顺序编号目录节点 ephermeral_sequential
客户端与服务器断开连接,该节点会被删除,此时节点会被顺序编号,如0000001,000002
2.2通知机制
ZooKeeper是一个基于观察者模式设计的分布式服务管理框架
- ZooKeeper负责管理和维护项目的公共数据,并接受观察者的注册(订阅)
- 一旦这些数据发生变化,ZooKeeper就会通知已注册的观察者
- 此时观察者就可以做出相应的反应
简单来说,客户端注册监听它关心的目录节点,当目录节点发生变化时,ZooKeeper会通知客户端
Zookeeper是一个订阅中心(注册中心)
三、应用场景
3.1 配置管理
场景:集群环境、服务器的许多配置都是相同的,如数据库连接信息、当需要修改这些配置时必须同时修改每台服务器,很麻烦
解决:把这些配置全部放到ZooKeeper上,保存在ZooKeeper的某个目录节点中,然后所有的应用程序(客户端)对这个目录节点进行监视Watch,一旦配置信息发生变化,Zookeeper会通知每个客户端,然后从ZooKeeper获取新的配置信息,并应用到系统中
3.2 集群管理
场景:集群环境下,如何知道有多少台机器在工作?是否有机器退出或加入?需要选举一个总管master,让总管来管理集群。
解决:
在父目录GroupMembers下所有机器创建临时目录节点,然后监听父目录节点的子节点变化,一旦有机器挂掉,该机器与ZooKeeper的连接断开,其所创建的临时目录被删除,其他所创建的临时目录节点被删除,所有其他机器都会收到通知。当新机器加入时,会创建新的节点,同理。
选举master: 为所有机器创建临时顺序编号目录节点,给每台机器编号,然后每次选取编号最小的机器作为master.
3.3 负载均衡
ZooKeeper本身是不提供负载均衡策略,准确的说,是在负载均衡中使用ZooKeeper来做集群的协调(也称为软负载均衡)
实现思路:
- 将ZooKeeper作为服务的注册中心,所有服务器在启动时向注册中心登录自己能够提供的服务
- 服务的调用者到注册中心获取能够提供的所需要服务的服务器列表,然后自己根据负载均衡算法,从中选取一台服务器进行连接
- 当服务器列表发生变化时,如:某台服务器宕机下线,或新机器加入,Zookeeper会自动通知调用者重新获取服务。
实际上利用了ZooKeeper的特性,将ZooKeeper作为服务的注册和变更通知中心。
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。