• ZooKeeper基础概述

ZooKeeper维护一个小型的数据节点,这些节点被称为znode,采用类似于文件系统的层级树状结构进行管理。

针对一个znode,没有数据常常表达了重要的信息。比如,在主-从模式中的例子,主节点的znode没有数据,表示当前还没有选举出主节点。

/workers   节点作为父节点,其下每个znode子节点保存了系统中一个可用从节点信息(foo.com:2181)

/tasks    节点作为父节点,其下每个znode自己诶单保存了所有已经创建并等待从节点执行的任务的信息,主-从模式的应用的客户端在/tasks下添加一个znode子节点,用来表示一个新任务,并等待任务状态的znode节点。

/assign  节点作为父节点,其下每个znode子节点保存了分配到某个从节点的一个任务信息,当主节点为某个从节点分配了一个任务,就会在/assign下增加一个子节点。

  • ZooKeeper的API概述

[zk: 127.0.0.1:2181,127.0.0.1:2182,127.0.0.1:2183(CONNECTED) 35] h
ZooKeeper -server host:port cmd args
connect host:port
get path [watch]
ls path [watch]
set path data [version]
rmr path
delquota [-n|-b] path
quit
printwatches on|off
create [-s] [-e] path data acl
stat path [watch]
close
ls2 path [watch]
history
listquota path
setAcl path acl
getAcl path
sync path
redo cmdno
addauth scheme auth
delete path [version]
setquota -n|-b val path

  • ZooKeeper的不同类型

1、持久型

只能通过调用delete来进行删除

2、临时型

2.1、当创建该znode的客户端的会话因超市或者主动关闭而终止时会被删除

2.2、当某个客户端(不一定是创建者)主动删除该节点时会被删除

3、持久有序型

一个有序znode节点被分配唯一一个单调递增的整数,一个序号会被追加到路径之后

4、临时有序型

一个有序znode节点被分配唯一一个单调递增的整数,一个序号会被追加到路径之后

  • 版本号

每一个znode都有一个版本号,它随着每次数据变化而自增。可以使用版本来阻止并行操作的不一致性

  • ZooKeeper的helloworld

1、下载ZooKeeper的发行包

2、解压:tar -zxvf zookeeper.tar.gz

3、修改conf目录下的zoo_sample.cfg名称

mv zoo_sample.cfg zoo.cfg

4、设置zoo.cfg中的data目录,防止zookeeper填满了跟分区

dataDir=/users/me/zookeeper/z1/data

5、启动服务

./zkServer.sh start

echo ruok | nc localhost 2181

若是正常运行的话会打印“imok”。

  • 会话状态和生命周期

  • zooKeeper的伪集群模式

1、在zoo.cfg中配置如下信息

dataDir=/tmp/zookeeper/z1/data

server.1=127.0.0.1:2222:2223
server.2=127.0.0.1:3333:3334
server.3=127.0.0.1:4444:4445

2、配置myid

[root@root tmp]# tree zookeeper/
zookeeper/
├── version-2
│   └── log.1
├── z1
│   ├── data
│   │   ├── myid #该文件内容为zookeeper的服务器的ID
│   │   ├── version-2
│   │   │   ├── acceptedEpoch
│   │   │   ├── currentEpoch
│   │   │   ├── log.100000001
│   │   │   ├── log.200000001
│   │   │   ├── snapshot.0
│   │   │   └── snapshot.100000017
│   │   └── zookeeper_server.pid
│   └── zookeeper_server.pid

3、启动zookeeper

./zkServer.sh start ../conf/z1.cfg

./zkServer.sh start ../conf/z2.cfg

1 )使用 ls 命令来查看当前 ZooKeeper 中所包含的内容:
[zk: 202.115.36.251:2181(CONNECTED) 1] ls /
[zookeeper]

2 )创建一个新的 znode ,使用 create /zk myData 。这个命令创建了一个新的 znode 节点“ zk ”以及与它关联的字符串:
[zk: 202.115.36.251:2181(CONNECTED) 2] create /zk "myData"
Created /zk

