Zookeeper集群操作

命令行语法

命令基本语法

功能描述

help

显示所有操作命令

ls path [watch]

使用 ls 命令来查看当前znode中所包含的内容

ls -s path [watch]

查看当前节点信息

create

普通创建

-s 含有序列

-e 临时(重启或者超时消失)

get path [watch]

获得节点的值

set

设置节点的具体值

stat

查看节点状态

delete

删除节点

rmr(已过时)

递归删除节点

1)启动客户端

[atguigu@hadoop102 zookeeper-3.5.7]$ zkCli.sh -server

hadoop102:2181

2)显示所有操作命令

[zk: hadoop102:2181(CONNECTED) 1] help

 

znode节点信息

1)查看当前znode中所包含的内容

[zk: hadoop102:2181(CONNECTED) 0] ls /

[zookeeper] 

 

2)查看当前节点详细数据

[zk: hadoop102:2181(CONNECTED) 5] ls -s /

[zookeeper]cZxid = 0x0

ctime = Thu Jan 01 08:00:00 CST 1970

mZxid = 0x0

mtime = Thu Jan 01 08:00:00 CST 1970

pZxid = 0x0

cversion = -1

dataVersion = 0

aclVersion = 0

ephemeralOwner = 0x0

dataLength = 0

numChildren = 1

(1)czxid:创建节点的事务 zxid。每次修改 ZooKeeper 状态都会产生一个 ZooKeeper 事务ID。事务 ID 是 ZooKeeper 中所 有修改总的次序。每次修改都有唯一的 zxid,如果 zxid1 小于 zxid2,那么 zxid1 在 zxid2 之前发生。

(2)ctime:znode 被创建的毫秒数(从 1970 年开始)

(3)mzxid:znode 最后更新的事务 zxid

(4)mtime:znode 最后修改的毫秒数(从 1970 年开始)

(5)pZxid:znode 最后更新的子节点 zxid

(6)cversion:znode 子节点变化号,znode 子节点修改次数

(7)dataversion:znode 数据变化号

(8)aclVersion:znode 访问控制列表的变化号

(9)ephemeralOwner:如果是临时节点,这个是 znode 拥有者的 sessionid。如果不是临时节点(即持久节点)则是 0。

(10)dataLength:znode 的数据长度

(11)numChildren:znode 子节点数量

节点类型(面试重点)

        znode是zookeeper的 核心,所有的数据都存储在znode上。znode分为持久类型节点和短暂(临时)节点。它们又可以分为带序号的和不带序号的,通过序号可以推断事件的顺序。

        创建持久节点和短暂节点可以通过 create 命令的参数 "-e" 决定:创建持久节点不需要带参数-e,创建短暂节点需要带参数-e。

        通过 ls -s 观察节点是否是一个持久化节点,需要看ephemeralOwner存储的数据信息,如果是0则为持久节点。如下:test1试试短暂节点,故ephemeralOwner存储了一个大于0的值。  

创建不带序号的永久节点

[zk: localhost:2181(CONNECTED) 3] create /test "diaochan"

Created /test

[zk: localhost:2181(CONNECTED) 4] create /test/youge "liubei"

Created /test/youge

获得节点的值

[zk: localhost:2181(CONNECTED) 5] get -s /test

diaochan

cZxid = 0x100000003

ctime = Wed Aug 29 00:03:23 CST 2018

mZxid = 0x100000003

mtime = Wed Aug 29 00:03:23 CST 2018

pZxid = 0x100000004

cversion = 1

dataVersion = 0

aclVersion = 0

ephemeralOwner = 0x0

dataLength = 7

numChildren = 1

[zk: localhost:2181(CONNECTED) 6] get -s /test/youge

liubei

cZxid = 0x100000004

ctime = Wed Aug 29 00:04:35 CST 2018

mZxid = 0x100000004

mtime = Wed Aug 29 00:04:35 CST 2018

pZxid = 0x100000004

cversion = 0

dataVersion = 0

aclVersion = 0

ephemeralOwner = 0x0

dataLength = 6

numChildren = 0

创建带序号的永久节点

(1)先创建一个普通的根节点/test/huiyin

[zk:localhost:2181(CONNECTED) 1] create /test/huiyin "caocao"

Created /test/huiyin

(2)创建带序号的节点

[zk:localhost:2181(CONNECTED) 2] create -s /test/huiyin/ui "ui"

Created /test/huiyin/ui0000000000

[zk:localhost:2181(CONNECTED) 3] create -s /test/huiyin/ui "ui"

Created /test/huiyin/ui0000000001

[zk:localhost:2181(CONNECTED) 4] create -s /test/huiyin/design " design"

Created /test/huiyin/design0000000002

如果原来没有序号节点,序号从 0 开始依次递增。如果原节点下已有 2 个节点,则再排序时从2 开始,以此类推。

创建短暂节点

(1)创建短暂的不带序号的节点

[zk: localhost:2181(CONNECTED) 7] create -e /sanguo/wuguo "zhouyu"

Created /sanguo/wuguo

(2)创建短暂的带序号的节点

[zk: localhost:2181(CONNECTED) 2] create -e -s /sanguo/wuguo "zhouyu"

Created /sanguo/wuguo0000000001

(3)在当前客户端是能查看到的

[zk: localhost:2181(CONNECTED) 3] ls /sanguo

[wuguo, wuguo0000000001, shuguo]

(4)退出当前客户端然后再重启客户端

[zk: localhost:2181(CONNECTED) 12] quit

[root@node1 zookeeper-3.5.7]$ bin/zkCli.sh

(5)再次查看根目录下短暂节点已经删除

[zk: localhost:2181(CONNECTED) 0] ls /sanguo

[shuguo]

修改节点数据值

[zk: localhost:2181(CONNECTED) 6] set /sanguo/weiguo "simayi"

监听器原理(面试重点)

        客户端注册监听它关心的目录节点,当目录节点发生变化(数据改变、节点删除、子目录节点增加删除)时,ZooKeeper 会通知客户端。监听机制保证ZooKeeper 保存的任何的数据的任何改变都能快速的响应到监听了该节点的应用程序。

节点的值变化监听

1)在node1 主机上注册监听/test节点数据变化

[zk: localhost:2181(CONNECTED) 26] get -w /test

2)在node2主机上修改/test 节点的数据

[zk: localhost:2181(CONNECTED) 1] set /test "watch"

3)观察node1主机收到数据变化的监听

WATCHER::

WatchedEvent state:SyncConnected

type:NodeDataChanged

path:/test

注意】在node2再多次修改/test的值,node上不会再收到监听。因为注册一次只能监听一次。想再次监听,需要再次注册。

节点的子节点变化监听(路径变化)

1)在 node1主机上注册监听/uek 节点的子节点变化

[zk: localhost:2181(CONNECTED) 1] ls -w /test

2)在node2 主机/sanguo 节点上删除子节点

[zk: localhost:2181(CONNECTED) 2] delete /test/lasting

3)观察node1 主机收到子节点变化的监听

WATCHER::

WatchedEvent state:SyncConnected type:NodeChildrenChanged

path:/test

注意】节点的路径变化,也是注册一次,生效一次。想多次生效,就需要多次注册。

节点删除与查看

删除节点

[zk: localhost:2181(CONNECTED) 4] delete /test/test_delete

递归删除节点

[zk: localhost:2181(CONNECTED) 15] deleteall /test

查看节点状态

[zk: localhost:2181(CONNECTED) 17] stat /test20000000006

注意】stat 命令和 ls -s作用一样,都是查看当前节点的结构体。

原文地址:https://www.cnblogs.com/zyd-994264926326/p/15163601.html