ZooKeeper 实战(二) 命令行操作篇

这篇具有很好参考价值的文章主要介绍了ZooKeeper 实战(二) 命令行操作篇。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

ZooKeeper 实战(二) 命令行操作篇

1. 服务端命令

在学习以下执行命令前,请先创建一个单机版的zookeeper实例,详细过程参考上一篇博客。cd进入zookeeper安装包解压文件夹的bin目录下。在博主电脑上执行cd /Users/admin/zk/standalone/bin

ZooKeeper 实战(二) 命令行操作篇,分布式实战,zookeeper,linux,分布式,macos,java-zookeeper,java,bash

1.1. 服务启动

./zkServer.sh start

ZooKeeper 实战(二) 命令行操作篇,分布式实战,zookeeper,linux,分布式,macos,java-zookeeper,java,bash

1.2. 查看服务

./zkServer.sh status

ZooKeeper 实战(二) 命令行操作篇,分布式实战,zookeeper,linux,分布式,macos,java-zookeeper,java,bash

1.3. 重启服务

./zkServer.sh restart

ZooKeeper 实战(二) 命令行操作篇,分布式实战,zookeeper,linux,分布式,macos,java-zookeeper,java,bash

1.4. 停止服务

./zkServer.sh stop

ZooKeeper 实战(二) 命令行操作篇,分布式实战,zookeeper,linux,分布式,macos,java-zookeeper,java,bash

2. 客户端命令

2.1. 启动客户端

# 如果是本地执行可以省略 -server ip:port. 直接./zkCli.sh
./zkCli.sh -server ip:port
#./zkCli.sh

ZooKeeper 实战(二) 命令行操作篇,分布式实战,zookeeper,linux,分布式,macos,java-zookeeper,java,bash

2.2. 查看节点信息

ls [-s] [-w] [-R] path
# 参数说明:
# -s:显示节点详情,包括状态信息
# -w:添加watch监视器,节点数据变更时,会通知客户端(通知是一次性的),注意和get中监听器的区别。
# -R:列举出节点的级联节点
# path:显示某目录下节点/文件
查看根节点详情 ls -s /

ZooKeeper 实战(二) 命令行操作篇,分布式实战,zookeeper,linux,分布式,macos,java-zookeeper,java,bash

名称 描述
cZxid 节点创建时的zxid
ctime 节点创建时间
mZxid 节点最近一次更新时的zxid
mtime 节点最近一次更新的时间
pZxid 操作当前节点的子节点列表的事物ID(这种操作包含增加子节点,删除子节点)
cversion 子节点数据更新次数
dataVersion 本节点数据更新次数
aclVersion 节点ACL(授权信息)的更新次数
ephemeralOwner 如果该节点为临时节点,ephemeralOwner值表示与该节点绑定的session id。如果该节点不是临时节点,ephemeralOwner值为0
dataLength 节点数据长度
numChildren 子节点个数
添加一个watch监视器 ls -w /

ZooKeeper 实战(二) 命令行操作篇,分布式实战,zookeeper,linux,分布式,macos,java-zookeeper,java,bash

列举出节点的级联节点 ls -R /

ZooKeeper 实战(二) 命令行操作篇,分布式实战,zookeeper,linux,分布式,macos,java-zookeeper,java,bash

2.3. 查看节点状态

stat [-w] path
# 参数说明
# -w:添加watch监视器

ZooKeeper 实战(二) 命令行操作篇,分布式实战,zookeeper,linux,分布式,macos,java-zookeeper,java,bash

2.4. 创建节点

create [-s] [-e] [-c] [-t ttl] path [data] [acl]
# 参数说明
# -s:有序节点
# -e:临时节点,不加此参数表示默认持久节点
# -c:容器节点
# -t:过期时间,类似于redis的expire设置过期,单位:毫秒
# [data]:节点的数据,可选,如果不使用时,节点数据就为null
# [acl]:权限相关
创建有序节点create -s /test/name

ZooKeeper 实战(二) 命令行操作篇,分布式实战,zookeeper,linux,分布式,macos,java-zookeeper,java,bash

创建临时节点create -e /test/temporary

ZooKeeper 实战(二) 命令行操作篇,分布式实战,zookeeper,linux,分布式,macos,java-zookeeper,java,bash

创建TTL节点create -t 10000 /test/temporary

默认禁用,需要在zoo.cfg中添加 extendedTypesEnabled=true 开启。 注意:ttl不能用于临时节点

如果出现 KeeperErrorCode = Unimplemented for /..... 可能表示禁用

