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:子节点监听被移除
posted @ 2022-05-06 14:19  长弓射大狗  阅读(182)  评论(0)    收藏  举报