1.1Zookeeper的安装和节点下的命令操作及事件监听

3. Zookeeper 实战

3.1. zookeeper安装

**Step1:**配置JAVA环境,检验环境:是否配置JDK,因为Zookeeper是java语言编写的依赖JDK环境

java -version 

Step2: 下载解压 zookeeper

wget https://mirror.bit.edu.cn/apache/zookeeper/zookeeper-3.5.8/apache-zookeeper-3.5.8-bin.tar.gz 
tar -zxvf apache-zookeeper-3.5.8-bin.tar.gz 
cd  apache-zookeeper-3.5.8-bin 

Step3: 重命名配置文件 zoo_sample.cfg

 cp zoo_sample.cfg  zoo.cfg  

Step3.1: 在zoo.cfg 中添加stat 指令白名单

4lw.commands.whitelist=stat 或 
#开启四字命令 
4lw.commands.whitelist=* 

Step4: 启动zookeeper

# 可以通过 bin/zkServer.sh  来查看都支持哪些参数  
bin/zkServer.sh start conf/zoo.cfg 

Step5: 检测是否启动成功

echo stat | nc 192.168.109.200  

Step6: 连接服务器

bin/zkCli.sh -server ip:port 
3.2. 使用命令行操作zookeeper

输入命令 help 查看zookeeper所支持的所有命令:

[zk: localhost:2181(CONNECTED) 80] help
ZooKeeper -server host:port cmd args
	addauth scheme auth
	close 
	config [-c] [-w] [-s]
	connect host:port
	create [-s] [-e] [-c] [-t ttl] path [data] [acl]
	delete [-v version] path
	deleteall path
	delquota [-n|-b] path
	get [-s] [-w] path
	getAcl [-s] path
	history 
	listquota path
	ls [-s] [-w] [-R] path
	ls2 path [watch]
	printwatches on|off
	quit 
	reconfig [-s] [-v version] [[-file path] | [-members serverID=host:port1:port2;port3[,...]*]] | [-add serverId=host:port1:port2;port3[,...]]* [-remove serverId[,...]*]
	redo cmdno
	removewatches path [-c|-d|-a] [-l]
	rmr path
	set [-s] [-v version] path data
	setAcl [-s] [-v version] [-R] path acl
	setquota -n|-b val path
	stat [-w] path
	sync path
1、 创建zookeeper 节点命令
create [-s] [-e] [-c] [-t ttl] path [data] [acl]

中括号为可选项,没有则默认创建持久化节点

-s: 顺序节点

-e: 临时节点

-c: 容器节点

-t: 可以给节点添加过期时间,默认禁用,需要通过系统参数启用

(-Dzookeeper.extendedTypesEnabled=true, znode.container.checkIntervalMs : (Java system property only) New in 3.5.1: The time interval in milliseconds for each check of candidate container and ttl nodes. Default is “60000”.)

创建节点:

create  /test-node some-data

如上,没有加任何可选参数,创建的就是持久化节点

查看节点:

get  /test-node

修改节点数据:

set /test-node some-data-changed

查看节点状态信息:

stat /test-node 

在这里插入图片描述

Stat

  • cZxid:创建znode的事务ID(Zxid的值)。
  • mZxid:最后修改znode的事务ID。
  • pZxid:最后添加或删除子节点的事务ID(子节点列表发生变化才会发生改变)。
  • ctime:znode创建时间。
  • mtime:znode最近修改时间。
  • dataVersion:znode的当前数据版本。
  • cversion:znode的子节点结果集版本(一个节点的子节点增加、删除都会影响这个版本)。
  • aclVersion:表示对此znode的acl版本。
  • ephemeralOwner:znode是临时znode时,表示znode所有者的 session ID。 如果znode不是临时znode,则该字段设置为零。
  • dataLength:znode数据字段的长度。
  • numChildren:znode的子znode的数量。

查看节点状态信息同时查看数据

get -s /test-node

根据状态数据中的版本号有并发修改数据实现乐观锁的功能

比如: 客户端首先获取版本信息, get -s /node-test

在这里插入图片描述
/test-node 当前的数据版本是 1 , 这时客户端 用 set 命令修改数据的时候可以把版本号带上

set -v 1 /test-node changed

如果在执行上面 set命令前, 有人修改了数据,zookeeper 会递增版本号, 这个时候,如果再用以前的版本号去修改,将会导致修改失败,报如下错误

version No is not valid : /test-node

创建子节点, 这里要注意,zookeeper是以节点组织数据的,没有相对路径这么一说,所以,所有的节点一定是以 / 开头。

create /test-node/test-sub-node

查看子节点信息,比如根节点下面的所有子节点, 加一个大写 R 可以查看递归子节点列表

ls -R /

创建临时节点 :create 后跟一个 -e 创建临时节点 , 临时节点不能创建子节点

create -e /ephemeral data 

创建序号节点,加参数 -s

// 创建父目录,单纯为了分类,非必须
create    /seq-parent  data 
// 创建顺序节点。顺序节点将再seq-parent 目录下面,顺序递增
create -s /seq-parent/  data 
// 添加前缀
create -s /seq-parent/a  data 

创建临时顺序节点,其它增删查改和其他节点无异

create -s -e  /ephemeral-node/前缀-
2、事件监听机制:

针对节点的监听:一定事件触发,对应的注册立刻被移除,所以事件监听是一次性的

get  -w  /path   // 注册监听的同时获取数据
stat -w /path   // 对节点进行监听,且获取元数据信息

针对目录的监听,目录的变化,会触发事件,且一旦触发,对应的监听也会被移除,后续对节点的创建没有触发监听事件

ls -w /path

针对递归子目录的监听

ls -R -w /path : #-R 区分大小写,一定用大写 

如下对/test 节点进行递归监听,但是每个目录下的目录监听也是一次性的,如第一次在/test 目录下创建节点时,触发监听事件,第二次则没有,同样,因为时递归的目录监听,所以在/test/sub0下进行节点创建时,触发事件,但是再次创建/test/sub0/subsub1节点时,没有触发事件。
在这里插入图片描述

Zookeeper事件类型:

​ None: 连接建立事件

​ NodeCreated: 节点创建

​ NodeDeleted: 节点删除

​ NodeDataChanged:节点数据变化

​ NodeChildrenChanged:子节点列表变化

​ DataWatchRemoved:节点监听被移除

​ ChildWatchRemoved:子节点监听被移除

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

苹水相峰

你的打赏是对我最大的肯定

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值