Linux下 zookeeper的使用之增删改查节点

一、启动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个方面:

  1. 权限模式(scheme)授权的策略
  2. 授权对象(id):授权的对象
  3. 权限(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简写描述
createc可以创建子节点
deleted可以删除子节点
readr可以读取节点数据及显示子节点列表
writerw可以设置节点数据
admina可以设置节点访问控制列表权限

 

 

 

 

 

 

 

5.5授权的相关命令

命令使用方式描述
getAclgetAcl<path>读取ACL权限
setAclsetAcl<path><acl>设置ACL权限
addauthaddauth<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

 

  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值