zookeeper是什么
ZooKeeper本质上是一个分布式的小文件存储系统。提供基于类似于文件系统的目录树方式的数据存储,并且可以对树中的节点进行有效管理。从而用来维护和监控你存储的数据的状态变化。通过监控这些数据状态的变化,从而可以达到基于数据的集群管理。
zookeeper的特点
1.全局数据一致:集群中每个服务器保存一份相同的数据副本,client无论连接到哪个服务器,展示的数据都是一致的,这是最重要的特征;
2.可靠性:如果消息被其中一台服务器接受,那么将被所有的服务器接受。
3.顺序性:全局有序是指如果在一台服务器上消息a在消息b前发布,则在所有Server上消息a都将在消息b前被发布。
4.数据更新原子性:一次数据更新要么成功(半数以上节点成功),要么失败,不存在中间状态;
5.实时性:Zookeeper保证客户端将在一个时间间隔范围内获得服务器的更新信息,或者服务器失效的信息。
zookeeper的角色
Leader: master 领导者、管理者
处理事务形操作(增、删、改)
Follower:Slave 服从者、工作者
处理非事务操作(查询)
转发事务形操作给leader
参与选举
Observer 观察者
处理非事务操作(查询)
转发事务形操作给leader
LookIng 竞选状态
ZooKeeper集群搭建
集群搭建:参见zookeeper安装步骤
ZooKeeper shell
节点操作必须使用绝对路径
一、创建
Create [-s 序列] [-e 临时节点] 路径 数据
Create -e /dashuju12 dashuju12
二、修改
Set 路径 数据
Set /dashuju12 dashuju1234
三、查询
Ls /dashuju12 查看子节点
Ls2 /dashuju12 查看子节点和本节点详细信息
Get /dashuju12 获得本节点数据和详细信息
四、删除
Delete 删除一个节点
Rmr 删除包含子节点的节点
Zookeeper节点类型
临时节点:会话结束,节点消失,不能有子节点
永久节点:和会话没有关系,可以有子节点
序列节点:在给定的文件名后追加序列号(序列号依次递增)
状态:
PERSISTENT:永久节点
EPHEMERAL:临时节点
PERSISTENT_SEQUENTIAL:永久节点、序列化
EPHEMERAL_SEQUENTIAL:临时节点、序列化
zookeeper属性
hello world 为节点数据信息
cZxid 节点创建时的zxid
ctime 节点创建时间
mZxid 节点最近一次更新时的zxid
mtime 节点最近一次更新的时间
cversion 子节点数据更新次数
dataVersion 本节点数据更新次数
aclVersion 节点ACL(授权信息)的更新次数
ephemeralOwner 如果该节点为临时节点,ephemeralOwner值表示与该节点绑定的session id. 如果该节点不是临时节点,ephemeralOwner值为0
dataLength 节点数据长度,本例中为hello world的长度
numChildren 子节点个数
ZooKeeper Watcher(监听者)
ZooKeeper提供了分布式数据发布/订阅功能,一个典型的发布/订阅模型系统定义了一种一对多的订阅关系,能让多个订阅者同时监听某一个主题对象,当这个主题对象自身状态变化时,会通知所有订阅者,使他们能够做出相应的处理。
ZooKeeper中,引入了Watcher机制来实现这种分布式的通知功能。ZooKeeper允许客户端向服务端注册一个Watcher监听,当服务端的一些事件触发了这个Watcher,那么就会向指定客户端发送一个事件通知来实现分布式的通知功能。
触发事件种类很多,如:节点创建,节点删除,节点改变,子节点改变等。
总的来说可以概括Watcher为以下三个过程:客户端向服务端注册Watcher、服务端事件发生触发Watcher、客户端回调Watcher得到触发事件情况
Watch机制特点
一次性触发
事件发生触发监听,一个watcher event就会被发送到设置监听的客户端,这种效果是一次性的,后续再次发生同样的事件,不会再次触发。
事件封装
ZooKeeper使用WatchedEvent对象来封装服务端事件并传递。
WatchedEvent包含了每一个事件的三个基本属性:
通知状态(keeperState),事件类型(EventType)和节点路径(path)
event异步发送
watcher的通知事件从服务端发送到客户端是异步的。
先注册再触发
Zookeeper中的watch机制,必须客户端先去服务端注册监听,这样事件发送才会触发监听,通知给客户端。