Zookeeper(2)shell命令

252 阅读7分钟

1.Zookeeper的使用

安装之后进入bin目录启动

进入bin目录
// 进入zookeeper的bin目录
cd /opt/zookeeper-3.4.10/bin
// 启动zookeeper
./zkServer.sh start
//启动:zkServer.sh start
//停止:zkServer.sh stop
//查看状态:zkServer.sh status

zookeeper客户端链接
[root@mymv bin]# ./zkCli.sh

2.Zookeeper的shell命令

(一)新增节点

create [-s] [-e] path data #其中-s 为有序节点,-e 临时节点,默认为创建临时节点

创建临时节点:临时节点会在会话过期后被删除

create /hadhoop "123456"
create  -e /hadhoop "123456"

创建永久节点,创建持久化有序节点,此时创建的节点名为指定节点名 + 自增序号

[zk: localhost:2181(CONNECTED) 1] create -s /a "aaa"
Created /a0000000001                                   //点名 + 自增序号
[zk: localhost:2181(CONNECTED) 2] create -s /b "bbb"
Created /b0000000002                                   //点名 + 自增序号
[zk: localhost:2181(CONNECTED) 3] create -s /c "ccc"
Created /c0000000003                                    //点名 + 自增序号

(二)获取节点

	get 命令
 [zk: localhost:2181(CONNECTED) 0] get /hadhoop
 123456
 cZxid = 0x2
 ctime = Thu Jan 28 14:24:57 EST 2021
 mZxid = 0x2
 mtime = Thu Jan 28 14:24:57 EST 2021
 pZxid = 0x2
 cversion = 0
 dataVersion = 0
 aclVersion = 0
 ephemeralOwner = 0x0
 dataLength = 6
 numChildren = 0

状态属性说明

cZxid 数据节点创建时的事务 ID
ctime 数据节点创建时的时间
mZxid 数据节点最后一次更新时的事务 ID
mtime 数据节点最后一次更新时的时间
pZxid 数据节点的子节点最后一次被修改时的事务 ID
cversion 子节点的更改次数
dataVersion 节点数据的更改次数
aclVersion 节点的 ACL 的更改次数
ephemeralOwner   如果节点是临时节点,则表示创建该节点的会话的
SessionID;如果节点是持久节点,则该属性值为 0
dataLength 数据内容的长度
numChildren 数据节点当前的子节点个数

(三)修改节点

set命令
[zk: localhost:2181(CONNECTED) 3] set  /hadoop "1234"   
cZxid = 0xd
ctime = Thu Jan 28 14:51:51 EST 2021
mZxid = 0xe
mtime = Thu Jan 28 14:52:00 EST 2021
pZxid = 0xd
cversion = 0
dataVersion = 1
aclVersion = 0
ephemeralOwner = 0x0
dataLength = 4
numChildren = 0

也可以给予版本号进行修改,如果版本号与节点的当前版本号不一致时,会拒绝本次修改

[zk: localhost:2181(CONNECTED) 5] set /hadoop "5678" 2
cZxid = 0xd
ctime = Thu Jan 28 14:51:51 EST 2021
mZxid = 0x10
mtime = Thu Jan 28 14:54:46 EST 2021
pZxid = 0xd
cversion = 0
dataVersion = 3
aclVersion = 0
ephemeralOwner = 0x0
dataLength = 4
numChildren = 0
[zk: localhost:2181(CONNECTED) 6] set /hadoop "9101" 4   
version No is not valid : /hadoop

(四)删除节点

delete path [version]

和更新节点数据一样,也可以传入版本号,当你传入的数据版本号 (dataVersion)和当前节点的数据版本号不符合时,zookeeper 不会执行删除操作。

[zk: localhost:2181(CONNECTED) 7] delete /hadoop 3
[zk: localhost:2181(CONNECTED) 8] delete /hadoop 2
Node does not exist: /hadoop

删除节点和其所有的后代节点

rmr path

(五)查看节点列表

ls path
ls2 path   不仅可
以查看指定路径下的所有节点,还可以查看当前节点的信息
[zk: localhost:2181(CONNECTED) 0] ls /
[cluster, controller_epoch, brokers, storm, zookeeper, admin,...]
[zk: localhost:2181(CONNECTED) 1] ls2 /
[cluster, controller_epoch, brokers, storm, zookeeper, admin, ....]
cZxid = 0x0
ctime = Thu Jan 01 08:00:00 CST 1970
mZxid = 0x0
mtime = Thu Jan 01 08:00:00 CST 1970
pZxid = 0x130
cversion = 19
dataVersion = 0
aclVersion = 0
ephemeralOwner = 0x0
dataLength = 0
numChildren = 11

(六)查看节点状态

可以使用 stat 命令查看节点状态,它的返回值和 get 命令类似,但不会返回 节点数据

[zk: localhost:2181(CONNECTED) 43] stat /hadhoop
cZxid = 0x2
ctime = Thu Jan 28 14:24:57 EST 2021
mZxid = 0x2
mtime = Thu Jan 28 14:24:57 EST 2021
pZxid = 0x2
cversion = 0
dataVersion = 0
aclVersion = 0
ephemeralOwner = 0x0
dataLength = 6
numChildren = 0

(七)监听器

使用get [path] watch监听器可以在被监听的节点发生改变时,向客户端发出通知,Zookeeper的监听器是一次性的,使用一次之后就会失效

