什么是zookeeper
-
Zookeeper是一个分布式协调服务;就是为用户的分布式应用程序提供协调服务
-
zookeeper是为别的分布式程序服务的
-
Zookeeper本身就是一个分布式程序(只要有半数以上节点存活,zk就能正常服务)
-
Zookeeper集群的角色: Leader 和 follower (Observer)
-
zookeeper在底层最核心的两个功能:
-
管理(存储,读取)用户程序提交的数据
-
并为用户程序提供数据节点监听服务
1.2 zookeeper服务的应用场景
-
主从协调
-
服务器节点动态上下线
-
统一配置管理
-
分布式共享锁
-
统一名称服务等等
1.3 zookeeper集群特性
-
Zookeeper:一个leader,多个follower组成的集群
-
全局数据一致:每个server保存一份相同的数据副本,client无论连接到哪个server,数据都是一致的
-
分布式读写,更新请求转发,由leader实施
-
更新请求顺序进行,来自同一个client的更新请求按其发送顺序依次执行
-
数据更新原子性,一次数据更新要么成功,要么失败
-
实时性,在一定时间范围内,client能读到最新数据
1.4 zookeeper数据结构
-
层次化的目录结构,命名符合常规文件系统规范
-
每个节点在zookeeper中叫做znode,并且其有一个唯一的路径标识
-
节点Znode可以包含数据和子节点(但是EPHEMERAL类型的节点不能有子节点)
-
客户端应用可以在节点上设置监视器
1.5节点类型
-
Znode有两种类型:
-
短暂(ephemeral)(断开连接自己删除)
-
持久(persistent)(断开连接不删除)
-
-
Znode有四种形式的目录节点(默认是persistent )
-
PERSISTENT 持久类型
-
PERSISTENT_SEQUENTIAL(持久序列类型/test0000000019 )sequential
-
EPHEMERAL 短暂类型
-
EPHEMERAL_SEQUENTIAL 短暂序列类型
创建znode时设置顺序标识,znode名称后会附加一个值,顺序号是一个单调递增的计数器,由父节点维护
-
-
在分布式系统中,顺序号可以被用于为所有的事件进行全局排序,这样客户端可以通过顺序号推断事件的顺序
1.6 Zookeeper 数据结构特点
-
每个子目录项如 NameService 都被称作为 znode,这个 znode 是被它所在的路径唯一标识,如 Server1 这个 znode 的标识为 /NameService/Server1
-
znode 可以有子节点目录,并且每个 znode 可以存储数据,注意 EPHEMERAL类型的目录节点不能有子节点目录
-
znode 是有版本的,每个 znode 中存储的数据可以有多个版本,也就是一个访问路径中可以存储多份数据
-
znode 可以是临时节点,一旦创建这个 znode 的客户端与服务器失去联系,这个 znode 也将自动删除,Zookeeper 的客户端和服务器通信采用长连接方式,每个客户端和服务器通过心跳来保持连接,这个连接状态称为 session,如果 znode 是临时节点,这个 session 失效,znode 也就删除了
-
znode 的目录名可以自动编号,如 App1 已经存在,再创建的话,将会自动命名为 App2
-
znode 可以被监控,包括这个目录节点中存储的数据的修改,子节点目录的变化等,一旦变化可以通知设置监控的客户端,这个是 Zookeeper 的核心特性,Zookeeper 的很多功能都是基于这个特性实现的,后面在典型的应用场景中会有实例介绍
1.7 如何使用
Zookeeper作为一个分布式的服务框架,主要用来解决分布式集群中应用系统的一致性问题,它能提供基于类似于文件系统的目录节点树方式的数据存储,但是 Zookeeper并不是用来专门存储数据的,它的作用主要是用来维护和监控你存储的数据的状态变化。通过监控这些数据状态的变化,从而可以达到基于数据的集群管理,后面将会详细介绍 Zookeeper能够解决的一些典型问题,这里先介绍一下,Zookeeper 的操作接口和简单使用示例。