Zookeeper——常用命令
基础命令操作
-
启动/停止/重启zk服务
./zkServer.sh start #启动 ./zkServer.sh stop #停止 ./zkServer.sh restart #重启
-
查看zk的运行状态
./zkServer.sh status
- 客户端链接zk
./zkCli.sh
- help 查看客户端帮助命令
[zk: localhost:2181(CONNECTED) 0] help
- ls 查看
[zk: localhost:2181(CONNECTED) 1] ls / [niocoder, zookeeper] [zk: localhost:2181(CONNECTED) 2] ls /zookeeper [quota] [zk: localhost:2181(CONNECTED) 4] ls /zookeeper/quota []
- get 获取节点数据和更新信息
[zk: localhost:2181(CONNECTED) 7] get /zookeeper #下面空行说明节点内容为空 cZxid = 0x0 ctime = Thu Jan 01 00:00:00 UTC 1970 mZxid = 0x0 mtime = Thu Jan 01 00:00:00 UTC 1970 pZxid = 0x0 cversion = -1 dataVersion = 0 aclVersion = 0 ephemeralOwner = 0x0 dataLength = 0 numChildren = 1 [zk: localhost:2181(CONNECTED) 8]
-
get
内容为空- cZxid :创建节点的id
- ctime : 节点的创建时间
- mZxid :修改节点的id
- mtime :修改节点的时间
- pZxid :子节点的id
- cversion : 子节点的版本
- dataVersion : 当前节点数据的版本
- aclVersion :权限的版本
- ephemeralOwner :判断是否是临时节点
- dataLength : 数据的长度
- numChildren :子节点的数量
- stat 获得节点的更新信息
[zk: localhost:2181(CONNECTED) 8] stat /zookeeper cZxid = 0x0 ctime = Thu Jan 01 00:00:00 UTC 1970 mZxid = 0x0 mtime = Thu Jan 01 00:00:00 UTC 1970 pZxid = 0x0 cversion = -1 dataVersion = 0 aclVersion = 0 ephemeralOwner = 0x0 dataLength = 0 numChildren = 1
- ls2(ls命令和stat命令的整合)
[zk: localhost:2181(CONNECTED) 10] ls2 /zookeeper [quota] cZxid = 0x0 ctime = Thu Jan 01 00:00:00 UTC 1970 mZxid = 0x0 mtime = Thu Jan 01 00:00:00 UTC 1970 pZxid = 0x0 cversion = -1 dataVersion = 0 aclVersion = 0 ephemeralOwner = 0x0 dataLength = 0 numChildren = 1
- create 创建节点
create [-s] [-e] path data acl
#创建name节点,节点的内容为caoweixiong [zk: localhost:2181(CONNECTED) 1] create /name caoweixiong
- create -e 创建临时节点
#创建临时节点 [zk: localhost:2181(CONNECTED) 4] create -e /name/temp caoweixiong Created /name/temp
- create -s 创建顺序节点 自动累加
# 创建顺序节点,顺序节点会自动累加 [zk: localhost:2181(CONNECTED) 2] create -s /name/sec seq Created /name/sec0000000001 [zk: localhost:2181(CONNECTED) 3] create -s /name/sec seq Created /name/sec0000000002
- set path data [version] 修改节点
# 修改节点内容为new-name [zk: localhost:2181(CONNECTED) 7] set /name new-name
- delete path [version] 删除节点
[zk: localhost:2181(CONNECTED) 13] delete /name/sec0000000001
- watcher通知机制
关于watcher
机制大体的理解可以为,当每个节点发生变化,都会触发watcher
事件,类似于mysql
的触发器。zk
中 watcher
是一次性的,触发后立即销毁。
-
stat path [watch]
设置watch事件get path [watch]
设置watch事件- 子节点创建和删除时触发watch事件,子节点修改不会触发该事件
stat path [watch] 设置watch事件
#添加watch 事件 [zk: localhost:2181(CONNECTED) 18] stat /longfei watch Node does not exist: /longfei #创建longfei节点时触发watcher事件 [zk: localhost:2181(CONNECTED) 19] create /longfei test WATCHER:: WatchedEvent state:SyncConnected type:NodeCreated path:/longfei Created /longfei
get path [watch] 设置watch事件
#使用get命令添加watch事件 [zk: localhost:2181(CONNECTED) 20] get /longfei watch test cZxid = 0x20000000e ctime = Sat Jun 02 14:43:15 UTC 2018 mZxid = 0x20000000e mtime = Sat Jun 02 14:43:15 UTC 2018 pZxid = 0x20000000e cversion = 0 dataVersion = 0 aclVersion = 0 ephemeralOwner = 0x0 dataLength = 4 numChildren = 0 #修改节点触发watcher事件 [zk: localhost:2181(CONNECTED) 21] set /longfei new_test WATCHER:: WatchedEvent state:SyncConnected type:NodeDataChanged path:/longfei cZxid = 0x20000000e ctime = Sat Jun 02 14:43:15 UTC 2018 mZxid = 0x20000000f mtime = Sat Jun 02 14:45:06 UTC 2018 pZxid = 0x20000000e cversion = 0 dataVersion = 1 aclVersion = 0 ephemeralOwner = 0x0 dataLength = 8 numChildren = 0 [zk: localhost:2181(CONNECTED) 22] #删除触发watcher事件 [zk: localhost:2181(CONNECTED) 23] get /longfei watch new_test cZxid = 0x20000000e ctime = Sat Jun 02 14:43:15 UTC 2018 mZxid = 0x20000000f mtime = Sat Jun 02 14:45:06 UTC 2018 pZxid = 0x20000000e cversion = 0 dataVersion = 1 aclVersion = 0 ephemeralOwner = 0x0 dataLength = 8 numChildren = 0 [zk: localhost:2181(CONNECTED) 24] delete /longfei WATCHER:: WatchedEvent state:SyncConnected type:NodeDeleted path:/longfei [zk: localhost:2181(CONNECTED) 25]
- ACL权限控制
ZK的节点有5种操作权限:CREATE
、READ
、WRITE
、DELETE
、ADMIN
也就是 增、删、改、查、管理权限,这5种权限简写为crwda
(即:每个单词的首字符缩写)。 注:这5种权限中,delete是指对子节点的删除权限,其它4种权限指对自身节点的操作权限
身份的认证有4种方式:
-
world
:默认方式,相当于全世界都能访问auth
:代表已经认证通过的用户(cli中可以通过addauth digest user:pwd 来添加当前上下文中的授权用户)digest
:即用户名:密码这种方式认证,这也是业务系统中最常用的ip
:使用Ip地址认证
使用[scheme:id:permissions]
来表示acl权限
getAcl:获取某个节点的acl权限信息
#获取节点权限信息默认为 world:cdrwa任何人都可以访问 [zk: localhost:2181(CONNECTED) 34] getAcl /merryyou 'world,'anyone : cdrwa
setAcl 设置权限
[zk: localhost:2181(CONNECTED) 35] create /merryyou/test test Created /merryyou/test [zk: localhost:2181(CONNECTED) 36] getAcl /merryyou/test 'world,'anyone : cdrwa #设置节点权限 crwa 不允许删除 [zk: localhost:2181(CONNECTED) 37] setAcl /merryyou/test world:anyone:crwa cZxid = 0x200000018 ctime = Sat Jun 02 16:18:18 UTC 2018 mZxid = 0x200000018 mtime = Sat Jun 02 16:18:18 UTC 2018 pZxid = 0x200000018 cversion = 0 dataVersion = 0 aclVersion = 1 ephemeralOwner = 0x0 dataLength = 4 numChildren = 0 #查询刚才设置的acl权限信息 crwa 没有删除权限 [zk: localhost:2181(CONNECTED) 38] getAcl /merryyou/test 'world,'anyone : crwa [zk: localhost:2181(CONNECTED) 39] [zk: localhost:2181(CONNECTED) 39] create /merryyou/test/abc abc Created /merryyou/test/abc #删除子节点的时候提交权限不足 [zk: localhost:2181(CONNECTED) 40] delete /merryyou/test/abc Authentication is not valid : /merryyou/test/abc #设置节点的权限信息为rda [zk: localhost:2181(CONNECTED) 41] setAcl /merryyou/test world:anyone:rda cZxid = 0x200000018 ctime = Sat Jun 02 16:18:18 UTC 2018 mZxid = 0x200000018 mtime = Sat Jun 02 16:18:18 UTC 2018 pZxid = 0x20000001a cversion = 1 dataVersion = 0 aclVersion = 2 ephemeralOwner = 0x0 dataLength = 4 numChildren = 1 [zk: localhost:2181(CONNECTED) 42] getAcl /merryyou/test 'world,'anyone : dra #可以成功删除 [zk: localhost:2181(CONNECTED) 43] delete /merryyou/test/abc [zk: localhost:2181(CONNECTED) 46] ls /merryyou/test [] [zk: localhost:2181(CONNECTED) 47] #设置节点信息为a admin [zk: localhost:2181(CONNECTED) 47] setAcl /merryyou/test world:anyone:a cZxid = 0x200000018 ctime = Sat Jun 02 16:18:18 UTC 2018 mZxid = 0x200000018 mtime = Sat Jun 02 16:18:18 UTC 2018 pZxid = 0x20000001d cversion = 2 dataVersion = 0 aclVersion = 3 ephemeralOwner = 0x0 dataLength = 4 numChildren = 0 #获取 设置都提示权限不足 [zk: localhost:2181(CONNECTED) 49] get /merryyou/test Authentication is not valid : /merryyou/test [zk: localhost:2181(CONNECTED) 50] set /merryyou/test 123 Authentication is not valid : /merryyou/test [zk: localhost:2181(CONNECTED) 51]