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

文章目录

  • ZooKeeper 实战(二) 命令行操作篇
    • 1. 服务端命令
      • 1.1. 服务启动
      • 1.2. 查看服务
      • 1.3. 重启服务
      • 1.4. 停止服务
    • 2. 客户端命令
      • 2.1. 启动客户端
      • 2.2. 查看节点信息
        • 查看根节点详情 `ls -s /`
        • 添加一个watch监视器 `ls -w /`
        • 列举出节点的级联节点 `ls -R /`
      • 2.3. 查看节点状态
      • 2.4. 创建节点
        • 创建有序节点`create -s /test/name`
        • 创建临时节点`create -e /test/temporary`
        • 创建TTL节点`create -t 10000 /test/temporary`
        • 创建带数据的持久节点`create /test/data "测试"`
      • 2.5. 修改节点内容
        • 更新节点数据并显示节点状态信息`set -s /test/data "new value"`
        • 指定数据版本号`set -s -v 1 /test/data "new new value"`
      • 2.6. 查看节点内容
      • 2.7. 删除节点
      • 2.8. 级联删除节点(删除包含子节点的节点)
      • 2.9. 关闭连接
      • 2.10. 建立连接
      • 2.11. 操作记录
      • 2.12. 其他操作命令
    • 3. Watcher事件监听器
      • 3.1. 一次性监听
      • 3.2. 永久监听
        • 添加永久监听器
          • PERSISTENT
          • PERSISTENT_RECURSIVE
        • 移除监听器
    • 4. ACL权限控制
      • 4.1. 添加权限
      • 4.2. 设置权限
      • 4.3. 查看权限

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

1. 服务端命令

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

在这里插入图片描述

1.1. 服务启动

./zkServer.sh start

在这里插入图片描述

1.2. 查看服务

./zkServer.sh status

在这里插入图片描述

1.3. 重启服务

./zkServer.sh restart

在这里插入图片描述

1.4. 停止服务

./zkServer.sh stop

在这里插入图片描述

2. 客户端命令

2.1. 启动客户端

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

在这里插入图片描述

2.2. 查看节点信息

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

在这里插入图片描述

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

在这里插入图片描述

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

在这里插入图片描述

2.3. 查看节点状态

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

在这里插入图片描述

2.4. 创建节点

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

在这里插入图片描述

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

在这里插入图片描述

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

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

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

在这里插入图片描述

在这里插入图片描述

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

在这里插入图片描述

2.5. 修改节点内容

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

在这里插入图片描述

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

在这里插入图片描述

2.6. 查看节点内容

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

在这里插入图片描述

2.7. 删除节点

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

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

在这里插入图片描述

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

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

在这里插入图片描述

2.9. 关闭连接

close

在这里插入图片描述

2.10. 建立连接

connect host:port

在这里插入图片描述

2.11. 操作记录

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

在这里插入图片描述

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: 监听节点变化,节点或者子节点发生改变时触发

在这里插入图片描述

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

在这里插入图片描述

3.2. 永久监听

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

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

在这里插入图片描述

PERSISTENT_RECURSIVE
addWatch -m PERSISTENT_RECURSIVE /fi

在这里插入图片描述

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

在这里插入图片描述

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:word: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命令来设置权限

在这里插入图片描述

4.2. 设置权限

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

在这里插入图片描述

4.3. 查看权限

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

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/315386.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Jenkins 问题

从gitlab 仓库拉去代码到Jenkins本地报错 ERROR: Couldn’t find any revision to build. Verify the repository and branch configuration for this job. 问题原因: 创建条目》配置的时候,gitlab仓库不存在master分支 修复后:

44-js return返回值,全局作用域,局部作用域,隐式作用域,变量的生命周期,delete释放内存

