zkServer.sh start conf/zoo.cfg连接zookeeper命令
zkCli.sh -server localhost:2181ZooKeeperMain无法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]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]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 stcreate 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] # aclacl命令
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/testIpacl启用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