[zk: localhost:2181(CONNECTED) 52] create /w2 "watcher"
Created /w2
[zk: localhost:2181(CONNECTED) 53] get /w2 watch
watcher
cZxid = 0x2d
ctime = Fri Jan 29 04:23:56 EST 2021
mZxid = 0x2d
mtime = Fri Jan 29 04:23:56 EST 2021
pZxid = 0x2d
cversion = 0
dataVersion = 0
aclVersion = 0
ephemeralOwner = 0x0
dataLength = 7
numChildren = 0
[zk: localhost:2181(CONNECTED) 54] set /w2 "nowatcher"

WATCHER::

WatchedEvent state:SyncConnected type:NodeDataChanged path:/w2     //节点改变通知
cZxid = 0x2d
ctime = Fri Jan 29 04:23:56 EST 2021
mZxid = 0x2e
mtime = Fri Jan 29 04:24:19 EST 2021
pZxid = 0x2d
cversion = 0
dataVersion = 1
aclVersion = 0
ephemeralOwner = 0x0
dataLength = 9
numChildren = 0

使用ls\ls2 [path] watch能够使用监听器监听该节点下所有的子节点的修改操作

[zk: localhost:2181(CONNECTED) 9] ls /hadoop watch
[]
[zk: localhost:2181(CONNECTED) 10] create
/hadoop/yarn "aaa"
WATCHER::
WatchedEvent state:SyncConnected type:NodeChildrenChanged path:/hadoop

(八)节点权限管理

zookeeper拥有的与linux文件系统相视的管理权限,用来对每个节点进行权限的管理,称为acl权限

特点:节点的权限是独立的,子节点不会继承父节点的权限,客户端无法访问父节点,但是可以访问其子节点

acl权限使用scheme:id:premission来标识

(1)权限模式(scheme):授权的策略

方案描述
world只有一个用户:anyone,代表登录zookeeper所有人(默认)
ip对客户端使用IP地址认证
auth使用已添加认证的用户认证
digest使用“用户名:密码”方式认证

(2)授权对象(id):授权的对象

给谁授予权限,授权对象ID是指,权限赋予的实体,例如:IP 地址或用户。

(3)权限(premisssion)授权的权限

create、delete、read、writer、admin也就是 增、删、改、查、管理权限, 这5种权限简写为cdrwa,注意:这5种权限中,delete是指对子节点的删除权限,其它4种 权限指对自身节点的操作权限

权限ACL简写描述
createc可以创建子节点
deleted可以删除子节点(仅下一级节点)
readr可以读取节点数据及显示子节点列表
writew可以设置节点数据
admina可以设置节点访问控制列表权限

(4)用户权限的相关命令

命令描述
getAcl读取ACL权限
setAcl设置ACL权限
addauth添加认证用户

(九)权限授权案例

(1)world授权模式

setAcl <path> world:anyone:<acl>
[zk: localhost:2181(CONNECTED) 63] setAcl /node1 world:anyone:cdrwa  //授权登陆zookeeper的所有用户,增删读写管理权限

[zk: localhost:2181(CONNECTED) 63] setAcl /node1 world:anyone:cdrwa  //授权登陆zookeeper的所有用户,读权限

(2)IP授权模式

setAcl <path> ip:<ip>:<acl>
[zk: localhost:2181(CONNECTED) 1] setAcl /node2 ip:100.81.5.208:cdrwa	//给ip地址为100.81.5.208的用户授予权限

[zk: localhost:2181(CONNECTED) 2] get /node2
Authentication is not valid : /node2        //没有权限

(3)Auth模式

addauth digest <user>:<password> #添加认证用户
setAcl <path> auth:<user>:<acl>
[zk: localhost:2181(CONNECTED) 1] addauth digest root:123456         //添加认证用户
[zk: localhost:2181(CONNECTED) 4] create /node3 "node3"             //创建节点
[zk: localhost:2181(CONNECTED) 5] setAcl /node3 auth:root:cdrwa          //修改节点权限
[zk: localhost:2181(CONNECTED) 6] get /node3                   //查看节点

(4)Digest模式 相比较auth模式,需要添加用户密码

setAcl <path> digest:<user>:<password>:<acl>
//使用shell命令计算SHA1及BASE64处理的密文
echo -n digestTest:123456 |openssl dgst -binary -sha1| openssl base64
gEVj07BjRN4bMtJ0Jm9NxR8n3nw=

//给节点授予权限
[zk: localhost:2181(CONNECTED) 11] setAcl /node4 digest:digestTest:gEVj07BjRN4bMtJ0Jm9NxR8n3nw=:cdrwa

//添加用户
addauth digest digestTest:123456

//查看节点
[zk: localhost:2181(CONNECTED) 13] get /node4
node4
cZxid = 0x3f
ctime = Fri Jan 29 06:57:50 EST 2021
mZxid = 0x3f
mtime = Fri Jan 29 06:57:50 EST 2021
pZxid = 0x3f
cversion = 0
dataVersion = 0
aclVersion = 1
ephemeralOwner = 0x0
dataLength = 5
numChildren = 0

可以给节点一次授予多种权限

zk: localhost:2181(CONNECTED) 0] create /node5 "node5"
Created /node5
[zk: localhost:2181(CONNECTED) 1] addauth digest itcast:123456 #添加认
证用户
[zk: localhost:2181(CONNECTED) 2] setAcl /node5
ip:192.168.60.129:cdra,auth:itcast:cdrwa,digest:itheima:qlzQzCLKhBROgh
kooLvb+Mlwv4A=:cdrwa