开始之前,需要下载zookeeper发行包.zookeeper作为Apache项目托管到http://zookeeper.apache.org.下载zookeeper-3.4.5.tar.gz的压缩TAR格式文件.在Linux,Mac,OS X 或任何其他类UNIX系统上,通过以下命令解压发行包
tar -xvzf zookeeper-3.4.5.tar.gz
解压之后,bin目录下.sh为运行在UNIX平台的,.cmd为运行在Windows上的.
conf目录中保存配置文件.lib目录包括Java的jar文件,他们是zookeeper运行所需要的第三方文件支持.
Windows 版本在启动的会出现一闪就关闭的情景,此时,可能是conf目录下没有zoo.cfg文件,需要自己修改或复制zoo_sample.cfg为zoo.cfg,因为启动时会读取这个文件.
mv conf/zoo_simple.cfg conf/zoo.cfg
最好把data目录移出/temp目录,以防止zookeeper填满了根分区,可以再zoo.cfg 文件中修改这个位置
dataDir=/users/me/zookeeper
启动服务器 --使得zookeeper服务器在后台中运行.
bin/zkServer.sh start
启动服务器 --使得zookeeper在前台运行,可便于查看服务器的输出
bin/zkServer.sh start-foreground
启动客户端
bin/zkCli.sh
退出客户端
quit
退出服务器
bin/zkServer.sh stop
查看zookeeper进程
ps -ef | grep zookeeper
查询zookeeper状态
./zkServer.sh status
查看所有的跟节点
ls /
创建节点
create /znode data
创建临时节点
create -e /znode data
创建有序节点
create -s /znode data
删除节点:delete只能删除不包含子节点的节点,如果要删除的节点包含子节点,则删除失败
delete /znode
stat /znode 查看节点状态信息
image.png
1.cZxid 节点创建时的zxid
2.ctime 节点创建时间
3.mZxid 节点最近一次更新时的zxid
4.mtime 节点最近一次更新时间
5.pZxid 操作当前节点的子节点列表的事物ID(包括创建删除子节点)
6.cversion 子节点数据更新次数
7.dataVersion 本节点数据更新次数
8.aclVersion节点ACL(授权信息)的更新次数;
9.ephemeralOwner如果该节点为临时节点,ephemeralOwner值表示与该节点绑定的session id. 如果该节点不是临时节点,ephemeralOwner值为0;
10.dataLength节点数据长度;
11.numChildren子节点个数;
设置监视点,stat命令可以得到一个znode节点属性,并允许在znode上设置监视点,true表示添加监视点
stat /znode true
ls /znode true
获取znode的数据
get /znode
修改数据
set /znode data
会话的状态和生命周期
会话的生命周期是指会话从创建到结束的时期,无论会话正常关闭还是因超时而导致过期.
image.png
一个会话从NOT_CONNECTED状态开始,当zookeeper客户端初始化转换到CONNECTING状态.正常情况下,成功与zookeeper服务器建立连接后,会话转到CONNECTED状态.当客户端与zookeeper服务器断开连接或无法收到服务器响应时,他就会转换回CONNECTING状态并尝试发现其他zookeeper服务器.如果可以发现另一个服务器或重连到原来的服务器,当服务器确认会话有效后,状态又会转换回CONNECTED状态.否则,它将会声明会话过期,然后转换到CLOSED状态.应用也可以显示第关闭会话
注意: 发生网络分区时等待CONNECTING
如果一个客户端与服务器因超时而断开连接,客户端仍然保持CONNECTING状态,如果因网络分区问题导致客户端与zookeeper 集合被隔离而发生连接断开,那么其状态将会一直保持,直到显式地关闭这个会话,或者分区问题修复后,客户端能够获悉zookeeper服务器发送的会话已经过期.发生这种行为是因为zookeeper集合对声明会话超时负责,而不是客户端负责.直到客户端获悉zookeeper会话过期,否则客户端不能声明自己的会话过期,但是可以选择关闭会话.
image.png
zookeeper实现分布式锁
每个进程尝试创建临时znode,名为/lock,如果进行p创建成功了,表示进程p获取了锁,其他进程则监视/lock,并在监视到/lock删除时尝试再次创建该节点来获取锁.
网友评论