Zookeeper

Zookeeper 简介、安装、基本操作

2021-05-21  本文已影响0人  泡水鱼干

ZooKeeper

ZooKeeper 由java开发

Zookeeper Service

截屏2021-05-21 19.04.50.png

数据存储

截屏2021-05-21 19.04.56.png

ZooKeeper为C/S应用

分布式协调服务

应用案例

同类产品

单机版安装

客户端连接

zkCli.sh -server 127.0.0.1:2181`

服务端状态

sundeMacBook-Pro:~ sun$ zkServer status
ZooKeeper JMX enabled by default
Using config: /usr/local/etc/zookeeper/zoo.cfg
Client port found: 2181. Client address: localhost. Client SSL: false.
Mode: standalone

CLI-操作指令

指令 描述
ls 获取子节点。
create 在 ZooKeeper 中的某个位置创建一个节点。
delete 删除节点。
exists 测试节点是否存在。
get data 从指定节点读取数据。
set data 将数据存入指定节点。
get children c查询指定节点之下所有的子节点。
sync 等待数据进行同步。
# 指令语法参照
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] 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 val path
        stat [-w] path
        sync path
        version 

Java API

方法 描述
connect 连接到 ZooKeeper 集合
create 创建 znode
exists 检查 znode 是否存在及其信息
get data 从特定的 znode 获取数据
set data 在特定的 znode 中设置数据
get children 获取特定的 znode 中的所有子节点
delete 删除指定的 znode 及其所有子项
close 关闭连接

第三方客户端

java

zkClient

<dependency>
    <groupId>com.101tec</groupId>
    <artifactId>zkclient</artifactId>
    <version>0.11</version>
</dependency>

curator

<dependency>
  <groupId>org.apache.curator</groupId>
  <artifactId>curator-framework</artifactId>
  <version>4.0.0</version>
</dependency>
<dependency>
  <groupId>org.apache.curator</groupId>
  <artifactId>curator-recipes</artifactId>
  <version>4.0.0</version>
</dependency>

zookeeper

<dependency>
  <groupId>org.apache.zookeeper</groupId>
  <artifactId>zookeeper</artifactId>
  <version>3.4.8</version>
</dependency>

PHP

参考:https://www.jianshu.com/p/82e0925ed37f

核心概念

session

数据模型

截屏2021-05-21 19.04.56.png

层次空间名称

znode

znode-命名规范

znode-节点类型

znode-数据构成

znode-元数据 stat 结构

zxid:事务ID

[zk: localhost:2181(CONNECTED) 21] get -s /zk_test
888
cZxid = 0x4600000009
ctime = Fri May 21 15:37:20 CST 2021
mZxid = 0x4600000009
mtime = Fri May 21 15:37:20 CST 2021
pZxid = 0x4600000009
cversion = 0
dataVersion = 0
aclVersion = 0
ephemeralOwner = 0x0
dataLength = 3
numChildren = 0
Stat 结构字段 描述
cZxid 创建该节点的 zxid(事务 id)
mZxid 最后修改该节点的 zxid
pZxid znode 最后更新的子节点 zxid
ctime 该节点的创建时间
mtime 该节点的最后修改时间
dataVersion 该节点数据被修改的次数
cversion 该节点的子节点变更次数
ephemeralOwner 临时节点的所有者会话 id,如果不是临时节点,则为 0
dataLength 该节点的数据的长度
numChildren 子节点数
aclVersion 访问控制列表变更次数

Zookeeper 中的时间

多种方式跟踪时间:

访问控制

设置访问控制列表:https://zookeeper.apache.org/doc/current/zookeeperProgrammers.html#sc_ZooKeeperAccessControl

zookeeper ACL权限控制,使用scheme:id:perm来标识

ZooKeeper的权限控制是基于每个znode节点的,需要对每个节点设置权限,每个znode支持设置多种权限控制方案和多个权限,子节点不会继承父节点的权限,客户端无权访问某节点,但可能可以访问它的子节点。

# 获取权限
[zk: localhost:2181(CONNECTED) 22] getAcl /zk_test 
'world,'anyone
: cdrwa
# 设置权限
[zk: localhost:2181(CONNECTED) 23] setAcl /zk_test world:anyone:drwa
[zk: localhost:2181(CONNECTED) 24] getAcl /zk_test 
'world,'anyone
: drwa
# 创建节点设置权限
[zk: localhost:2181(CONNECTED) 38] create -c /acl_test 123 world:anyone:drca
Created /acl_test
[zk: localhost:2181(CONNECTED) 39] getAcl /acl_test 
'world,'anyone
: cdra

Watch 监听机制

客户端可以在 znodes 上设置 watch,监听 znode 的变化。

截屏2021-05-21 19.04.56.png

比如,客户端可以发送watch命令,监听指定节点/app1/p_1的动态

# 涉及watch的cli命令
config [-c] [-w] [-s]
get [-s] [-w] path
ls [-s] [-w] [-R] path
stat [-w] path
# 比如通过 get 监听 /a
[zk: localhost:2181(CONNECTED) 50] get /a -w
# watch 对应API
getData()
getChildren()
exists()

两类 watch

触发 watch 事件

watch 重要特性

watch 注意事项

Zookeeper 特性

上一篇下一篇

猜你喜欢

热点阅读