一、服务端常用命令
- 启动 ZK 服务: sh bin/zkServer.sh start
- 查看 ZK 服务状态: sh bin/zkServer.sh status
- 停止 ZK 服务: sh bin/zkServer.sh stop
- 重启 ZK 服务: sh bin/zkServer.sh restart
二、客户端常用命令
使用 zkCli.sh -server ip:port 连接到 ZooKeeper 服务,连接成功后,系统会输 出 ZooKeeper 的相关环境以及配置信息。 命令行工具的一些简单操作如下:
- 显示根目录下、文件:ls/使用ls命令来查看当前ZooKeeper中所包含的内容
- 显示根目录下、文件: ls2 / 查看当前节点数据并能看到更新次数等数据
- 创建文件,并设置初始内容: create /zk “test” 创建一个新的 znode 节点“ zk ”以及与它关联的字符串 [-e] [-s] 【-e 零时节点】 【-s 顺序节点】
- 获取文件内容:get /zk 确认 znode 是否包含我们所创建的字符串 [watch【] watch 监听】
- 修改文件内容: set /zk “zkbak” 对 zk 所关联的字符串进行设置
- 删除文件:delete/zk将刚才创建的znode删除,如果存在子节点删除失败
- 递归删除:rmr /zk将刚才创建的znode删除,子节点同时删除
- 退出客户端:quit
- 帮助命令:help
三、ACL权限管理命令
Zookeeper 的 ACL(Access Control List),分为三个维度:scheme、id、permission 通常表示为:scheme: id : permission
- schema:代表授权策略
- id:代表用户
- permission:代表权限
1、Scheme
- world: 默认方式,相当于全世界都能访问
- auth:代表已经认证通过的用户(可以通过 addauth digest user:pwd 来添加授权用户)
- digest: 即用户名:密码这种方式认证,这也是业务系统中最常用的
- ip:使用 Ip 地址认证
2、id
id 是验证模式,不同的 scheme,id 的值也不一样。
- scheme 为 auth 时: username:password
- scheme 为 digest 时: username:BASE64(SHA1(password))
- scheme 为 ip 时: 客户端的 ip 地址
- scheme 为 world 时 anyone
3、Permission
CREATE、READ、WRITE、DELETE、ADMIN 也就是 增、删、改、查、管理权限,这 5 种权限 简写为 crwda(即:每个单词的首字符缩写)
- CREATE©:创建子节点的权限
- DELETE(d):删除节点的权限
- READ®:读取节点数据的权限
- WRITE(w):修改节点数据的权限
- ADMIN(a):设置子节点权限的权限
4、操作命令
- getAcl
create /testDir/testAcl deer # 创建一个子节点
getAcl /testDir/testAcl # 获取该节点的 acl 权限信息
- setAcl
setAcl /testDir/testAcl world:anyone:crwa # 设置该节点的 acl 权限
getAcl /testDir/testAcl # 获取该节点的 acl 权限信息,成功后,该节点就少了 d 权限
create /testDir/testAcl/xyz xyz-data # 创建子节点
delete /testDir/testAcl/xyz # 由于没有 d 权限,所以提示无法删除
- addauth
注册会话授权信息
Auth
//需要先添加一个用户,然后才可以拿着这个用户去设置权限
addauth digest user1:123456
// 设置权限
setAcl /testDir/testAcl auth:user1:123456:crwa
// 退出客户端后:
ls /testDir/testAcl #没有权限无法访问
create /testDir/testAcl/testb bbb #没有权限无法访问
addauth digest user1:123456 # 重新新增权限后可以访问了
Digest
auth 与 digest 的区别就是,前者使用明文密码进行登录,后者使用密文密码进行登录
create /testDir/testDigest data
addauth digest user1:123456
// 来设置权限
setAcl /testDir/testDigest digest:user1:HYGa7IZRm2PUBFiFFu8xY2pPP/s=:crwa
// 通过明文获得密文
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=
ip
create /testDir/testIp data
setAcl /testDir/testIp ip:192.168.30.10:cdrwa
getAcl /testDir/testIp
注
很多同学练习 setAcl 权限的时候由于失误,导致节点无法删除
create /enjoy1/node1 enjoy
setAcl /enjoy1 world:anyone:r
这个时候无论是 delete 还是 rmr 都没有权限删除
解决方式:启用 super 权限
使用 DigestAuthenticationProvider.generateDigest(“super:admin”); 获得密码
- 修改 zkServer 启动脚本增加 “-Dzookeeper.DigestAuthenticationProvider.superDigest=super:xQJmxLMiHGwaqBvst5y6rkB6 HQs=”
- 启动客户端用管理员登陆
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 相关的路径。
五、日志可视化
前面以及讲了两个非常重要的配置一个是 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