ZooKeeper 实战(二) 命令行操作篇,分布式实战,zookeeper,linux,分布式,macos,java-zookeeper,java,bash

ZooKeeper 实战(二) 命令行操作篇,分布式实战,zookeeper,linux,分布式,macos,java-zookeeper,java,bash

创建带数据的持久节点create /test/data "测试"

ZooKeeper 实战(二) 命令行操作篇,分布式实战,zookeeper,linux,分布式,macos,java-zookeeper,java,bash

2.5. 修改节点内容

set [-s] [-v version] path data
# 参数说明
# -s:更新节点数据并显示节点状态信息
# -v:指定数据版本号,如果指定的数据版本号和数据当前版本号不一致,则更新失败
# data:更新的数据内容
更新节点数据并显示节点状态信息set -s /test/data "new value"

ZooKeeper 实战(二) 命令行操作篇,分布式实战,zookeeper,linux,分布式,macos,java-zookeeper,java,bash

指定数据版本号set -s -v 1 /test/data "new new value"

ZooKeeper 实战(二) 命令行操作篇,分布式实战,zookeeper,linux,分布式,macos,java-zookeeper,java,bash

2.6. 查看节点内容

	get [-s] [-w] path
	# 参数说明
	# -s:查看节点数据以及节点状态信息
	# -w:添加watch监视器,节点数据变更时,会通知客户端(通知是一次性的)。ls -w是针对节点(目录)的变化监听,get -w是针对节点中数据的变化监听

ZooKeeper 实战(二) 命令行操作篇,分布式实战,zookeeper,linux,分布式,macos,java-zookeeper,java,bash

2.7. 删除节点

delete [-v version] path
# 参数说明
# -v:指定数据版本号,如果指定的数据版本号和数据当前版本号不一致,则删除失败

注意此方法只能删除不包含子节点的节点

ZooKeeper 实战(二) 命令行操作篇,分布式实战,zookeeper,linux,分布式,macos,java-zookeeper,java,bash

2.8. 级联删除节点(删除包含子节点的节点)

deleteall path [-b batch size]
# 参数说明
# -b:分批删除
# batch size:每批删除数量

ZooKeeper 实战(二) 命令行操作篇,分布式实战,zookeeper,linux,分布式,macos,java-zookeeper,java,bash

2.9. 关闭连接

close

ZooKeeper 实战(二) 命令行操作篇,分布式实战,zookeeper,linux,分布式,macos,java-zookeeper,java,bash

2.10. 建立连接

connect host:port

ZooKeeper 实战(二) 命令行操作篇,分布式实战,zookeeper,linux,分布式,macos,java-zookeeper,java,bash

2.11. 操作记录

history
# 显示最近的11条操作记录

ZooKeeper 实战(二) 命令行操作篇,分布式实战,zookeeper,linux,分布式,macos,java-zookeeper,java,bash

2.12. 其他操作命令

# 退出客户端
quit

# 获取版本信息
version

# 显示当前操作用户和ip
whoami

# 强制同步节点,这需要在ZooKeeper集群中使用,如果对节点数据的实时性要求很高,可以使用该命令。
sync path

# 获取指定节点下的子孙节点数量(不只是直接子节点,也包含间接子节点)
getAllChildrenNumber

3. Watcher事件监听器

Watcher是ZooKeeper的重要功能。ZooKeeper允许用户在指定Znode注册 Watcher(绑定监听事件),当特定事件触发时(节点数据变更、节点删除、子节点状态变更等事件),ZooKeeper服务端会将事件通知到注册过该事件Watcher的客户端,该机制是ZooKeeper实现分布式协调服务的重要特性,通过这个事件机制,可以基于ZooKeeper实现分布式锁、集群管理等功能。

Watcher特性:比如当节点数据发生变化的时候,ZooKeeper会产生一个Watcher事件,并且会发送到客户端,客户端收到监听的节点事件后,就可以进行相应的业务处理了(可以实现发布与订阅)。ZooKeeper的Watcher机制,可以分为三个过程:客户端注册Watcher、服务端处理Watcher和客户端回调。

3.1. 一次性监听

在上一节,客户端命令中会看到 -w 参数,通过这个参数指定的都是一次性监听器,不会重复触发。

ls -w: 监听节点变化,节点或者子节点发生改变时触发

ZooKeeper 实战(二) 命令行操作篇,分布式实战,zookeeper,linux,分布式,macos,java-zookeeper,java,bash

get -w:监听节点数据变化,子节点的数据变化不会触发。

