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