一. 数据结构

https://www.jianshu.com/p/8e322462bcca

zookeeper存储结构:以树形结构的方式存储数据

ZooKeeper数据模型的结构整体上可以看作是一棵树,每个节点称做一个ZNode。每个ZNode都可以通过其路径唯一标识

ZK节点ZNode分为四种:

1  持久化目录节点:PERSISTENT  与客户端断开连接后 此节点还一直存在

2  持久化顺序编号目录节点:PERSISTENT_SEQUENTIAL  客户端断开连接后,该节点依旧存在,只是Zookeeper给该节点名称进行顺序编号

3  临时目录节点 客户端与zookeeper断开连接后,该节点被删除

4  临时顺序编号目录节点 EPHEMERAL_SEQUENTIAL 客户端与zookeeper断开连接后,该节点被删除,只是Zookeeper给该节点名称进行顺序编号

https://www.iteye.com/blog/agapple-1111377

在zookeeper中实现了一个类似file system系统的数据结构,比如/zookeeper/status。 每个节点都对应于一个znode节点。

znode节点的数据结构模型:

znode的数据结构内容:

https://www.jianshu.com/p/39736c054e88

说明: zxid (ZooKeeper Transaction Id,每次请求对应一个唯一的zxid,如果zxid a < zxid b ,则可以保证a一定发生在b之前)。

二. zookeeper 操作命令

有图:https://www.cnblogs.com/lookupthesky/p/9874831.html

转载: https://blog.csdn.net/heihei36/article/details/70871074

首先说明一下如何打开zk服务端和客户端,cd到zk安装目录下,运行bin/zkServer.shstart即可启动服务端,运行bin/zkCli.sh –server ip:port即可启动客户端。
help命令

https://www.jianshu.com/p/39736c054e88
显示客户所支持的所有命令,如:

ZooKeeper -server host:port cmd args

connecthost:port

getpath [watch]

lspath [watch]

setpath data [version]

rmrpath

delquota[-n|-b] path

quit

printwatcheson|off

create[-s] [-e] path data acl

statpath [watch]

close

ls2path [watch]

history

listquotapath

setAclpath acl

getAclpath

syncpath

redocmdno

addauthscheme auth

deletepath [version]

setquota-n|-b val path

connect命令

连接zk服务端,与close命令配合使用可以连接或者断开zk服务端。

如connect 127.0.0.1:2181

get命令

获取节点信息,注意节点的路径皆为绝对路径,也就是说必要要从/(根路径)开始。

如get /

hello world

cZxid = 0x0

ctime = Thu Jan 01 08:00:00 CST 1970

mZxid = 0x5

mtime = Thu Apr 27 15:09:00 CST 2017

pZxid = 0xc

cversion = 1

dataVersion = 2

aclVersion = 0

ephemeralOwner = 0x0

dataLength = 11

numChildren = 1

详解:

hello world为节点数据信息

cZxid节点创建时的zxid

ctime节点创建时间

mZxid节点最近一次更新时的zxid

mtime节点最近一次更新的时间

cversion子节点数据更新次数

dataVersion本节点数据更新次数

aclVersion节点ACL(授权信息)的更新次数

ephemeralOwner如果该节点为临时节点,ephemeralOwner值表示与该节点绑定的session id. 如果该节点不是临时节点,ephemeralOwner值为0

dataLength节点数据长度,本例中为hello world的长度

numChildren子节点个数

ls命令

获取路径下的节点信息,注意此路径为绝对路径,类似于linux的ls命令。

如ls /zookeeper

set命令

设置节点的数据。

如set /zookeeper "hello world"

rmr命令

删除节点命令,此命令与delete命令不同的是delete不可删除有子节点的节点,但是rmr命令可以删除,注意路径为绝对路径。

如rmr /zookeeper/znode

delquota命令

删除配额,-n为子节点个数,-b为节点数据长度。

如delquota –n 2,请参见listquota和setquota命令。

quit命令

退出。

printwatches命令

设置和显示监视状态,on或者off。

如printwatches on

create命令

创建节点,其中-s为顺序充点,-e临时节点。

如create /zookeeper/node1"test_create" world:anyone:cdrwa

其中acl处,请参见getAcl和setAcl命令。

stat命令

查看节点状态信息。如stat /

cZxid = 0x0

ctime = Thu Jan 01 08:00:00 CST 1970

