zookeeper 基础使用
一、 下载 zookeeper , 网址 https://zookeeper.apache.org/releases.html
二、 解压后,复制创建配置文件
在 conf 目录下有一个 zoo_sample.cfg 的示例,
cp zoo_sample.cfg zoo.cfg
三、启动服务端
./bin/zkServer.sh start ./conf/zoo.cfg
-- 运行结果启动成功
zb:zookeeper-3.7.0 zhangbin-beijing$ ./bin/zkServer.sh start ./conf/zoo.cfg
ZooKeeper JMX enabled by default
Using config: ./conf/zoo.cfg
Starting zookeeper ... STARTED
四、启动客户端
./bin/zkClient.sh -server 127.0.0.1:2181
-- 运行结果
[zk: 127.0.0.1:2181(CONNECTED) 0]
五、 使用 help 查看命令
[zk: 127.0.0.1:2181(CONNECTED) 0] help ZooKeeper -server host:port -client-configuration properties-file cmd args addWatch [-m mode] path # optional mode is one of [PERSISTENT, PERSISTENT_RECURSIVE] - default is PERSISTENT_RECURSIVE 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 [-b batch size] delquota [-n|-b|-N|-B] path get [-s] [-w] path getAcl [-s] path getAllChildrenNumber path getEphemerals path history listquota path ls [-s] [-w] [-R] path 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] set [-s] [-v version] path data setAcl [-s] [-v version] [-R] path acl setquota -n|-b|-N|-B val path stat [-w] path sync path version whoami
服务和客户端都启动成功后, 我们就可以来看看一些简单的操作了
一、持久化节点
1.1、 创建 zookeeper 节点命令
create [‐s] [‐e] [‐c] [‐t ttl] path [data] [acl] /* 中括号为可选项,没有则默认创建持久化节点 -s: 顺序节点 -e: 临时节点 -c: 容器节点 -t: 可以给节点添加过期时间,默认禁用,需要通过系统参数启用 节点使用绝对路径 */ create /test-node som-data
1.2、查看节点, 修改节点
set /test-node hello get -s /test-node // -s 查看并且带状态 stat /teset-node //查看状态
[zk: 127.0.0.1:2181(CONNECTED) 11] get -s /test-node hello //值 cZxid = 0x2 //创建 znode 的事务ID ctime = Fri May 06 11:36:30 CST 2022 //znode创建时间 mZxid = 0x3 //最后修改znode的事务ID mtime = Fri May 06 11:36:55 CST 2022 //znode最近修改时间 pZxid = 0x2 //最后添加或删除子节点的事务ID cversion = 0 //znode的子节点结果集版本 dataVersion = 1 //znode的当前数据版本 aclVersion = 0 //znode的 ACL 版本 ephemeralOwner = 0x0 //znode是临时node时,表示znode所有者的session ID, 如果不是临时node,则字段为0 dataLength = 5 //znode数据字段的长度 numChildren = 0 //znode的子znode 的数量
1.3、 根据 dataVersion 版本号实现乐观锁
//先对/test-node 进行修改,数据版本变为2 set /test-node hello world //再指定在版本1的基础上进行修改 [zk: 127.0.0.1:2181(CONNECTED) 13] set -v 1 /test-node lockstat version No is not valid : /test-node //修改失败,重试在版本2的基础上修改,成功 [zk: 127.0.0.1:2181(CONNECTED) 14] set -v 2 /test-node lockstat [zk: 127.0.0.1:2181(CONNECTED) 15] get /test-node lockstat
1.4、 查看节点
ls /test-node ls -R /
二、临时节点
2.1、 创建临时节点, 临时节点不能创建子节点
create -e /ephemeral data
get /ephemeral
set /ephemeral hello
2.2、 创建顺序节点 -s , 创建临时顺序节点再加 -e
create /seq-parent data //为了分类,创建一个父节点 create -s /seq-parent/ data //顺序节点递增 -> Created /seq-parent/0000000000 get /seq-parent/0000000000 -> data
create -s /seq-parent/x seq-data //带前缀的书序节点
-> Created /seq-parent/x0000000001
create -s /seq-parent/y seq-data
-> Created /seq-parent/y0000000002
三、容器节点
3.1、 创建容器节点
  容器节点主要用来容纳字节点,如果没有给其创建子节点,容器节点表现和持久化节点一样,如果给容器节点创建了子节点,后续又把子节点清空,容器节点也会被zookeeper删除。
create -c /container
四、事件监听机制
    针对节点的监听:一定事件触发,对应的注册立刻被移除,所以事件监听是一次性的
get -w /path //注册监听的同时获取数据 stat -w /path //对节点进行监听,且获取元数据信息
ls -R -w /path //-R区分大小写, 一定用大写, 针对递归子目录的监听,每个目录的监听是一次性的,但是child1 和 child2 是两个监听,触发完 child1 后child1失效,但还可以触发child2
create /path get -w /path set /path /root -> WATCHER:: -> WatchedEvent state:SyncConnected type:NodeDataChanged path:/path
Zookeeper事件类型:
  None: 连接建立事件
  NodeCreated: 节点创建
  NodeDeleted: 节点删除
  NodeDataChanged:节点数据变化
  NodeChildrenChanged:子节点列表变化
  DataWatchRemoved:节点监听被移除
  ChildWatchRemoved:子节点监听被移除
 
                    
                     
                    
                 
                    
                 
                
            
         
         浙公网安备 33010602011771号
浙公网安备 33010602011771号