【1. zookeeper常用命令】
zookeeper常用命令启动zookeeper命令zkServer.sh start conf/zoo.cfg连接zookeeper命令zkCli.sh -server localhost:2181ZooKeeperMain无法kill -9 掉[root@localhost ~]# jps5137 Jps3891 ZooKeeperMain使用top命令查看僵尸进程[root@localhos
zookeeper常用命令
启动zookeeper命令
zkServer.sh start conf/zoo.cfg
连接zookeeper命令
zkCli.sh -server localhost:2181
ZooKeeperMain无法kill -9 掉
[root@localhost ~]# jps
5137 Jps
3891 ZooKeeperMain
使用top命令查看僵尸进程
[root@localhost ~]# top
top - 06:44:35 up 2:34, 2 users, load average: 0.00, 0.00, 0.02
Tasks: 269 total, 1 running, 266 sleeping, 1 stopped, 1 zombie # 有一个僵尸进程
%Cpu(s): 0.0 us, 0.0 sy, 0.0 ni, 99.8 id, 0.0 wa, 0.2 hi, 0.0 si, 0.0 st
MiB Mem : 1790.0 total, 223.3 free, 1193.1 used, 373.6 buff/cache
MiB Swap: 2048.0 total, 1825.0 free, 223.0 used. 430.6 avail Mem
## 一下是扩展学习和要解决的问题无关
# 说明: top默认进入是进程列表, 输入H 切换到线程列表
top - 06:47:51 up 2:37, 2 users, load average: 0.07, 0.02, 0.00
Threads: 597 total,(线程) 2 running, 593 sleeping, 1 stopped, 1 zombie
%Cpu(s): 0.0 us, 0.2 sy, 0.0 ni, 99.7 id, 0.0 wa, 0.2 hi, 0.0 si, 0.0 st
MiB Mem : 1790.0 total, 220.8 free, 1193.9 used, 375.3 buff/cache
MiB Swap: 2048.0 total, 1825.0 free, 223.0 used. 429.0 avail Mem
PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
2038 gdm 20 0 474348 6176 3296 S 0.3 0.3 0:00.37 pool
# top -p pid # 查看单个进程信息, H 切换到线程信息
top - 06:51:02 up 2:40, 2 users, load average: 0.02, 0.01, 0.00
Tasks: 1 total, 0 running, 0 sleeping, 1 stopped, 0 zombie
%Cpu(s): 0.2 us, 0.0 sy, 0.0 ni, 99.7 id, 0.0 wa, 0.2 hi, 0.0 si, 0.0 st
MiB Mem : 1790.0 total, 221.3 free, 1193.4 used, 375.3 buff/cache
MiB Swap: 2048.0 total, 1825.0 free, 223.0 used. 429.5 avail Mem
PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
3885 root 20 0 12832 2164 2116 T 0.0 0.1 0:00.00 bash
查看僵尸进程的详细信息
ps aux | grep Z
[root@localhost ~]# ps aux | grep Z
USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND
root 3891 0.0 0.0 0 0 pts/1 Z 05:16 0:03 [java] <defunct>
root 5263 0.0 0.0 12112 1048 pts/1 S+ 06:54 0:00 grep --color=auto Z
查看 3891进程信息
ps -aux | grep 3891
[root@localhost ~]# ps -aux | grep 3891
root 3891 0.0 0.0 0 0 pts/1 Z 05:16 0:03 [java] <defunct>
root 5294 0.0 0.0 12112 920 pts/1 S+ 06:56 0:00 grep --color=auto 3891
3891的父进程是0,所以只能重启系统才能解决了
reboot
[root@localhost ~]# jps
2166 Jps
[root@localhost ~]#
top - 07:01:50 up 1 min, 1 user, load average: 1.51, 0.65, 0.24
Tasks: 209 total, 1 running, 208 sleeping, 0 stopped, 0 zombie ## 僵尸进程消失
%Cpu(s): 3.0 us, 3.0 sy, 0.0 ni, 93.9 id, 0.0 wa, 0.0 hi, 0.0 si, 0.0 st
create delete get set ls deleteall
[zk: localhost:2181(CONNECTED) 0] ls /
[zookeeper]
[zk: localhost:2181(CONNECTED) 9] create /zk
Created /zk
[zk: localhost:2181(CONNECTED) 10] create -es /zk/test
Created /zk/test0000000000
[zk: localhost:2181(CONNECTED) 11]
[zk: localhost:2181(CONNECTED) 11] get /zk/test0000000000
null
[zk: localhost:2181(CONNECTED) 12]
[zk: localhost:2181(CONNECTED) 12] create /zk/test
Created /zk/test 覆盖了临时有序节点
[zk: localhost:2181(CONNECTED) 13] create -es /zk/test
Created /zk/test0000000002
[zk: localhost:2181(CONNECTED) 14] create -es /zk/test
Created /zk/test0000000003
[zk: localhost:2181(CONNECTED) 15] create -es /zk/test data1
Created /zk/test0000000004
[zk: localhost:2181(CONNECTED) 16] get /zk/test0000000004
data1
[zk: localhost:2181(CONNECTED) 17]
[zk: localhost:2181(CONNECTED) 17] delete /zk/test0000000004
[zk: localhost:2181(CONNECTED) 18] deleteall /zk
[zk: localhost:2181(CONNECTED) 19] ls -s /
[zookeeper]
cZxid = 0x0
ctime = Wed Dec 31 16:00:00 PST 1969
mZxid = 0x0
mtime = Wed Dec 31 16:00:00 PST 1969
pZxid = 0x10000000a
cversion = 1
dataVersion = 0
aclVersion = 0
ephemeralOwner = 0x0
dataLength = 0
numChildren = 1
[zk: localhost:2181(CONNECTED) 20]
# acl
acl命令
Zookeeper 的 ACL(Access Control List),分为三个维度:scheme、id、permission
通常表示为:scheme:id:permission
- schema:代表授权策略
- id:代表用户
- permission:代表权限
Scheme
world:默认方式,相当于全世界都能访问
auth:代表已经认证通过的用户(可以通过 addauth digest user:pwd 来添加授权用户)
digest:即用户名:密码这种方式认证,这也是业务系统中最常用的
ip:使用 ip 地址认证
id
id 是验证模式,不同的 scheme,id 的值也不一样。
scheme 为 auth 时:username:password
scheme 为 digest 时 : username:BASE64(SHA1(password))
scheme 为 ip 时: 客户端的 ip 地址。
scheme 为 world 时 anyone。
Permission
CREATE、READ、WRITE、DELETE、ADMIN 也就是 增、删、改、查、管理权限,这 5 种权限简写为 crwda(即:每个单词的首字符缩写)
CREATE©:创建子节点的权限
DELETE(d):删除节点的权限
READ®:读取节点数据的权限
WRITE(w):修改节点数据的权限
ADMIN(a):设置子节点权限的权限
getAcl
[zk: localhost:2181(CONNECTED) 9] create /acl
Created /acl
[zk: localhost:2181(CONNECTED) 10] create -c /acl/test 'test acl'
Created /acl/test
[zk: localhost:2181(CONNECTED) 11] getAcl /acl/test
'world,'anyone
: cdrwa
[zk: localhost:2181(CONNECTED) 12]
setAcl
[zk: localhost:2181(CONNECTED) 12] setAcl /acl/test world:anyone:crwa
[zk: localhost:2181(CONNECTED) 13] getAcl /acl/test
'world,'anyone
: crwa
[zk: localhost:2181(CONNECTED) 14] delete /acl/test # 可以删除
addauth
[zk: localhost:2181(CONNECTED) 24] addauth digest user1:12345
[zk: localhost:2181(CONNECTED) 25] setAcl /acl/test auth:user1:12345:crwa
Insufficient permission : /acl/test # 权限不足
[zk: localhost:2181(CONNECTED) 28] create /acl/test2 # 重新创建一个节点,因为之前那个节点创建时候,这个用户还没有添加
Created /acl/test2
[zk: localhost:2181(CONNECTED) 29] setAcl /acl/test2 auth:user1:12345:crwa
[zk: localhost:2181(CONNECTED) 30] getAcl /acl/test2
'digest,'user1:+owfoSBn/am19roBPzR1/MfCblE=
: crwa
[zk: localhost:2181(CONNECTED) 31] delete /acl/test2 # 可以删除,旧版好像不能删除
[zk: localhost:2181(CONNECTED) 34] create /acl/test2 data2
Created /acl/test2
[zk: localhost:2181(CONNECTED) 35] setAcl /acl/test2 auth:user1:12345:crw
[zk: localhost:2181(CONNECTED) 36] delete /acl/test2 # what? 依然可以删除
[zk: localhost:2181(CONNECTED) 39] setAcl /acl/test2 auth:user1:12345:r
[zk: localhost:2181(CONNECTED) 40] delete /acl/test2 # 还是可以删除
help,发现有个whoami, 可能新版需要切换用户吧,以后有时间再研究
Digest
auth 与 digest 的区别就是,前者使用明文密码进行登录,后者使用密文密码进行登录
create /testDir/testDigest data addauth digest user1:123456
setAcl /testDir/testDigest digest:user1:HYGa7IZRm2PUBFiFFu8xY2pPP/s=:crwa # 使用 digest
来设置权限
注意:这里如果使用明文,会导致该 znode 不可访问通过明文获得密文
shell>
java -Djava.ext.dirs=/soft/zookeeper-3.4.12/lib -cp /soft/zookeeper-3.4.12/zookeeper-3.4.12.jar org.apache.zookeeper.server.auth.DigestAuthenticationProvider deer:123456
deer:123456->deer:ACFm5rWnnKn9K9RN/Oc8qEYGYDs=
acl 命令行 ip
create /testDir/testIp data
setAcl /testDir/testIp ip:192.168.30.10:cdrwa
getAcl /testDir/testIp
acl启用super权限
由于失误,导致节点无法删除
create /acl/node1 enjoy
setAcl /acl world:anyone:r
这个时候无论是 delete 还是 deleteall(旧版是rmr) 都没有权限删除
启用 super 权限
使用 DigestAuthenticationProvider.generateDigest(“super:admin”); 获得密码
-
修改 zkServer 启动脚本增加
“-Dzookeeper.DigestAuthenticationProvider.superDigest=super:xQJmxLMiHGwaqBvst5y6rkB6 HQs=”
-
启动客户端用管理员登陆(我新版总是可以删除是不是因为是管理员)
> whoami
Auth scheme: User # 这个user是不是一个管理员
ip: 127.0.0.1
digest: user1
addauth digest super:admin
常用四字命令
ZooKeeper 支持某些特定的四字命令字母与其的交互。用来获取 ZooKeeper 服务的当前状态及相关信息。可通过 telnet 或 nc 向 ZooKeeper 提交相应的命令 :
安装nc
yum install nc
echo stat|nc 127.0.0.1 2181 来查看哪个节点被选择作为 follower 或者 leader
使用 echo ruok|nc 127.0.0.1 2181 测试是否启动了该 Server,若回复 imok 表示已经启动。
echo dump| nc 127.0.0.1 2181 ,列出未经处理的会话和临时节点。echo kill | nc 127.0.0.1 2181 ,关掉 server
echo conf | nc 127.0.0.1 2181 ,输出相关服务配置的详细信息。
echo cons | nc 127.0.0.1 2181 ,列出所有连接到服务器的客户端的完全的连接 / 会话的详细信息
echo envi |nc 127.0.0.1 2181 ,输出关于服务环境的详细信息(区别于 conf 命令)。
echo reqs | nc 127.0.0.1 2181 ,列出未经处理的请求。
echo wchs | nc 127.0.0.1 2181 ,列出服务器 watch 的详细信息。
echo wchc | nc 127.0.0.1 2181 ,通过 session 列出服务器 watch 的详细信息,它的输出是一个与 watch 相关的会话的列表。
echo wchp | nc 127.0.0.1 2181 , 通过路径列出服务器 watch 的详细信息。它输出一个与 session 相关的路径。
提示不在白名单
stat is not executed because it is not in the whitelist.
- zoo.cfg中配置白名单
#开启四字命令
4lw.commands.whitelist=*
然后重启
[root@localhost ~]# zkServer.sh restart zookeeper-3.7.0-bin/conf/zoo.cfg
ZooKeeper JMX enabled by default
Using config: zookeeper-3.7.0-bin/conf/zoo.cfg
ZooKeeper JMX enabled by default
Using config: zookeeper-3.7.0-bin/conf/zoo.cfg
Stopping zookeeper ... STOPPED
ZooKeeper JMX enabled by default
Using config: zookeeper-3.7.0-bin/conf/zoo.cfg
Starting zookeeper ... STARTED
[root@localhost ~]# echo ruok|nc localhost 2181
imok[root@localhost ~]# 再次尝试成功
- zkServer.sh中新增指令
fi
#添加VM环境变量-Dzookeeper.4lw.commands.whitelist=*
ZOOMAIN="-Dzookeeper.4lw.commands.whitelist=* ${ZOOMAIN}"
ZooKeeper 日志可视化
两个非常重要的配置一个是 dataDir,存放的快照数据,一个是 dataLogDir,存放的是事务日志文件
java -cp /soft/zookeeper-3.4.12/zookeeper-3.4.12.jar:/soft/zookeeper-3.4.12/lib/slf4j-api-1.7.25.jar org.apache.zookeeper.server.LogFormatter log.1
java -cp /soft/zookeeper-3.4.12/zookeeper-3.4.12.jar:/soft/zookeeper-3.4.12/lib/slf4j-api-1.7.25.jar org.apache.zookeeper.server.SnapshotFormatter log.1
更多推荐
所有评论(0)