mZxid = 0x1f

mtime = Thu Apr 27 16:05:14 CST 2017

pZxid = 0xc

cversion = 1

dataVersion = 3

aclVersion = 0

ephemeralOwner = 0x0

dataLength = 5

numChildren = 1

与get命令大体相同,请参见get命令。
close命令

断开客户端与服务端的连接。
ls2命令

ls2为ls命令的扩展,比ls命令多输出本节点信息。

如 ls /zookeeper
history命令

列出最近的历史命令。

如history

0 - ls /

1 - ls /

2 - ls2 /

3 - history

4 - listquota /zookeeper

5 – history

基本格式为:命令ID-命令,可以与redo命令配合使用。

 
listquota命令

显示配额。

如listquota /zookeeper

absolute path is/zookeeper/quota/zookeeper/zookeeper_limits

Output quota for /zookeepercount=2,bytes=-1

解释:

/zookeeper节点个数限额为2,长度无限额。

setAcl命令

设置节点Acl。

此处重点说一下acl,acl由大部分组成:1为scheme,2为user,3为permission,一般情况下表示为scheme:id:permissions。

其中scheme和id是相关的,下面将scheme和id一起说明。

scheme和id

world: 它下面只有一个id, 叫anyone, world:anyone代表任何人,zookeeper中对所有人有权限的结点就是属于world:anyone的

auth: 它不需要id, 只要是通过authentication的user都有权限(zookeeper支持通过kerberos来进行authencation, 也支持username/password形式的authentication)

digest: 它对应的id为username:BASE64(SHA1(password)),它需要先通过username:password形式的authentication

ip: 它对应的id为客户机的IP地址,设置的时候可以设置一个ip段,比如ip:192.168.1.0/16, 表示匹配前16个bit的IP段

super: 在这种scheme情况下,对应的id拥有超级权限,可以做任何事情(cdrwa)
permissions

CREATE(c): 创建权限,可以在在当前node下创建child node

DELETE(d): 删除权限,可以删除当前的node

READ(r): 读权限,可以获取当前node的数据,可以list当前node所有的child nodes

WRITE(w): 写权限,可以向当前node写数据

ADMIN(a): 管理权限,可以设置当前node的permission

综上,一个简单使用setAcl命令,则可以为:

setAcl /zookeeper/node1 world:anyone:cdrw
 getAcl命令

获取节点Acl。

如getAcl /zookeeper/node1

'world,'anyone

: cdrwa

注:可参见setAcl命令。
sync命令

强制同步。

如sync /zookeeper

由于请求在半数以上的zk server上生效就表示此请求生效,那么就会有一些zk server上的数据是旧的。sync命令就是强制同步所有的更新操作。
redo命令

再次执行某命令。

如redo 10

其中10为命令ID,需与history配合使用。
addauth命令

节点认证。

如addauth digest username:password,可参见setAcl命令digest处。

使用方法:

一、通过setAcl设置用户名和密码

setAcl pathdigest:username:base64(sha1(password)):crwda
二、认证
addauth digest username:password
delete命令

删除节点。

如delete /zknode1

setquota命令

设置子节点个数和数据长度配额。

如setquota –n 4 /zookeeper/node 设置/zookeeper/node子节点个数最大为4

setquota –b 100 /zookeeper/node 设置/zookeeper/node节点长度最大为100

