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简写 | 描述 |
|---|---|---|
| create | c | 可以创建子节点 |
| delete | d | 可以删除子节点(仅下一级节点) |
| read | r | 可以读取节点数据及显示子节点列表 |
| write | w | 可以设置节点数据 |
| admin | a | 可以设置节点访问控制列表权限 |
(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