zookeeper 数据结构和操作命令
2019-02-14 本文已影响0人
周末不加班
特性
- Zookeeper:一个leader,多个follower组成的集群
- 全局数据一致:每个server保存一份相同的数据副本,client无论连接到哪个server,数据都是一致的
- 分布式读写,更新请求转发,由leader实施
- 更新请求顺序进行,来自同一个client的更新请求按其发送顺序依次执行
- 数据更新原子性,一次数据更新要么成功,要么失败
- 实时性,在一定时间范围内,client能读到最新数据
zookeeper数据结构
- 层次化的目录结构,命名符合常规文件系统规范(见下图)
- 每个节点在zookeeper中叫做znode,并且其有一个唯一的路径标识
- 节点Znode可以包含数据和子节点(但是EPHEMERAL类型的节点不能有子节点,后面详细讲解)
- 客户端应用可以在节点上设置监视器(后续详细讲解)
节点类型
- Znode有两种类型:
短暂(ephemeral)(断开连接自己删除)
持久(persistent)(断开连接不删除 ) - Znode有四种形式的目录节点(默认是persistent )
PERSISTENT
PERSISTENT_SEQUENTIAL(持久序列/test0000000019 )
EPHEMERAL
EPHEMERAL_SEQUENTIAL - 创建znode时设置顺序标识,znode名称后会附加一个值,顺序号是一个单调递增的计数器,由父节点维护
- 在分布式系统中,顺序号可以被用于为所有的事件进行全局排序,这样客户端可以通过顺序号推断事件的顺序
zookeeper命令行操作
- bin目录下运行 zkCli.sh 启动客户端连接到本地zookeeper
[root@dajia bin]# zkCli.sh
Connecting to localhost:2181
......
WATCHER::
WatchedEvent state:SyncConnected type:None path:null
[zk: localhost:2181(CONNECTED) 0]
WATCHER::
WatchedEvent state:SyncConnected type:None path:null
[zk: localhost:2181(CONNECTED) 0]
- 使用 ls 命令来查看当前 ZooKeeper 中所包含的内容
当加上参数 watch 时表示监听目录下节点的变化
[zk: localhost:2181(CONNECTED) 2] ls /
[zookeeper]
- 创建一个新的短暂(ephemeral)节点myData 以及与它关联的字符串
create -e /myData "123456789"
- 运行 get 命令来确认 znode 是否包含我们所创建的字符串:
当加上参数 watch 时表示监听目录下节点内容的变化
[zk: localhost:2181(CONNECTED) 2] get /myData watch
123456789
cZxid = 0x300000011
ctime = Thu Feb 14 17:18:11 CST 2019
mZxid = 0x300000011
mtime = Thu Feb 14 17:18:11 CST 2019
pZxid = 0x300000011
cversion = 0
dataVersion = 0
aclVersion = 0
ephemeralOwner = 0x100013cd2920001
dataLength = 9
numChildren = 0
- 通过 set 命令来对 myData 所关联的字符串进行设置:
set /myData "abcde"
此时监听的客户端会输出 WATCHER:: WatchedEvent state:SyncConnected type:NodeDataChanged path:/myData
- 删除节点关联的字符串
rmr /myData
- 删除节点 myData
delete /myData