ZooKeeper 实战(二) 命令行操作篇,分布式实战,zookeeper,linux,分布式,macos,java-zookeeper,java,bash

3.2. 永久监听

Zookeeper 3.6.0版本之后,客户端可以在节点上创建永久监听,永久监听在被触发后不会被删除。

添加永久监听器
addWatch [-m mode] path
# 参数说明
# -m:监听模式
# mode:[PERSISTENT, PERSISTENT_RECURSIVE]
#		PERSISTENT - 表示该节点的数据变化以及子节点的变化会触发相应事件,子节点的数据变化不会触发。
#		PERSISTENT_RECURSIVE - 表示该节点的数据变化以及所有子孙节点的目录或者数据变化都会触发相应事件。
PERSISTENT
addWatch -m PERSISTENT /name

ZooKeeper 实战(二) 命令行操作篇,分布式实战,zookeeper,linux,分布式,macos,java-zookeeper,java,bash

PERSISTENT_RECURSIVE
addWatch -m PERSISTENT_RECURSIVE /fi

ZooKeeper 实战(二) 命令行操作篇,分布式实战,zookeeper,linux,分布式,macos,java-zookeeper,java,bash

移除监听器
	removewatches path [-c|-d|-a] [-l]
	# 参数说明
	# -c:表示取消节点变化类型监听器(ls -w)
	# -d:表示取消数据更新类型监听器(get -w)
	# -a:表示取消对所有子节点的监听
	# -l:表示显示当前节点上的所有监听

ZooKeeper 实战(二) 命令行操作篇,分布式实战,zookeeper,linux,分布式,macos,java-zookeeper,java,bash

4. ACL权限控制

在介绍命令之前需要了解以下知识:

ZooKeeper 采用 ACL(Access Control Lists)策略来进行权限控制。ACL权限控制使用 scheme:id:permission来标识,主要涵盖3个方面:验证模式(scheme),具体内容(Id),权限控制(perms)

验证模式(Scheme)

  • world:开放模式,world表示任意客户端都可以访问(默认设置)。
  • auth:只有在会话中通过了认证才可以访问,代表已经认证通过的用户(cli中可以通过addauth digest user:pwd 来添加当前上下文中的授权用户)。
  • digest:与auth类似,区别在于auth用明文密码,而digest用SHA1+base64加密后的密码(通过addauth命令,实际场景中digest更常见)。
  • ip:限定客户端IP防问。

具体内容(Id)

id表示 用户名:密码。不同的模式有不同的表达方式。如下所示,是整个acl表达式的形式,除去验证模式和权限控制剩下的,也就是中间内容表示id。

  • world:world:anyone:[permissions]
  • auth:auth:user:password:[permissions]
  • digest:digest:user:BASE64(SHA1(password)):[permissons]
  • ip:ip:127.0.0.1:[permissions]

权限控制(Permissions)

ZooKeeper 定义了如下5种权限。

  • CREATE: 创建子节点的权限。

  • READ: 获取节点数据和子节点列表的权限。

  • WRITE:更新节点数据的权限。

  • DELETE: 删除子节点的权限。

  • ADMIN: 设置节点ACL的权限。

注意:CREATE 和 DELETE 都是针对子节点的权限控制。

4.1. 添加权限

addauth scheme auth
# 参数说明
# scheme:格式为:digest username:password,其中digest是授权方式
# auth:分配权限,crwda。如果不写时表示创建用户,可以通过setAcl命令来设置权限

ZooKeeper 实战(二) 命令行操作篇,分布式实战,zookeeper,linux,分布式,macos,java-zookeeper,java,bash

4.2. 设置权限

setAcl [-s] [-v version] [-R] path acl
# 参数说明
# -s:查看节点数据以及节点状态信息
# -v:指定数据版本号
# -R:递归遍历节点的子节点(列举出节点的级联节点)

ZooKeeper 实战(二) 命令行操作篇,分布式实战,zookeeper,linux,分布式,macos,java-zookeeper,java,bash

4.3. 查看权限

getAcl [-s] path
# 参数详解
# -s:查看节点数据以及节点状态信息

ZooKeeper 实战(二) 命令行操作篇,分布式实战,zookeeper,linux,分布式,macos,java-zookeeper,java,bash文章来源地址https://www.toymoban.com/news/detail-784246.html

