zookeeper(三) 客户端命令

前言

集群搭建,本章内容涉及到多个服务器之间的通信

zookeeper客户端

zkCli.sh 位置

位于zookeeper 安装目录的bin目录下
/zookeeper-3.5.7/bin

进入zookeeper客户端命令:sh zkCli.sh

sh zkCli.sh
[zk: localhost:2181(CONNECTED) 1] #输入命令的地方

退出zookeeper客户端命令:quit

[zk: localhost:2181(CONNECTED) 1] quit

zookeeper客户端命令:

命令 描述
help 显示所有操作命令
-server host:port 访问客户端同时,远程登录其他zookeeper客户端
config 查看zookeeper集群配置
connect 在当前客服端连接其他zookeeper服务器
create 创建子节点
delete 删除子节点,无法删除嵌套节点
deleteall 和delete一样,但是支持嵌套节点删除
get 获取节点的值
getAcl 获取节点权限
history 查看历史输入命令
listquota
ls 列出所在节点层级
ls2 类似于 ls -s path
printwatches off:设置打印监听信息,on:关闭监听后的打印信息
quit 退出zookeeper客户端
reconfig
redo
removewatches
rmr 命令'rmr'已被弃用。请改用“deleteall”
set 对节点赋值
setquota
stat 同 ls -s 效果类似,stat -w 对节点进行监听
sync sync是使得client当前连接着的ZooKeeper服务器,和ZooKeeper的Leader节点同步(sync)一下数据。
setAcl 设置节点权限

help

ZooKeeper -server host:port cmd args
    addauth scheme auth
    close 
    config [-c] [-w] [-s]
    connect host:port
    create [-s] [-e] [-c] [-t ttl] path [data] [acl]
    delete [-v version] path
    deleteall path
    delquota [-n|-b] path
    get [-s] [-w] path
    getAcl [-s] path
    history 
    listquota path
    ls [-s] [-w] [-R] path
    ls2 path [watch]
    printwatches on|off
    quit 
    reconfig [-s] [-v version] [[-file path] | [-members serverID=host:port1:port2;port3[,...]*]] | [-add serverId=host:port1:port2;port3[,...]]* [-remove serverId[,...]*]
    redo cmdno
    removewatches path [-c|-d|-a] [-l]
    rmr path
    set [-s] [-v version] path data
    setAcl [-s] [-v version] [-R] path acl
    setquota -n|-b val path
    stat [-w] path
    sync path
Command not found: Command not found help

远程登录

语法: sh zkCli.sh -server host:port [命令] [选项]
描述:

zh Cli.sh 除了可以访问当前zookeeper客户端,也可以远程其他
zookeeper客户端

案例:登录到 hadoop103服务器

