一、启动zookeeper
进入zookeeper的bin目录
# cd /usr/local/zookeeper/apache-zookeeper-3.5.8-bin/bin
启动zookeeper服务
# ./zkServer.sh start
启动zookeeper的客户端
# ./zkCli.sh
停止: # ./zkServer.sh stop
查看状态: # ./zkServer.sh status
退出当前会话:#quit
二、创建节点
1、创建持久化节点并写入数据
create /hadoop "123456"
2、从节点中读取数据
# get /hadoop
3、创建持久化有序节点,此时创建的节点名为指定节点名+自增序号
create -s /a "a"
4、创建临时节点,临时节点会在会话过期后被删除:
# create -e /tem "tmp"
结束会话后,在启动zookeeper客户端,
这时候在获取/tmp这个节点就会报错不存在此节点异常。
5、创建临时有序节点,临时节点会在会话过期后被删除:
# create -s -e /tmp "tmp"
结束会话后再启动客户端查询该节点,就会提示不存在该节点
二、更新节点
1、更新节点的命令是set,可以直接进行修改,如下:
# set /hadoop "345"
三、删除节点
delete [path]
# delete /hadoop
delete [-v version] path 根据版本号删除
[zk: localhost:2181(CONNECTED) 23] get -s /hadoop/node1
node1
cZxid = 0x22
ctime = Thu Oct 22 00:27:08 CST 2020
mZxid = 0x22
mtime = Thu Oct 22 00:27:08 CST 2020
pZxid = 0x22
cversion = 0
dataVersion = 0
aclVersion = 0
ephemeralOwner = 0x0
dataLength = 5
numChildren = 0
[zk: localhost:2181(CONNECTED) 24] get -w /hadoop/node1
node1
[zk: localhost:2181(CONNECTED) 25] delete -v 0 /hadoop/node1
WATCHER::
WatchedEvent state:SyncConnected type:NodeDeleted path:/hadoop/node1
WATCHER::
要想删除某个节点及其所有后代节点,可以使用递归删除,命令为 rmr path
但是当我使用rmr 删除的时候会出现 The command 'rmr' has been deprecated. Please use 'deleteall' instead.
意思是:命令'rmr'已被弃用。请改用“deleteall”。
所以,现在如果删除某个节点及其所有后代节点应该使用:deleteall [path]
# deleteall /hadoop
四、查看节点
1、
get path 获取的是节点的内容,无详细信息
get [-s] [-w] path 获取节点数据信息,-s表示获取节点信息,包括时间戳、版本号、数据大小等
# get -s -w /hadoop
2、查看节点状态
可以使用stat命令查看节点状态,它的返回值和get -s -w 相似,但不会返回节点内容
stat path
# stat /hadoop
3、查看节点列表
查看节点列表有ls path 和ls2 path两个命令,后者是前者的增强,不仅可以查看指定路径下的所有节点,还可以查看当前节点的信息
[zk: localhost:2181(CONNECTED) 9] ls /hadoop
[node1, node2]
[zk: localhost:2181(CONNECTED) 10] ls2 /hadoop
'ls2' has been deprecated. Please use 'ls [-s] path' instead.
[node2, node1]
cZxid = 0x1e
ctime = Thu Oct 22 00:18:55 CST 2020
mZxid = 0x21
mtime = Thu Oct 22 00:25:22 CST 2020
pZxid = 0x23
cversion = 2
dataVersion = 1
aclVersion = 0
ephemeralOwner = 0x0
dataLength = 8
numChildren = 2
[zk: localhost:2181(CONNECTED) 11]
4、监听器
旧版本中使用get path [watch] 或者 stat path[watch]
在新版本中使用会提示已过时
[zk: localhost:2181(CONNECTED) 11] get /hadoop watch
'get path [watch]' has been deprecated. Please use 'get [-s] [-w] path' instead.
xiaoming
[zk: localhost:2181(CONNECTED) 12] stat /hadoop watch
'stat path [watch]' has been deprecated. Please use 'stat [-w] path' instead.
cZxid = 0x1e
ctime = Thu Oct 22 00:18:55 CST 2020
mZxid = 0x21
mtime = Thu Oct 22 00:25:22 CST 2020
pZxid = 0x23
cversion = 2
dataVersion = 1
aclVersion = 0
ephemeralOwner = 0x0
dataLength = 8
numChildren = 2
新版本中使用 get [-s] [-w] path 或者 stat [-w] path
5、监听器ls\ls2 path [watch] (已弃用)
使用ls path [watch] 或 ls2 path [watch]注册的监听器能够监听该节点下所有子节点的增加和删除操作。
[zk: localhost:2181(CONNECTED) 16] ls /hadoop watch
'ls path [watch]' has been deprecated. Please use 'ls [-w] path' instead.
[node1, node2]
[zk: localhost:2181(CONNECTED) 17] ls2 hadoop watch
'ls2' has been deprecated. Please use 'ls [-s] path' instead.
应该使用
ls [-w] path 代替 ls path [watch]
ls [-s] path 代替ls2 path [watch]
[zk: localhost:2181(CONNECTED) 19] ls -w /hadoop
[node1, node2]
[zk: localhost:2181(CONNECTED) 20] ls -s /hadoop
[node1, node2]cZxid = 0x1e
ctime = Thu Oct 22 00:18:55 CST 2020
mZxid = 0x24
mtime = Thu Oct 22 00:52:37 CST 2020
pZxid = 0x23
cversion = 2
dataVersion = 2
aclVersion = 0
ephemeralOwner = 0x0
dataLength = 6
numChildren = 2
[zk: localhost:2181(CONNECTED) 21]
五、zookeeper的acl权限控制
5.1、概述
zookeeper类似文件系统,client可以创建节点、更新节点、删除节点,那么如何做到节点的权限的控制呢?
zookeeper的access control list 访问控制列表可以做到这一点。
acl 权限控制,使用scheme:id:permission来标识,主要涵盖3个方面:
- 权限模式(scheme)授权的策略
- 授权对象(id):授权的对象
- 权限(permission):授予的权限
其特性如下:
- zookeeper的权限控制是基于每个znode节点的,需要对每个节点设置权限
- 每个znode支持设置多种权限控制方案和多个权限
- 子节点不会继承父节点的权限,客户端无权访问某节点,但可能可以访问它的子节点
5.2 权限模式
采用何种方式授权
方案 | 描述 |
---|---|
world | 只有一个用户:anyone,代表登录zookeeper所有人(默认) |
ip | 对客户端使用IP地址认证 |
auth | 使用已添加认证的用户认证 |
diges | 使用“用户名:密码”方式认证 |
5.3授予的对象
给谁授予权限
授权对象ID是指,权限赋予的实体,例如:IP地址或用户。
5.4授予的权限
授予什么权限
create、delete、read、writer、admin也就是增删改查、管理权限,这5种权限简写为cdrwa,注意:这5种权限中,delete是指对子节点的删除权限,其他4种权限指对自身节点的操作权限
权限 | ACL简写 | 描述 |
create | c | 可以创建子节点 |
delete | d | 可以删除子节点 |
read | r | 可以读取节点数据及显示子节点列表 |
writer | w | 可以设置节点数据 |
admin | a | 可以设置节点访问控制列表权限 |
5.5授权的相关命令
命令 | 使用方式 | 描述 |
getAcl | getAcl<path> | 读取ACL权限 |
setAcl | setAcl<path><acl> | 设置ACL权限 |
addauth | addauth<scheme><auth> | 添加认证用户 |
5.6案例
world授权模式:
命令
setAcl <path> world:anyone:<acl>
[zk: localhost:2181(CONNECTED) 0] getAcl /hadoop
'world,'anyone
: cdrwa
//取消Hadoop节点的create权限
[zk: localhost:2181(CONNECTED) 2] setAcl /hadoop world:anyone:drwa
[zk: localhost:2181(CONNECTED) 3] getAcl /hadoop
'world,'anyone
: drwa
//发现hadoop创建节点不成功了
[zk: localhost:2181(CONNECTED) 4] create /hadoop/node3 "node3"
Authentication is not valid : /hadoop/node3
delete删除命令对当前设置节点的子节点生效,如果当前节点没有d权限,不能删除它的子节点,但是可以删除当前节点。
[zk: localhost:2181(CONNECTED) 17] setAcl /hadoop world:anyone:acwr
[zk: localhost:2181(CONNECTED) 18] getAcl /hadoop
'world,'anyone
: crwa
[zk: localhost:2181(CONNECTED) 19] getAcl /hadoop/node1
'world,'anyone
: cdrwa
[zk: localhost:2181(CONNECTED) 20] delete /hadoop/node1
Authentication is not valid : /hadoop/node1
[zk: localhost:2181(CONNECTED) 21]
IP授权模式
命令
setAcl <path>ip:<ip>:<acl>
案例
注意:远程登录zookeeper命令:./zkCli.sh -server ip
# setAcl /node2 ip:192.168.60.129:cdrwa
授予多个ip地址权限,用逗号隔开
# setAcl /node2 ip:192.168.60.129:cdrwa,ip:192.168.60.130:cdrwa
Auth授权模式:
命令
addauth digest <user>:<password> #添加认证用户
setAcl <path> auth:<user>:<acl>
案例
[zk: localhost:2181(CONNECTED) 36] create /node3 "node3"
Created /node3
[zk: localhost:2181(CONNECTED) 37] getAcl /node3
'world,'anyone
: cdrwa
[zk: localhost:2181(CONNECTED) 38] addauth digest itcast:123456
[zk: localhost:2181(CONNECTED) 39] setAcl /node3 auth:itcast:cdrwa
[zk: localhost:2181(CONNECTED) 40] getAcl /node3
'digest,'itcast:673OfZhUE8JEFMcu0l64qI8e5ek=
: cdrwa