3 )我们运行 get 命令来确认 znode 是否包含我们所创建的字符串:
[zk: 202.115.36.251:2181(CONNECTED) 3] get /zk
cZxid = 0x6
ctime = Thu Sep 12 15:49:16 CST 2013
mZxid = 0x7
mtime = Thu Sep 12 15:49:38 CST 2013
pZxid = 0x6
cversion = 0
dataVersion = 1
aclVersion = 0
ephemeralOwner = 0x0
dataLength = 10
numChildren = 0

4 )下面我们通过 set 命令来对 zk 所关联的字符串进行设置:
[zk: 202.115.36.251:2181(CONNECTED) 4] set /zk "zsl"
"myData"
cZxid = 0x4
ctime = Thu Sep 12 15:46:37 CST 2013
mZxid = 0x4
mtime = Thu Sep 12 15:46:37 CST 2013
pZxid = 0x4
cversion = 0
dataVersion = 0
aclVersion = 0
ephemeralOwner = 0x0
dataLength = 8
numChildren = 0

5 )下面我们将刚才创建的 znode 删除:
[zk: 202.115.36.251:2181(CONNECTED) 5] delete /zk

当然,我们还可以创建有曾次的目录,比如使用create /zk/node1在zk目录下创建新的目录node1
[zk: 192.168.255.133:2181(CONNECTED) 18] create /zk/node1 "node1"
Created /zk/node1
[zk: 192.168.255.133:2181(CONNECTED) 19] ls /zk
[node1]


使用ZooKeeper四字命令

传递四个字母的字符串给ZooKeeper,ZooKeeper会返回一些有用的信息。

ZooKeeper 四字命令

功能描述

conf

输出相关服务配置的详细信息。

cons

列出所有连接到服务器的客户端的完全的连接 / 会话的详细信息。包括“接受 / 发送”的包数量、会话 id 、操作延迟、最后的操作执行等等信息。

dump

列出未经处理的会话和临时节点。

envi

输出关于服务环境的详细信息(区别于 conf 命令)。

reqs

列出未经处理的请求

ruok

测试服务是否处于正确状态。如果确实如此,那么服务返回“imok ”,否则不做任何相应。

stat

输出关于性能和连接的客户端的列表。

wchs

列出服务器 watch 的详细信息。

wchc

通过 session 列出服务器 watch 的详细信息,它的输出是一个与watch 相关的会话的列表。

wchp

通过路径列出服务器 watch 的详细信息。它输出一个与 session相关的路径。

最新文章

  1. 分享一些不错的sql语句
  2. 封装好的AFN网络请求框架和MBProgress
  3. Java Debugging
  4. Linq 多条件连接
  5. 如何在Windows Server 2003中配置FTP站点服务
  6. jQuery全选与反选,且解决点击只执行一次的问题
  7. uva 133 The Dole Queue 双向约瑟夫环 模拟实现
  8. Base algorithm
  9. Java中设计模式之单例设计模式-1
  10. 201521123010 《Java程序设计》第11周学习总结
  11. Android预定义样式
  12. MIP技术进展月报第2期: 数据绑定,异步脚本加速
  13. Nginx高并发优化方案
  14. spring suite tool 添加namespace时只有bean一个
  15. 关于wordpress更新提示无法创建目录问题
  16. string.format格式化字符串中转义大括号“{}”
  17. bzoj4361 isn(树状数组优化dp+容斥)
  18. lastIndexOf() 找出指定元素出现的所有位置(返回的是下标数组)---lastIndexOf() 这个方法是倒叙查找,正序的是indexOf()
  19. 正确把mysql数据库从windows迁移到linux系统上的方法
  20. P2617 Dynamic Rankings(带修主席树)

热门文章

  1. sublime 前端开发工具
  2. JQ 替换节点
  3. php Debugging with Xdebug and Sublime Text 3(转)
  4. SpringMVC4.0以后版本返回json格式数据问题
  5. VS2010编译时出现错误1 error LNK1123: 转换到 COFF 期间失败: 文件无效或损坏
  6. (原)STL中vector的疑问
  7. 生成shadow中hash字串
  8. AngularJS如何给动态添加的DOM中绑定事件
  9. Java编程思想——类型信息(RTTI)
  10. 五个典型的JavaScript面试题