大家好,又见面了,我是你们的朋友全栈君。
原文地址: http://blog.csdn.net/nsrainbow/article/details/42836479 最新课程请关注原作者博客,获得更好的显示体验
声明
- 本文基于Centos 6.x + CDH 5.x
zookeeper有什么用
- ZooKeeper是一个分布式的,开放源码的分布式应用程序协调服务。
- ZooKeeper的目标就是封装好复杂易出错的关键服务,将简单易用的接口和性能高效、功能稳定的系统提供给用户
- ZooKeeper包含一个简单的原语集,提供Java和C的接口。
- 对于分布式服务来说,通过zookeeper可以作为管理节点的一个桥梁,就拿Hbase来说,当你增加一个regionserver的时候根本不需要去master那里去增加一些配置,你只需要在regionserver上配置好zookeeper的地址,master隔几秒会去zookeeper上看下,是否有多了regionserver,如果有就自动使用了,master,regionserver都在zookeeper上注册着,所以jdbc连接也只要去zookeeper上查就可以知道该连哪个master
- 我们可以自动监控这些节点是否活着,而不用手动去实现这些事情,所以zookeeper解决了用户想知道节点“是否活着?”的问题
快速开始
安装
服务端,在每一台需要监控的机器上安装
yum install zookeeper-server
客户端
yum install zookeeper-client
配置
maxClientCnxns=50# The number of milliseconds of each ticktickTime=2000# The number of ticks that the initial # synchronization phase can takeinitLimit=10# The number of ticks that can pass between # sending a request and getting an acknowledgementsyncLimit=5# the directory where the snapshot is stored.dataDir=/var/lib/zookeeper# the port at which the clients will connectclientPort=2181server.1=host1:2888:3888server.2=host2:2888:3888
- tickTime 单位是毫秒,被用作计算会话超时时间和心跳时间的最小单位,这两个时间会被表示成 tickTime 的倍数,而不是直接写上毫秒数,不懂这样设计的好处在哪里,不过至少用户简单了一点,只需要写上倍数就行了
- dataDir 存储内存数据的快照或者关于事务的更新日志
- clientPort 给客户端使用的端口
使用
service zookeeper-server start
[zk: localhost:2181(CONNECTED) 0]
使用help命令看看有什么可以用的命令
[zk: localhost:2181(CONNECTED) 0] help
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
我们来试试看最简单的 ls 命令
[zk: localhost:2181(CONNECTED) 1] ls /[hadoop-ha, hbase, zookeeper][zk: localhost:2181(CONNECTED) 2] ls /hadoop-ha[mycluster]
创建节点
[zk: localhost:2181(CONNECTED) 3] create /zk_test my_data
Created /zk_test
[zk: localhost:2181(CONNECTED) 4] ls /
[hadoop-ha, hbase, zookeeper, zk_test]
这个zk_test 是我们要建立的节点名字,my_data 是节点的数据。
节点数据
[zk: localhost:2181(CONNECTED) 5] get /zk_testmy_datacZxid = 0x2200000019ctime = Sun Jan 18 02:30:56 PST 2015mZxid = 0x2200000019mtime = Sun Jan 18 02:30:56 PST 2015pZxid = 0x2200000019cversion = 0dataVersion = 0aclVersion = 0ephemeralOwner = 0x0dataLength = 7numChildren = 0
在讲解这些参数之前先介绍一下一个概念:
- zxid:每次修改ZooKeeper状态都会收到一个zxid形式的时间戳,也就是ZooKeeper事务ID。事务ID是ZooKeeper中所有修改总的次序。每个修改都有唯一的zxid,如果zxid1小于zxid2,那么zxid1在zxid2之前发生。
- 版本号:对节点的每次修改将使得节点的版本号增加一。版本号有三种:version(znode数据修改的次数)、cversion(znode子节点修改的次数),以及aversion(znode的ACL修改次数)。
- tick:多服务器ZooKeeper中,服务器使用tick来定义状态上传、会话超时、节点间连接超时等事件的时序。tick仅被最小会话超时(2倍的tick时间)间接使用:如果客户端要求小于最小会话超时的时间,服务器将告知客户端,实际使用的是最小会话超时。
- 真实时间:除了在创建和修改znode时将时间戳放入stat结构体中之外,ZooKeeper不使用真实时间,或者说时钟时间。
- czxid:创建节点的事务的zxid
- mzxid:对znode最近修改的zxid
- ctime:以距离时间原点(epoch)的毫秒数表示的znode创建时间
- mtime:以距离时间原点(epoch)的毫秒数表示的znode最近修改时间
- pzxid:子节点的最后版本
- cversion:znode子节点修改次数
- dataVersion:数据的版本
- aclVersion:znode的ACL修改次数
- ephemeralOwner:如果znode是临时节点,则指示节点所有者的会话ID;如果不是临时节点,则为零。
- dataLength:znode数据长度。
- numChildren:znode子节点个数。
修改节点
[zk: localhost:2181(CONNECTED) 6] set /zk_test junkcZxid = 0x2200000019ctime = Sun Jan 18 02:30:56 PST 2015mZxid = 0x220000001amtime = Sun Jan 18 02:55:35 PST 2015pZxid = 0x2200000019cversion = 0dataVersion = 1aclVersion = 0ephemeralOwner = 0x0dataLength = 4numChildren = 0[zk: localhost:2181(CONNECTED) 7] get /zk_testjunkcZxid = 0x2200000019ctime = Sun Jan 18 02:30:56 PST 2015mZxid = 0x220000001amtime = Sun Jan 18 02:55:35 PST 2015pZxid = 0x2200000019cversion = 0dataVersion = 1aclVersion = 0ephemeralOwner = 0x0dataLength = 4numChildren = 0
再对比一下之前的参数,会发现以下参数改变了
- mZxid :变为另一个数据,表示最后修改的版本
- mtime:最后修改时间变了
- dataVersion:从0变成1,表示数据的版本增加了1
- dataLength:数据长度变化了
什么是ACL
删除节点
[zk: localhost:2181(CONNECTED) 8] delete /zk_test
[zk: localhost:2181(CONNECTED) 9] ls /
[hadoop-ha, hbase, zookeeper]
可以看到节点被删除了
总结
参考资料
- http://zookeeper.apache.org/doc/trunk/zookeeperStarted.html
- http://zookeeper.apache.org/doc/trunk/zookeeperProgrammers.html#sc_zkDataModel_znodes
- http://blog.163.com/wm_at163/blog/static/132173490201232423051163/
发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/138545.html原文链接:https://javaforall.cn
【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛
【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...