[*****@hadoop102 bin]$ sh zkCli.sh -server hadoop103:2181 
[zk: hadoop103:2181(CONNECTED) 0

config

查看 zookeeper集群信息

$ sh zkCli.sh config

WatchedEvent state:SyncConnected type:None path:null
server.2=hadoop102:2888:3888:participant
server.3=hadoop103:2888:3888:participant
server.4=hadoop104:2888:3888:participant
server.5=hadoop105:2888:3888:participant
version=0

connect

语法:connect host:port
描述:host 服务器IP,port 服务器端口

在当前zookeeper客户端切换到其他zookeeper客户端,:这个和 -service 的区别

#  准备切换到 hadoop103
[zk: localhost:2181(CONNECTED) 0] connect hadoop103:2181
#  已经切换到了 hadoop103
[zk: hadoop103:2181(CONNECTED) 1] 

create

语法: create [-s] [-e] [-c] [-t ttl] path [data] [acl]
描述: 创建一个字节

-s:含有序列 xxxxx00000001
-e:(ephemeral) 表示是一个临时的,当服务器关闭,该节点自动清理。
-c:
-t:
[data]:create 除了可创建节点,还可以对该节点赋值
[acl]:zookeeper内部封装了Perm类型,包含5种权限类型:
READ,WRITE ,CREATE ,DELETE,ADMIN ,以及ALL = 五合一类型

创建一个默认空数据节点

[zk: localhost:2181(CONNECTED) 2] create /sanguo
Created /sanguo

创建一个节点,并赋值

[zk: localhost:2181(CONNECTED) 7] create /sanguo/kongming 诸葛亮
Created /sanguo/kongming
[zk: localhost:2181(CONNECTED) 8] get /sanguo/kongming
诸葛亮

创建一个节点,并设置序列号

[zk: localhost:2181(CONNECTED) 6] create -s /sanguo/zhugeliang
Created /sanguo/zhugeliang0000000001

创建一个临时节点,当服务器关闭后,该节点自动删除

[zk: localhost:2181(CONNECTED) 10] create -e /sanguo/zhangfen
Created /sanguo/zhangfen

创建一个带序列号的临时节点

[zk: localhost:2181(CONNECTED) 11] create -es /sanguo/zhangfen
Created /sanguo/zhangfen0000000004

zookeeper 的数据类型

通过 zookeeper的创建命令,总结 zookeeper的数据权限,共四种。

  1. 永久节点
  2. 永久带序列号
  3. 临时节点
  4. 临时带序列号

delete

语法: delete [-v version] path
描述:用于删除一个节点

删除一个节点

delete /sanguo/zhaoyun3

delete -v:删除指定的版本号

查看版本号查看 dataVersion= 4,就是数据版本号

[zk: localhost:2181(CONNECTED) 0] ls -s /sanguo
[shuguo, weiguo]cZxid = 0x600000022
ctime = Wed May 19 14:05:09 CST 2021
mZxid = 0x600000022
mtime = Wed May 19 14:05:09 CST 2021
pZxid = 0x70000000a
cversion = 4
dataVersion = 0
aclVersion = 0
ephemeralOwner = 0x0
dataLength = 12
numChildren = 2

deleteall

语法:deleteall path
描述:能够删除嵌套节点

删除 sanguo 节点

deleteall /sanguo

get

语法:get path
描述:获取节点数据

# 重新创建sanguo节点,并设值 三国演义
[zk: localhost:2181(CONNECTED) 11] create /sanguo 三国演义
Created /sanguo
# 获取 /sanguo 值
[zk: localhost:2181(CONNECTED) 12] get /sanguo
三国演义

getAcl

语法:getAcl path
描述:获取节点权限

[zk: localhost:2181(CONNECTED) 0] getAcl /sanguo
'world,'anyone
: cdrwa

listquota

语法:listquota path

ls

语法:ls [-s] [-w] [-R] path
描述:展示节点层级信息
-s:附加次级信息

[zk: localhost:2181(CONNECTED) 6] ls -s /sanguo
[shuguo]cZxid = 0x600000022
ctime = Wed May 19 14:05:09 CST 2021
mZxid = 0x600000022
mtime = Wed May 19 14:05:09 CST 2021
pZxid = 0x700000003
cversion = 1
dataVersion = 0
aclVersion = 0
ephemeralOwner = 0x0
dataLength = 12
numChildren = 1

-w:监听子节点,监听是一次性的,只能监听一次。

# 监听/sanguo
[zk: localhost:2181(CONNECTED) 7] ls -w /sanguo
[shuguo]

# 此时在hadoop103创建一个新的节点
[zk: localhost:2181(CONNECTED) 0] create /sanguo/weiguo
Created /sanguo/weiguo

# 回到该服务,查看服务器监听变化
[zk: localhost:2181(CONNECTED) 7] ls -w /sanguo
[shuguo]
[zk: localhost:2181(CONNECTED) 8]
WATCHER::
WatchedEvent state:SyncConnected type:NodeChildrenChanged path:/sanguo

-R:展示节点层级信息,包括子节点

[zk: localhost:2181(CONNECTED) 8] ls -R /sanguo
/sanguo
/sanguo/shuguo
/sanguo/weiguo

ls2

语法: ls2 path [watch]
描述:同 ls -s 一样,查看节点信息。[watch] 用于进行监听

[zk: localhost:2181(CONNECTED) 9] ls2 /sanguo
'ls2' has been deprecated. Please use 'ls [-s] path' instead.
[shuguo, weiguo]
cZxid = 0x600000022
ctime = Wed May 19 14:05:09 CST 2021
mZxid = 0x600000022
mtime = Wed May 19 14:05:09 CST 2021
pZxid = 0x700000005
cversion = 2
dataVersion = 0
aclVersion = 0
ephemeralOwner = 0x0
dataLength = 12
numChildren = 2

printwatches

语法:printwatches on|off
描述:设置是否打印监听信息

quit

语法:quit
描述:退出zookeeper客户端

reconfig

语法:reconfig [-s] [-v version] [[-file path] | [-members serverID=host:port1:port2;port3[,...]]] | [-add serverId=host:port1:port2;port3[,...]] [-remove serverId[,...]*]
描述:

redo

语法:redo cmdno
描述:

removewatches

语法:removewatches path [-c|-d|-a] [-l]
描述:

rmr

语法:rmr path
描述:命令'rmr'已被弃用。请改用“deleteall”

[zk: localhost:2181(CONNECTED) 10] rmr /sanguo
The command 'rmr' has been deprecated. Please use 'deleteall' instead.

set

语法:set [-s] [-v version] path data
描述:对节点进行设值

[zk: localhost:2181(CONNECTED) 0] set /sanguo 三国演义
[zk: localhost:2181(CONNECTED) 1] get /sanguo
三国演义

set -s:设值并打印节点信息

[zk: localhost:2181(CONNECTED) 2] set -s /sanguo 三国演义
cZxid = 0x600000022
ctime = Wed May 19 14:05:09 CST 2021
mZxid = 0x800000006
mtime = Wed May 19 18:20:20 CST 2021
pZxid = 0x70000000a
cversion = 4
dataVersion = 2
aclVersion = 0
ephemeralOwner = 0x0
dataLength = 12
numChildren = 2

set -v:对指定版本设置

 set -v 2 /sanguo 三国演义

setAcl

语法: setAcl [-s] [-v version] [-R] path acl
描述:设置字节权限

setAcl /test2 ip:192.168.0.1:crwda // 将节点权限设置为IP:ip:192.168.0.1的客户端可以对节点进行 增、删、改、查、管理权限

setquota

语法:setquota -n|-b val path
描述:

stat

语法:stat [-w] path
描述:同 ls -s 效果类似,stat -w 对节点进行监听

[zk: localhost:2181(CONNECTED) 4] stat /sanguo
cZxid = 0x600000022
ctime = Wed May 19 14:05:09 CST 2021
mZxid = 0x600000022
mtime = Wed May 19 14:05:09 CST 2021
pZxid = 0x70000000a
cversion = 4
dataVersion = 0
aclVersion = 0
ephemeralOwner = 0x0
dataLength = 12
numChildren = 2

sync

语法:sync path
描述:sync是使得client当前连接着的ZooKeeper服务器,和ZooKeeper的Leader节点同步(sync)一下数据。

[zk: localhost:2181(CONNECTED) 9] sync /sanguo
Sync is OK

命令参数总结

-e :表示该节点是一个临时节点
-s :查看该节点的详情信息
-w :监听该节点变化
-v :指的是dataVersion 的版本,可通过 -s 进行查看
-R :递归;可以展示节点下所有子节点。
-t :
-c :
-d :
-a :
-l :
-n :
-b :

很多命令,我也太明白具体是怎么用的,都先列出来吧,以后知道了,再补充上去,若大家知道,下方留言。我也会第一时间补充更改


zookeeper的acl权限控制

概述

 zookeeper类似文件系统,client可以创建节点、更新节点、删除节点,那么如何做到节点的权限的控制呢?
 acl权限控制,使用 scheme:id:permission来标识,主要涵盖3个方面:

  • 权限模式(scheme):授权的策略
  • 授权对象(id):授权的对象
  • 权限(permission):授予的权限
    其特征如下:
  • zookeeper的权限控制是基于每个znode节点的,需要对每个节点设置权限
  • 每个znode支持设置多种权限方案和多个权限
  • 子节点不会继承父节点的权限,客户端无权某节点,但可能访问它的子节点

权限模式

采用何种方式授权?

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

授权的对象

给谁授予权限

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

授予的权限

授予什么权限?

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

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

授予的相关命令

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

案例

  • world授权模式
    语法: setAcl world:anyone:
    案例一:设置 /node 所有权限
setAcl /node world:anyone:cdrwa  

案例二:删除/node 创建子节点的权限

setAcl /node world:anyone:drwa  
  • ip授权模式
    1.单IP权限设置
    语法:setAcl ip::
    案例:把 /node 的权限只开放给192.168.0.2,其他ip无权访问。
setAcl /node ip:192.168.0.2:cdrwa

2.多IP权限设置
语法:setAcl ip::,ip::,ip::....
案例:对多个IP进行设置权限

setAcl /node ip:192.168.0.1:cdrwa,ip:192.168.0.2:cdrwa
  • auth授权模式
    语法
    addauth digest : #添加认证用户
    setAcl auth::
    案例
    添加授权用户
addauth digest user:123456

对user用户授权

setAcl /node auth:user:cdrwa

查看授权信息(密码是经过加密的

[zk: 192.168.0.1(CONNECTED) 15] getAcl /node
'digest,'user:6730fZhUE8JEFMcu0l64qI8e5ek=
: cdrwa
  • digest授权模式
    语法

setAcl digest:::
:为加密后的密码

这里的密码是经过SHA1及BASE64处理的密文,在SHELL中可以通过以下命令计算:

echo -n :| openssl dgst -binary -sha1 | openssl base64

[[email protected] ~]$ echo -n user:123456 | openssl dgst -binary -sha1 | openssl base64
OIZ3CaataRYETUhRnO2kKqU5kWk=

案例
对 /node 就行授权

setAcl /node digest:user:OIZ3CaataRYETUhRnO2kKqU5kWk=:cdrwa

查看 /node 权限(这时是没有权限的)

[zk: localhost:2181(CONNECTED) 15] getAcl /node
Authentication is not valid : /node

添加授权用户

addauth digest user:123456

再次查看/node权限(这时就OK了)

[zk: localhost:2181(CONNECTED) 21] getAcl /node
'digest,'user:OIZ3CaataRYETUhRnO2kKqU5kWk=
  • 多种授权模式

同一个节点可以同时使用多种授权模式

语法
setAcl 配置以上的多个权限,以逗号,分割。
案例
对/node 使用多种授权模式

[zk: hadoop103(CONNECTED) 54] addauth digest user:123321
[zk: hadoop103(CONNECTED) 55] setAcl /node2 ip:192.168.200.102:drwa,ip:192.168.200.103:cdrwa,auth:user:rwa

查看权限

[zk: hadoop103(CONNECTED) 56] getAcl /node2
'ip,'192.168.200.102
: drwa
'ip,'192.168.200.103
: cdrwa
'digest,'user:OIZ3CaataRYETUhRnO2kKqU5kWk=
: rwa
  • acl 超级管理员

zookeeper的权限管理模式有一种叫做,该模式提供一个超级管理可以方便的访问任何权限的节点。

假设这个超管是:$\color{red}{super:admin},需要先为超管生成密码的密文

echo -n super:admin | openssl dgst -binary -sha1 |openssl base64

[user@hadoop102 bin]$ echo -n super:admin | openssl dgst -binary -sha1 |openssl base64
xQJmxLMiHGwaqBvst5y6rkB6HQs=

那么打开zookeeper目录下/bin/zkServer.sh服务器脚本文件,找到如一行:

nohup "$JAVA" $ZOO_DATADIR_AUTOCREATE "-Dzookeeper.log.dir=${ZOO_LOG_DIR}" \ "-Dzookeeper.log.file=${ZOO_LOG_FILE}" "-Dzookeeper.root.logger=${ZOO_LOG4J_PROP}" \ -XX:+HeapDumpOnOutOfMemoryError -XX:OnOutOfMemoryError='kill -9 %p' \ -cp "$CLASSPATH" $JVMFLAGS $ZOOMAIN "$ZOOCFG" > "$_ZOO_DAEMON_OUT" 2>&1 < /dev/null &

这就是脚本中启动zookeeper的命令,我们需要加一个超管的配置项

-Dzookeeper.DigestAuthenticationProvider.superDigest=super:xQJmxLMiHGwaqBvst5y6rkB6HQs=

那么修改完成后整条命令就变成了

nohup "$JAVA" $ZOO_DATADIR_AUTOCREATE "-Dzookeeper.log.dir=${ZOO_LOG_DIR}" "-Dzookeeper.DigestAuthenticationProvider.superDigest=super:xQJmxLMiHGwaqBvst5y6rkB6HQs=" \ "-Dzookeeper.log.file=${ZOO_LOG_FILE}" "-Dzookeeper.root.logger=${ZOO_LOG4J_PROP}" \ -XX:+HeapDumpOnOutOfMemoryError -XX:OnOutOfMemoryError='kill -9 %p' \ -cp "$CLASSPATH" $JVMFLAGS $ZOOMAIN "$ZOOCFG" > "$_ZOO_DAEMON_OUT" 2>&1 < /dev/null &

之后启动zookeeper,输入如下命令添加权限

addauth digest supper:admin #添加认证用户

你可能感兴趣的:(zookeeper(三) 客户端命令)