zookeeper结构和命令
1.1. zookeeper特性
1、Zookeeper:一个leader,多个follower组成的集群
2、全局数据一致:每个server保存一份相同的数据副本,client无论连接到哪个server,数据都是一致的
3、分布式读写,更新请求转发,由leader实施
4、更新请求顺序进行,来自同一个client的更新请求按其发送顺序依次执行
5、数据更新原子性,一次数据更新要么成功,要么失败
6、实时性,在一定时间范围内,client能读到最新数据
1.2. zookeeper数据结构
1、层次化的目录结构,命名符合常规文件系统规范(见下图)
2、每个节点在zookeeper中叫做znode,并且其有一个唯一的路径标识
3、节点Znode可以包含数据和子节点(但是EPHEMERAL类型的节点不能有子节点,下一页详细讲解)
4、客户端应用可以在节点上设置监视器(后续详细讲解)
1.3. 数据结构的图
1.4. 节点类型
1、Znode有两种类型:
短暂(ephemeral)(断开连接自己删除)
持久(persistent)(断开连接不删除)
2、Znode有四种形式的目录节点(默认是persistent )
PERSISTENT 持久
PERSISTENT_SEQUENTIAL(持久序列/test0000000019 )
EPHEMERAL 短暂
EPHEMERAL_SEQUENTIAL 短暂带序列
3、创建znode时设置顺序标识,znode名称后会附加一个值,顺序号是一个单调递增的计数器,由父节点维护
4、在分布式系统中,顺序号可以被用于为所有的事件进行全局排序,这样客户端可以通过顺序号推断事件的顺序
1.5. zookeeper命令行操作
运行 zkCli.sh –server <ip>进入命令行工具
1、使用 ls 命令来查看当前 ZooKeeper 中所包含的内容:
[zk: 202.115.36.251:2181(CONNECTED) 1] ls /
2、创建一个新的 znode ,使用 create /zk myData 。这个命令创建了一个新的 znode 节点“ zk ”以及与它关联的字符串:
[zk: 202.115.36.251:2181(CONNECTED) 2] create /zk "myData“
3、我们运行 get 命令来确认 znode 是否包含我们所创建的字符串:
[zk: 202.115.36.251:2181(CONNECTED) 3] get /zk
#监听这个节点的变化,当另外一个客户端改变/zk时,它会打出下面的
#WATCHER::
#WatchedEvent state:SyncConnected type:NodeDataChanged path:/zk
[zk: localhost:2181(CONNECTED) 4] get /zk watch
4、下面我们通过 set 命令来对 zk 所关联的字符串进行设置:
[zk: 202.115.36.251:2181(CONNECTED) 4] set /zk "zsl“
5、下面我们将刚才创建的 znode 删除:
[zk: 202.115.36.251:2181(CONNECTED) 5] delete /zk
6、删除节点:rmr
[zk: 202.115.36.251:2181(CONNECTED) 5] rmr /zk
1.简介
ZooKeeper提供了一个非常简单的命令行客户端zkCli,它在ZooKeeper安装目录的bin目录下。
[root@s1 zk]# ls /usr/local/zookeeper/bin/
zkCleanup.sh zkCli.sh zkEnv.sh zkServer.sh
先连接一个已经启动的ZooKeeper实例。例如:
zkCli.sh -server localhost:2181
连接过程中会输出一大堆信息。当连接成功后,将进入ZooKeeper的交互式模式:
ZooKeeper的命令很少很简单,大致分为几个类型:
create
:在树中的某个位置创建一个节点。delete
:删除一个节点。exists
:测试一个节点是否存在。get data
:读取节点数据。set data
:向节点中写入数据。get children
:检索某节点的子节点列表。sync
:等待要传播的数据。
注意,这只是命令的功能类型,并不意味着它们就是命令。
2.创建znode
-s:创建的是带序列号的节点,序列号用0填充节点路径。
-e:创建的是临时节点。
path:znode的路径,ZooKeeper中没有相对路径,所有路径都必须以'/'开头。
data:znode携带的数据。
acl:这个节点的ACL。
例如,创建一个znode节点:
[zk: localhost:2181(CONNECTED) 1] create /zk_test mydata1
Created /zk_test
其中/zk_test
是节点名称,mydata1
是该节点携带的数据。
创建一个子节点:
[zk: localhost:2181(CONNECTED) 2] create /zk_test/child_node1 "mydata2"
Created /zk_test/child_node1
创建一个带序列号的znode:
[zk: localhost:2181(CONNECTED) 31] create -s /test1 222
Created /test10000000003
注意,创建了带序列号的znode后,以后只能使用带序列号的路径/test10000000003
来引用这个znode,而不能用/test1
来引用。
创建一个临时znode:
[zk: localhost:2181(CONNECTED) 32] create -e /test2 333
Created /test2
临时znode在会话退出时会自动删除,所以不能在临时节点上创建子节点。另外,虽然临时节点属于某会话,但所有客户端都可以查看、引用它。
3.查看节点的数据和状态信息
获取节点数据、状态信息:
mydata1 # 节点携带的数据
cZxid = 0x4
ctime = Wed Jun 27 02:05:44 CST 2018
mZxid = 0x4
mtime = Wed Jun 27 02:05:44 CST 2018
pZxid = 0x5
cversion = 1
dataVersion = 0
aclVersion = 0
ephemeralOwner = 0x0
dataLength = 7
numChildren = 1
mydata2
cZxid = 0x5
ctime = Wed Jun 27 02:29:12 CST 2018
mZxid = 0x5
mtime = Wed Jun 27 02:29:12 CST 2018
pZxid = 0x5
cversion = 0
dataVersion = 0
aclVersion = 0
ephemeralOwner = 0x0
dataLength = 7
numChildren = 0
如果只是要获取节点的状态信息,可以使用stat命令:
[zk: localhost:2181(CONNECTED) 8] stat /zk_test
cZxid = 0x4
ctime = Wed Jun 27 02:05:44 CST 2018
mZxid = 0x4
mtime = Wed Jun 27 02:05:44 CST 2018
pZxid = 0x5
cversion = 1
dataVersion = 0
aclVersion = 0
ephemeralOwner = 0x0
dataLength = 7
numChildren = 1
ls2
命令是ls
和stat
两个命令的结合体,可以获取给定节点下的子节点,以及给定节点的状态信息:
[zk: localhost:2181(CONNECTED) 12] ls2 /
[zookeeper, zk_test] # 子节点列表
cZxid = 0x0
ctime = Thu Jan 01 08:00:00 CST 1970
mZxid = 0x0
mtime = Thu Jan 01 08:00:00 CST 1970
pZxid = 0x4
cversion = 0
dataVersion = 0
aclVersion = 0
ephemeralOwner = 0x0
dataLength = 0
numChildren = 2 # 子节点数量
4.查看子节点
ls
命令查看某节点下的子节点。注意,不会递归检索。
[zk: localhost:2181(CONNECTED) 3] ls /
[zookeeper, zk_test] [zk: localhost:2181(CONNECTED) 4] ls /zk_test
[child_node1]
5.修改节点数据
set
命令用于修改节点:
[zk: localhost:2181(CONNECTED) 13] set /zk_test "mydata2"
cZxid = 0x4
ctime = Wed Jun 27 02:05:44 CST 2018
mZxid = 0x9
mtime = Wed Jun 27 02:42:45 CST 2018
pZxid = 0x7
cversion = 2
dataVersion = 1
aclVersion = 0
ephemeralOwner = 0x0
dataLength = 7
numChildren = 0
6.删除节点
delete
可以删除节点。注意,它不会递归删除,所以要删除一个包含子节点的节点,需要先删除所有子节点。
[zk: localhost:2181(CONNECTED) 21] delete /zk_test
Node not empty: /zk_test [zk: localhost:2181(CONNECTED) 22] delete /zk_test/child_node1
rmr
命令可以递归删除节点,所以也会删除节点中的所有子节点。
[zk: localhost:2181(CONNECTED) 36] create /test/hello 2323
Created /test/hello
[zk: localhost:2181(CONNECTED) 37] create /test/hello/hello1 23233
Created /test/hello/hello1
[zk: localhost:2181(CONNECTED) 38] rmr /test
[zk: localhost:2181(CONNECTED) 39] ls /
[test2, mynode, zookeeper, test10000000003, zk_test]
7.history和redo
history
命令可以列出最近操作的10条命令历史,并给出每个历史命令的编号。redo
命令可以根据历史命令的编号重新调用这些命令。
[zk: localhost:2181(CONNECTED) 18] history
8 - stat /zk_test
9 - get /
10 - get child /
11 - get children /
12 - ls2 /
13 - ls /
14 - ls2 /zk_test
15 - get /
16 - help
17 - ls /zk
18 - history
重新执行编号为13的历史命令:
[zk: localhost:2181(CONNECTED) 27] redo 13
[zookeeper, zk_test]
8.connect和close
connect命令用于连接其它ZooKeeper服务器,close用于关闭当前连接。就像ssh到其它服务器,然后exit一样。
# 注意下面的ZooKeeper shell提示符中地址和连接状态的变化:
[zk: localhost:2181(CONNECTED) 40] connect 192.168.100.21:2181
[zk: 192.168.100.21:2181(CONNECTED) 41] close
[zk: 192.168.100.21:2181(CLOSED) 43]
需要注意,当connect到其它服务器后,当前的连接就会断开,当前会话中的临时znode就会被删除。以下是connect到其它服务器时zookeeper.out中相关内容:
2018-06-27 04:36:16,734 [myid:] - INFO [ProcessThread(sid:0 cport:2181)::PrepRequestProcessor@487] - Processed session termination for sessionid: 0x10007ee8bb20003
2018-06-27 04:36:16,737 [myid:] - INFO [NIOServerCxn.Factory:0.0.0.0/0.0.0.0:2181:NIOServerCnxn@1040] - Closed socket connection for client /0:0:0:0:0:0:0:1:34376 which had sessionid 0x10007ee8bb20003
所以,上面执行了close后,不会切换回之前的连接,需要手动再连接。
[zk: 192.168.100.21:2181(CONNECTED) 41] close
[zk: 192.168.100.21:2181(CLOSED) 43] ls /
Not connected [zk: 192.168.100.21:2181(CLOSED) 44] connect localhost:2181 [zk: localhost:2181(CONNECTED) 45] ls /
[mynode, zookeeper, test10000000003, zk_test]
9.quit
quit
命令退出ZooKeeper的交互式命令行。
[zk: localhost:2181(CONNECTED) 29] quit
Quitting...
zookeeper结构和命令的更多相关文章
- 8.4.Zookeeper结构和命令
1. Zookeeper结构 1.1.ZooKeeper数据模型Znode ZooKeeper拥有一个层次化的目录结构,命名符合常规文件系统规范 ZooKeeper树中的每个节点被称为—Znode,和 ...
- zookeeper学习(3)----基本结构和命令行操作命令
一. 数据结构 https://www.jianshu.com/p/8e322462bcca zookeeper存储结构:以树形结构的方式存储数据 ZooKeeper数据模型的结构整体上可以看作是一棵 ...
- linux shell脚本使用结构化命令
内容: 一.if-then命令 二.if-then-else命令 三.test命令 四.case命令 1.if-then结构化命令中最基本的类型,其格式如下: if command then comm ...
- Shell 语法之结构化命令(流程控制)
许多程序在脚本命令之间需要某种逻辑流控制,允许脚本根据变量值的条件或者其他命令的结果路过一些命令或者循环执行这些命令.这些命令通常被称为结构化命令.和其他高级程序设计语言一样,shell提供了用来控制 ...
- 《Linux命令行与shell脚本编程大全》第十二章 使用结构化命令
许多程序要就对shell脚本中的命令施加一些逻辑控制流程. 结构化命令允许你改变程序执行的顺序.不一定是依次进行的 12.1 使用if-then语句 如下格式: if command then ...
- zookeeper 四字命令
zookeeper四字命令 ZooKeeper3.4.6支持某些特定的四字命令字母与其的交互.它们大多是查询命令,用来获取 ZooKeeper 服务的当前状态及相关信息.用户在客户端可以通过 te ...
- centos shell脚本编程1 正则 shell脚本结构 read命令 date命令的用法 shell中的逻辑判断 if 判断文件、目录属性 shell数组简单用法 $( ) 和${ } 和$(( )) 与 sh -n sh -x sh -v 第三十五节课
centos shell脚本编程1 正则 shell脚本结构 read命令 date命令的用法 shell中的逻辑判断 if 判断文件.目录属性 shell数组简单用法 $( ) 和$ ...
- bash shell笔记3 结构化命令二
原创作品,允许转载,转载时请务必以超链接形式标明文章 原始出处 .作者信息和本声明.否则将追究法律责任.http://twentyfour.blog.51cto.com/945260/513601 三 ...
- bash shell笔记2 结构化命令
二.使用结构化命令 知识内容: # 改变命令流 # 使用if-then逻辑 # 嵌套if-then # 测试条件 # 高级if-then功能 许多程序在脚本命令之间需要某些逻辑控制流,有些命令允许脚本 ...
随机推荐
- Python 爬虫-抓取中小企业股份转让系统公司公告的链接并下载
系统运行系统:MAC 用到的python库:selenium.phantomjs等 由于中小企业股份转让系统网页使用了javasvript,无法用传统的requests.BeautifulSoup库获 ...
- NtOpenProcess被HOOK,跳回原函数地址后仍然无法看到进程
点击打开链接http://www.ghoffice.com/bbs/read-htm-tid-103923.html
- Java-Class-@I:org.springframework.stereotype.Service
ylbtech-Java-Class-@I:org.springframework.stereotype.Service 1.返回顶部 2.返回顶部 1. package com.ylbtech. ...
- Git及github使用(一)客户端与本地关联
一.下载安装git客户端 1.官网下载地址:https://git-scm.com/ 2.选择自己相应的系统进行下载即可(windows一路默认安装) 二.配置git 1.在github上注册自己的账 ...
- java中的反射机制和javaBean
反射 反射:就是通过一个类加载进方法区时加载到栈内存中的Class字节码文件对这个类进行解剖 通过反射可以获取到一个类的构造方法,成员方法,成员变量 反射将一个类的各个部分映射成相应的类 反射获取构造 ...
- iOS开发系列-iOS布局相关
LayoutSubViews 需要在某个View调整子视图的位置时,可以重写. 以下情况会出发LayoutSubViews方法的调用 init初始化不会触发layoutSubviews,但是是用ini ...
- gcc 4步编译过程
一. gcc编译过程 1. 预处理: 主要进行宏替换以及头文件的展开 gcc -E *.c -o *.i 2. 编译::编译生成汇编文件,会检查语法错误 gcc -S *.i ...
- Python学习笔记(五)——异常处理
Python 异常总结 异常名称 解释 AssertionError 断言语句(assert)失败:当assert关键字后边的条件为假时,程序将抛出该异常,一般用于在代码中置入检查点 OSError ...
- soj116 快乐串
题意:定义一个串是k-happy的:对于所有的Ai,都有Aj(j!=i),使得|Ai-Aj|<=k. 问使得原串至少存在一个长度>=m的连续子串是k-happy的最小的k? 标程: #in ...
- Redhat镜像-RHEL-官方镜像下载大全
原网站内容链接:https://pan.baidu.com/s/12XYXh#list/path=%2F 已经存在自己的云盘上了