1、Zookeeper的概述
Zookeeper是一个开源的分布式
的,为分布式框架提供协调服务
的项目
关键字:分布式:
多台服务器共同完成一件复杂的任务
在上面的图看出:Zookeeper像个铲屎官
,为各种分布式框架(动物
)提供服务的
下面简单了解一下Zookeeper的工作机制
Zookeeper工作机制
Zookeeper
是基于观察者设计
的分布式管理框架(一人在干活,一人在观察监督),是负责存储
和管理
大家都关心的数据
,接收观察者的注册
,一旦数据发生改变,Zookeeper负责通知在Zookeeper上注册
1)服务器把基本信息注册到Zookeeper上,创建节点
2)客户端获取在线的服务器列表,并注册监听
3)如果服务器下线,Zookeeper通知客户端
,客户端重新获取在线服务器列表,并监听
从上面的图明显感知zookeeper是一个文件系统
和 通知机制
的框架
2、Zookeeper的特点
1)Zookeeper:一个领导者
(Leader),多个跟随者
(follower)组成集群
2)集群中只要有超过半数以上节点存活
,Zookeeper集群就可以正常服务,Zookeeper适合安装奇数台服务器
如果是偶数台
,当等于半数时Zookeeper还是无法正常服务,而且还浪费资源
3)全局数据一致
:每个Server保存一份相同的数据副本,Client无论连接到哪个Server,数据都是一致
的
4)更新请求顺序执行,来自同一个Client的更新请求按发送的顺序依次执行,类似于队列,先进先出
5)数据更新原子性
:一次数据更新要么全部成功,要么全部失败
6)实时性
:在一定时间范围内,Client能读到最新数据(server之间的数据同步快
)
3、数据结构
ZooKeeper数据模型的数据结构和linux的文件系统非常类似
,类似一颗树的结构,每一个节点称作ZNode
zookeeper是如何保存数据的
zookeeper的数据是保存在节点
上,节点就是znode,多个znode之间之间构成一个树的目录结构
zookeeper的znode包含了四部分:
data
:保存数据acl
:权限,定义了什么样的用户能够操作这个节点,且能够进行怎么样的操作
c:create创建权限,允许在该节点下创建子节点
w:write读取权限,允许更新该节点的数据
r:read读取权限,允许读取该节点的内容以及子节点的列表信息
d:delete 删除权限,允许删除该节点的子节点
a:admin管理者权限,允许对该节点进行acl权限设置stat
:描述当前节点znode的元数据child
:当前节点的子节点
4、应用场景
提供的服务包括:统一命名服务、统一配置管理、统一集群管理、服务器节点动态上下线,软负载均衡等
4.1、统一命名服务
4.2、统一配置管理
分布式环境下,配置文件同步很常见,一般集群中
,配置文件是一直的,配置文件修改后,希望快速同步到各个节点上
配置管理交给zookeeper实现
:
1)将配置信息写入zookeeper上的一个Znode
2)各个客户端服务器监听这个Znode
3)一旦Znode中的数据被修改
,Zookeeper将通知各个客户端服务器
4.3、统一集群管理
4.4、服务器节点动态上下线
4.5、软负载均衡
在Zookeeper中记录每台服务器的访问数
,让访问数最少的服务器
去处理最新的客户端请求