1.return返回值:函数执行后剩下结果就是返回值。 function fn(a,b,c){//return返回值return(abc);// console.log("aaa"); //return之后的值都不在执行了// alert("bbb"); //return之后的值不在执行了}console.log(fn(1,2,3)*10)…

人工智能:我的学习之旅与认知探索(第1版)

🌟🌌 欢迎来到知识与创意的殿堂 — 远见阁小民的世界!🚀 🌟🧭 在这里,我们一起探索技术的奥秘,一起在知识的海洋中遨游。 🌟🧭 在这里,每个错误都…

what is BERT?

BERT Introduction Paper 参考博客 9781838821593_ColorImages.pdf (packt-cdn.com) Bidirectional Encoder Representation from Transformer 来自Transformer的双向编码器表征 基于上下文(context-based)的嵌入模型。 那么基于上下文(…

golang学习笔记——go语言多文件项目运行的四种方式

go语言多文件运行技巧 有两个源码文件的go语言项目如何运行? go.modmain.go Trie.go 如何直接运行go run main.go会提示找不到文件。 # 在windows10下运行 $ go run main.go # command-line-arguments .\main.go:6:9: undefined: Constructor是真的找不到文件吗。其实不是。…

一个成功的camera案例:ros2+gazebo+摄像头

各位看:随着大物体的移动,在涉嫌头的位置也发生了改变-----右上角那个/camera的位置也变了 右上角那个是摄像头图案,以下是仓库链接: ros-ign-gazebo-camera: https://github.com/arashsm79/ros-ign-gazebo-camera.git一个ros2摄…

基于多智能体点对点转换的分布式模型预测控制

matlab2020正常运行 基于多智能体点对点转换的分布式模型预测控制资源-CSDN文库

Zabbix“专家坐诊”第223期问答汇总

来源:乐维社区 问题一 Q:Zabbix 5.0安装完mysql之后怎么备份?忘记mysql当时创建的密码了,怎么样能查看设置的密码? A:mysql初始化密码在 /var/log/mysqld.log中可以看到,搜关键字temporary pas…

膜结构球形影院为观众打造观影新体验

在数字科技快速发展的当下,轻空间公司打破传统影院的束缚,领航未来娱乐体验的创新浪潮。膜结构球形影院问世,它不仅仅是一个娱乐场所,更是一场極致沉浸感的感官之旅,为观众带来震撼性的视听冲击。 沉浸式体验的新纪元 …

Jenkins安装和配置

拉取Jenkins镜像 docker pull jenkins/jenkins 编写jenkins_docker.yml version: "3.1" services:jenkins:image: jenkins/jenkinscontainer_name: jenkinsports:- 8080:8080- 50000:50000volumes:- ./data/:/var/jenkins_home/首次启动会因为数据卷data目录没有权限…

Nginx配置负载均衡实例

Nginx配置反向代理实例二 提醒一下:下面实例讲解是在Mac系统演示的; 负载均衡实例实现的效果 浏览器地址栏输入地址http://192.168.0.101/test/a.html,刷新页面进行多次请求,负载均衡效果,平均分配到8080端口服务和8…

DNS解析和它的三个实验

一、DNS介绍 DNS:domain name server 7层协议 名称解析协议 tcp /53 主从之间的同步 udp/53 名字解析 DNS作用:将域名转换成IP地址的协议 1.1DNS的两种实现方式 1.通过hosts文件(优先级最高) 分散的管理 linux /etc/hos…

资源三号03星-立体测绘卫星星座

资源三号03星作为我国民用高分辨率立体测图卫星资源三号系列的第三颗卫星,在资源三号02星技术状态的基础上进行了继承和适当优化,设计寿命由资源三号02星的5年延长至8年,星上搭载了三线阵立体测绘相机、多光谱相机和业务化应用的激光测高仪&a…

【JAVA】concurrentHashMap和HashTable有什么区别

🍎个人博客:个人主页 🏆个人专栏:JAVA ⛳️ 功不唐捐,玉汝于成 目录 前言 正文 同步性质: 性能: 允许空键值(Allow Nulls): 迭代器(Iter…

066:vue中实现二维数组的全选、全不选、反选、部分全选功能(图文示例)

第061个 查看专栏目录: VUE ------ element UI 专栏目标 在vue和element UI联合技术栈的操控下,本专栏提供行之有效的源代码示例和信息点介绍,做到灵活运用。 (1)提供vue2的一些基本操作:安装、引用,模板使用,computed,watch,生命周期(beforeCreate,created,beforeM…

Ansible自动化运维

1.Ansible 介绍和架构 1.1 Ansible 发展历史 作者:Michael DeHaan( Cobbler 与 Func 作者) ansible 的名称来自科幻小说《安德的游戏》中跨 越时空的即时通信工具,使用它可以在相距数光年的距离,远程实时控制前线的舰…

【J-Flash基本使用总结】

【J-Flash基本使用总结】 VX:hao541022348 ■ 烧录文件■ 创建新的工程■ 烧录模式-SWD模式■ 烧录 ■ 读单片机Flash数据■ 设置或解除读保护 ■ 烧录文件 ■ 创建新的工程 接着点击 Options –> Project Settings…,选择CPU > Device &#xff…

强化学习应用(三):基于Q-learning的无人机物流路径规划研究(提供Python代码)

一、Q-learning简介 Q-learning是一种强化学习算法,用于解决基于马尔可夫决策过程(MDP)的问题。它通过学习一个价值函数来指导智能体在环境中做出决策,以最大化累积奖励。 Q-learning算法的核心思想是通过不断更新一个称为Q值的…

Python如何实现数据驱动的接口自动化测试

大家在接口测试的过程中,很多时候会用到对CSV的读取操作,本文主要说明Python3对CSV的写入和读取。下面话不多说了,来一起看看详细的介绍吧。 1、需求 某API,GET方法,token,mobile,email三个参数 token为必填项 mobi…

第九讲 单片机驱动彩色液晶屏 控制RA8889软件:显存操作

单片机驱动TFT彩色液晶屏系列讲座 目录 第一讲 单片机最小系统STM32F103C6T6通过RA8889驱动彩色液晶屏播放视频 第二讲 单片机最小系统STM32F103C6T6控制RA8889驱动彩色液晶屏硬件框架 第三讲 单片机驱动彩色液晶屏 控制RA8889软件:如何初始化 第四讲 单片机驱动彩色液晶屏 控…