zookeeper常见命令和常见应用
前言
ZooKeeper自带一个交互式命令行工具(通过zkCli.sh
或zkCli.cmd
启动),提供了一系列操作ZooKeeper数据节点的命令
下面我们对zookeeper常用命令进行介绍
使用prettyZoo命令行窗口
使用prettyZoo客户端链接zookeeper 打开zookeeper命令行窗口
如果还没有安装zookeeper并且没有prettyZoo客户端工具的同志,可以看我这篇文章
使用docker安装Zookeeper-CSDN博客
链接zookeeper
打开zookeeper客户端命令行窗口
zookeeper常见命令
查询命令
ls 路径 查看当前路径下的子节点
get 路径 查看当前路径节点的信息
创建命令
create [-s] [-e] [-c] [-t 存活时间] 节点c路径 节点数据 [acl]
-s: 创建顺序节点(路径后自动追加递增序号,如 /path-0000000001)
-e: 创建临时节点(会话结束自动删除)会话就是指服务器和zookeeper的长链接
-c: 创建容器节点 容器节点中没有任何子节点,容器节点会被一分钟定时删除,可以存储数据
-
t: 创建定时删除节点,需要到系统配置开启,不稳定不建议使用
acl: 访问控制列表
其中,顺序节点和临时节点一般用于构建zookeeper分布式锁进行使用的
临时节点实现原理
sessionId是用来维持链接会话的
所以通过监控sessionId来确定临时节点的存在,sessionId结束,临时节点删除
就可以实现会话结束临时节点自动消失的效果了
zookeeper临时节点实现注册与发现
服务器注册到zookeeper上面就是作为客户端进行会话连接在zookeeper上面创建了一个临时节点,当这个服务器出现故障下线时候,会话连接会断开,因为临时节点是断开会话自动消失的,所以此时zookeeper上面就没有这个服务器的注册信息了,因为注册的临时节点自动删除了
zookeeper构建分布式锁原理
使用顺序临时节点实现
1、每一个服务器业务请求过来都会创建一个顺序序号节点
2、代码设置最小的节点拿到锁
3、监听前面序号节点,前面节点执行完业务之后删除自己的临时节点(解锁),后面那个节点被唤醒开始执行。以此类推可以得到锁的形式
4、顺序节点要使用临时节点,保证当服务器出现网络故障的时候锁自动删除,其他客户端重新竞争锁,防止一直等待那个故障的服务器其他服务器获取不到锁导致死锁
修改命令
set 节点路径 节点数据 [version]
version:可选版本号 实现乐观锁,避免并发覆盖
zookeeper乐观锁实现原理
使用乐观锁修改数据分为两步
查询出当前数据的版本号
对比当前版本号和获取版本号是否一样,一样修改数据成功,否则失败
这一步是原子操作,zookeeper在代码中有专一的封装方法可以调用
删除命令
delete 节点路径 [version]
version:可选版本号 实现乐观锁,避免并发覆盖
权限命令
首先,权限是绑定到当前会话的,如果会话失效权限要重新赋予
说是给会话注册账号密码,其实账号密码本质就是一个鉴权码,访问前验证一下当前会话鉴权码是否匹配
权限设置
注册当前会话的账号密码
addauth digest 账号:密码
这里赋予好账号密码,下面就可以访问针对这个身份开放权限的节点
创建节点并设置权限
create 节点路径 节点内容 auth:账号:密码:权限字符
权限字符
c:create 创建权限,允许在该节点下创建子节点
w:write 更新权限,允许更新该节点的数据
r:read 读取权限,允许读取该节点的内容以及子节点的列表信息
d:delete 删除权限,允许删除该节点的子节点信息
a:admin 管理者权限,允许对该节点进行acl权限设置
权限字符 就是填上面这几个字母,想赋予多个就连着追加多个字母即可
监听节点命令
作用: 监听zookeeper上面某一个节点的变化
get -w 路径 查询这个路径节点的内容,并且在其他会话修改这个路径节点的时候,当前会话会提示这个节点发生变化,只监听一次数据变化,创建子节点监听不到,修改和删除节点内容可以监听到
ls -w 路径 监听这个节点目录下面子节点的变化(创建删除),不能监听节点内容
ls -R -w 路径 递归式的监听这个节点目录下的所有目录的变化(创建删除),不能监听节点内容