到了这里,关于ZooKeeper 实战(二) 命令行操作篇的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Zookeeper 实战 | Zookeeper 和Spring Cloud相结合解决分布式锁、服务注册与发现、配置管理

    专栏集锦,大佬们可以收藏以备不时之需: Spring Cloud 专栏: Python 专栏: Redis 专栏: TensorFlow 专栏: Logback 专栏: 量子计算: 量子计算 | 解密著名量子算法Shor算法和Grover算法 AI机器学习实战: AI机器学习实战 | 使用 Python 和 scikit-learn 库进行情感分析 AI机器学习 | 基于lib

    2024年02月05日
    浏览(81)
  • 2.Zookeeper集成springboot操作节点,事件监听,分布式锁实现

    1.Springboot项目中添加zookeeper 已经对应的客户端依赖 ,pom.xml文件如下 2.application.yml 文件中配置zookeeper连接的相关配置信息 3.java配置的方式添加zookeeper相关的配置 4.Zookeeper基础操作服务和分布式锁服务编码 5.watcher机制事件处理抽象封装 6.基本操作的单元测试代码

    2024年03月10日
    浏览(49)
  • ZooKeeper 分布式协调服务: 概述及原理, 安装配置, 基本操作

    作者:禅与计算机程序设计艺术 Apache Zookeeper 是 Apache Hadoop 的子项目之一,是一个开源的分布式协调服务。它负责存储和维护关于网络中各个节点的数据。Zookeeper 提供了以下功能:配置维护、域名服务、同步和共享、软/硬件负载均衡、集群管理、Master 选举等。它的架构使得

    2024年02月08日
    浏览(40)
  • (五)库存超卖案例实战——使用zookeeper分布式锁解决“超卖”问题

    本节内容使用zookeeper实现分布式锁,完成并发访问“超卖”问题的解决。相对于redis分布式锁,zookeeper能够保证足够的安全性。关于zookeeper的安装内容这里不做介绍,开始本节内容之前先自行安装好zookeeper中间键服务。这里我们利用创建zookeeper路径节点的唯一性实现分布式锁

    2024年02月06日
    浏览(44)
  • 【分布式】Zookeeper

    可以参考:https://zhuanlan.zhihu.com/p/62526102 ZooKeeper 是一个分布式的,开放源码的分布式应用程序协同服务。ZooKeeper 的设计目标是将那些复杂且容易出错的分布式一致性服务封装起来,构成一个高效可靠的原语集,并以一系列简单易用的接口提供给用户使用。 配置管理。 Java微服

    2024年02月11日
    浏览(45)
  • 分布式协调组件Zookeeper

    ZooKeeper 是⼀种 分布式协调组件 ,用于管理大型主机。 在分布式环境中协调和管理服务是一个复杂的过程 。ZooKeeper 通过其简单的架构和 API 解决了这个问题。ZooKeeper 允许开发人员专注于核心应用程序逻辑,而不必担心应用程序的分布式特性。 分布式协调组件 在分布式系统

    2024年02月13日
    浏览(41)
  • Zookeeper 分布式锁案例

    Zookeeper 是一个开源的分布式协调服务,可以用于维护分布式系统中的一致性、顺序性和命名等。其中,Zookeeper 的分布式锁机制可以用于实现分布式系统中的互斥访问,确保在多个节点上对共享资源进行同步访问。 Zookeeper 分布式锁的实现原理是基于 Zookeeper 的临时有序节点和

    2024年02月16日
    浏览(42)
  • Zookeeper实现分布式锁

    ZooKeeper是一个分布式协调服务,其中提供的序列化、持久化、有层次的目录结构使得它非常适合用于实现分布式锁。在ZooKeeper中,分布式锁通常通过临时有序节点实现。以下是ZooKeeper分布式锁的详细介绍:  实现方式: 临时有序节点: 当一个客户端需要获取锁时,它在ZooK

    2024年02月02日
    浏览(57)
  • ZooKeeper的分布式锁

    ZooKeeper的分布式锁机制主要利用ZooKeeper的节点特性,通过创建和删除节点来实现锁的控制。 实现步骤: 创建锁节点:当一个进程需要访问共享资源时,它会在ZooKeeper中创建一个唯一的临时顺序节点作为锁。 尝试获取锁:进程会查看当前所有的锁节点,检查自己创建的节点是

    2024年04月22日
    浏览(40)
  • zookeeper伪分布式安装

    需要有jdk1.8 (1)将zookeeper的安装包上传到/opt/modules目录下 (2)解压 (3)更名 切换到/opt/installs目录下 (4)配置环境变量 切换到/opt/installs/zookeeper3.6.3/conf目录下

    2024年02月17日
    浏览(36)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包