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

news2024/9/30 11:23:28

文章目录

  • 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:查看节点数据以及节点状态信息

在这里插入图片描述

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

C++(9.5)——浅谈new和delete的实现原理

(注:本文是针对上篇文章中C内存管理的两个关键字)两个关键字原理的解析,对于这两个关键字的使用并没有什么影响,如果只想得知两个关键字的使用方法,则可以直接跳过本篇文章) 目录 1. 引入: 2.operator new 与 operat…

【Linux笔记】进程等待与程序替换

一、进程的终止 1、进程退出码 在讲解进程的终止之前,先要普及一下进程的退出码概念。 我们父进程之所以要创建子进程,就是为了让子进程运行不一样的任务,那么对于子进程执行的这个任务执行完毕后的结果是否正确或者是否出差错&#xff0c…

学习笔记-数据库概念介绍

一.数据库概述 1.数据库: 存储数据的仓库,本质是一个文件系统. 用户可以对数据库中的数据进行 增加,修改,删除以及查询操作 2.特点 可以结构化存储大量的数据可以有效的保持数据的一致性,完整性读写效率高 3.常用数据库 二.数据库分类及其常用 关系型数据库 指的是二维表格…

渗透测试:保障网络安全的重要手段!

随着信息技术的快速发展,网络安全问题日益受到关注。渗透测试作为一种重要的网络安全检测和评估方法,已经成为保障网络安全的重要手段之一。本文将介绍渗透测试的基本概念、流程、以及在保障网络安全方面的应用。 一、渗透测试的基本概念 渗透测试是一…

linux 服务器上安装 ftp(亲测有效)

目录 1 需求2 安装 1 需求 服务器上需要安装ftp 2 安装 1 下载地址 https://developer.aliyun.com/packageSearch?wordvsftpd或者 https://rpmfind.net/linux/rpm2html/search.php?queryvsftpd2 如何判断 服务器是否安装了ftp rpm -qa | grep vsftpd出现提示则表示已安装…

【从0上手cornerstone3D】如何渲染一个基础的Dicom文件(含演示)

一、Cornerstone3D 是什么? Cornerstone3D官网:https://www.cornerstonejs.org/ 在线查看显示效果(加载需时间,可先点击运行),欢迎fork 二、代码示例 了解了Cornerstone是什么,有什么作用后&…

解决elementUI或elementPlus的按钮点击后需要失去焦点才能恢复原本样式问题

废话不多说直接上代码,只需要在button中添加如下代码即可 focus"(e) > e.target.blur()"

精确掌控并发:分布式环境下并发流量控制的设计与实现(二)

3. 固定窗口 参考:精确掌控并发:分布式环境下并发流量控制的设计与实现(一)-CSDN博客 4. 滑动窗口 滑动窗口算法是一种更为灵活的流量控制方案,它比固定窗口算法能更平滑地处理突发流量。在滑动窗口中,时…

什么是云服务器ECS及其优势、购买、使用方式和部署建议

阿里云服务器ECS英文全程Elastic Compute Service,云服务器ECS是一种安全可靠、弹性可伸缩的云计算服务,阿里云提供多种云服务器ECS实例规格,如经济型e实例、通用算力型u1、ECS计算型c7、通用型g7、GPU实例等,阿里云百科aliyunbai…

UE5 通过接口实现角色描边效果

接口不能够被实例化,不能够在内部书写函数的逻辑和设置属性,只能够被继承使用。它能够让不同的类实现有相同的函数,继承接口的类必须实现接口的函数。 并且,我们可以在不同的类里面的函数实现也不同,比如A类描边是红色…

Windows 项目从0到1的部署

目录 一. 安装jdk 1.1 安装jdk 1.2 配置jdk的环境配置jdk 1.3 配置成功 二. 配置tomcat 2.1 启动tomcat 2.2 防火墙设置 三. 安装MySQL 3.1 安装步骤 3.2 内部连接 3.3 外部连接 四. 部署项目 4.1 项目部署 4.2 修改mysql的用户密码 一. 安装jdk 这里给大家准备好了jdk和…

Chrome DevTools 常用面板攻略

文章目录 前言一、概述1.1 简介1.2 DevTools 初步了解 二、设备模式(Device Mode)2.1 面板概述2.2 设备切换 三、元素面板(Elements)3.1 面板概述3.2 编辑样式3.2.1 添加、启用和停用 CSS 类3.2.2 添加或移除动态样式3.2.3 快速向…

YOLOv5改进 | 检测头篇 | ASFFHead自适应空间特征融合检测头(全网首发)

一、本文介绍 本文给大家带来的改进机制是利用ASFF改进YOLOv5的检测头形成新的检测头Detect_ASFF,其主要创新是引入了一种自适应的空间特征融合方式,有效地过滤掉冲突信息,从而增强了尺度不变性。经过我的实验验证,修改后的检测头在所有的检测目标上均有大幅度的涨点效果,…

【数据库原理】(24)数据库安全性策略

数据库安全性是数据库管理系统(DBMS)中一个至关重要的方面。它指的是保护数据库免受非授权访问和恶意操作,包括数据泄露、修改、破坏等。 多层安全模型 在典型的计算机系统安全模型中,安全措施被设置在不同层级: 应用…

将.NET应用转换成Window服务

写在前面 本文介绍了将.NET8.0应用程序转换成Windows服务。 需要在NuGet中获取并安装:Microsoft.Extensions.Hosting.WindowsServices 包 代码实现 using System.Runtime.InteropServices; using WorkerService1;public class Program {public static void Main…

Vue+ElementUI+Axios实现携带参数的文件上传(数据校验+进度条)

VueElementUIAxios实现携带参数的文件上传(数据校验进度条) 可以实现对上传文件的类型,大小进行数据校验,以及对上传文件所要携带的数据也进行的校验,也有文件上传进度的进度条。 一、Vue 结构部分 弹窗显示&#xff0…

Jenkins 问题

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

[每周一更]-(第82期):认识自然处理语言(NLP)

GPT的大火,带起了行业内大模型的爆发;国内外都开始拥有或者研发自己的大模型,下边我们从NLP来进一步深入了解大模型、AI。 一、什么是NLP? 自然语言处理(英语:Natural Language Processing,缩…

2000年第五次人口普查数据,shp/excel格式均有,划分年龄段、性别占比等字段

基本信息. 数据名称: 第五次人口普查数据 数据格式: Shp、excel 数据时间: 2000年 数据几何类型: 面 数据坐标系: WGS84坐标系 数据来源:第五次人口普查数据 数据字段: 序号字段名称字段说明1a2000_zrks2000年_常住人口(人&…

Pycharm close project 速度缓慢解决办法

解决Pycharm close project缓慢现象 1.问题描述 close project后需要等待很长的时间。 2.解决办法 在Help -> Find Action -> 输入 Registry -> 禁用ide.await.scope.completion 问题解决!!! 😃😃&#x…