zookeeper学习(3)----基本结构和命令行操作命令的更多相关文章

  1. 【分布式】ZooKeeper学习之一:安装及命令行使用

    ZooKeeper学习之一:安装及命令行使用 一直都想着好好学一学分布式系统,但是这拖延症晚期也是没得治了,所以干脆强迫自己来写一个系列博客,从zk的安装使用.客户端调用.涉及到的分布式原理.选举过程 ...

  2. Linux学习心得之 Linux下命令行Android开发环境的搭建

    作者:枫雪庭 出处:http://www.cnblogs.com/FengXueTing-px/ 欢迎转载 Linux学习心得之 Linux下命令行Android开发环境的搭建 1. 前言2. Jav ...

  3. Java带包结构调用命令行运行编译

    原文: https://www.toutiao.com/i6491809562037846542/ 带包结构调用命令行运行编译. 记事本编写两个简单的类 文件结构目录 启动DOS,进入文件所在目录 分 ...

  4. 学习 Linux,101: Linux 命令行

    概述 本教程将简要介绍 bash shell 的一些主要特性,涵盖以下主题: 使用命令行与 shell 和命令交互 使用有效的命令和命令序列 定义.修改.引用和导出环境变量 访问命令历史和编辑工具 调 ...

  5. 【Linux学习】2.Linux常见命令行

    记录学习Linux 系统的相关知识点,欢迎大家拍砖交流,一起成长:QQ:2712192471 作者背景:前端开发工程师 | Python | web安全爱好者   Linux命令行: 系统关机重启 s ...

  6. 05LaTeX学习系列之---TeX的命令行操作

    目录 目录 前言 (一)查看版本号 1.查看TeX的版本号 2.查看LaTeX的版本号 3.查看XeLeTeX的版本号 (二)更行版本 (三)用命令行来编译.tex文件 1.用LaTeX编译 2.用X ...

  7. Maven学习(四)Maven 命令行选项

    说明: 1.使用-选项时,和后面的参数之间可以不要空格.而使用--选项时,和后面的参数之    间必须有空格.如下面的例子: $ mvn help:describe -Dcmd=compiler:co ...

  8. (Linux基础学习)第八章:命令行历史,history

    第1节:命令行历史简介保存你输入的命令历史.可以用它来重复执行命令登录shell时,会读取命令历史文件中记录下的命令~/.bash_history登录进shell后新执行的命令只会记录在缓存中:这些命 ...

  9. Go语言命令行操作命令详细介绍

    转自:http://www.jb51.net/article/56781.htm Go 命令 Go语言自带有一套完整的命令操作工具,你可以通过在命令行中执行go来查看它们: 图 Go命令显示详细的信息 ...

随机推荐

  1. 微软3389远程漏洞CVE-2019-0708批量检测工具

    0x001 Win下检测 https://github.com/robertdavidgraham/rdpscan C:\Users\K8team\Desktop\rdpscan-master\vs1 ...

  2. CentOS 7 搭建 GitLab

    概述 GitLab 是我在日常工作中使用的代码仓库管理系统,它带有非常友好的 Web 界面,并且功能丰富.下面将介绍我在 CentOS 7 上搭建 GitLab 的步骤,以及遇到的一些问题. 关于不同 ...

  3. VC.DNS解析(winsock)

    1.尝试了 gethostbyname(...) 和 Qt598中的qhostinfo::fromname(...),都可以解析出来IP,但是有一个问题:域名指向的IP改变了,这两种方式需要等较长时间 ...

  4. 路由(Routing)

    路由(Routing)  ASP.NET Core MVC 路由是建立在ASP.NET Core 路由的,一项强大的URL映射组件,它可以构建具有理解和搜索网址的应用程序.这使得我们可以自定义应用程序 ...

  5. kafka那些事儿

    1 为什么用消息队列 1)解耦.服务之间没有强依赖,不需要关心调用服务时出现的各种异常,服务挂掉后接口超时等问题 2)异步.解决接口调用多服务时延时高的问题 3)高峰期服务间缓冲.解决工作节奏不一致问 ...

  6. 串的两种模式匹配方式(BF/KMP算法)

    前言 串,又称作字符串,它是由0个或者多个字符所组成的有限序列,串同样可以采用顺序存储和链式存储两种方式进行存储,在主串中查找定位子串问题(模式匹配)是串中最重要的操作之一,而不同的算法实现有着不同的 ...

  7. 033 Android App启动的闪屏效果+新手向导(多个图片滑动效果)+ViewPager使用

    1.目标效果 App启动时,出现闪屏效果(利用动画实现). App新手使用时,会出现新手向导效果. 2.XML页面布局 (1)闪屏页面 <?xml version="1.0" ...

  8. 剪切板工具:Ditto

    DittoClipboard manager; 剪贴板工具https://ditto-cp.sourceforge.io/ 参考资料 https://www.liutf.com/posts/37207 ...

  9. 关于/etc/rc.local

    /etc/rc.d/rc.local 用于添加开机启动命令 /etc/rc.local是/etc/rc.d/rc.local的软连接 简单来说 开机自启的

  10. java war包 远程debug出现的问题解决,学会查看日志

    开启远程debug之后,8005 关闭tomcat 又启动不了了.. netstat -lnp 未发现8005接口 eclipse 内远程链接到服务器,debug 下发现服务器线程启动也存在问题.很多 ...