其他分享
首页 > 其他分享> > zookeeper入门

zookeeper入门

作者:互联网

作者:threedayman

Zookeeper是什么

Zookeeper是一个提供了配置信息、命名服务、分布式同步、集群管理得集中式服务。为分布式服务提供了一个通用解决方案。

Zookeeper安装使用体验

拉取zookeeper镜像文件

docker pull zookeeper

查看镜像文件

docker images

启动zookeeper镜像

docker run --name myZookeeper -d zookeeper:latest

查看运行docker镜像

docker ps

进入对应得容器,其中得d4b2b44e22a2是通过上面一条命令获取到得

docker exec -it d4b2b44e22a2 /bin/bash

通过客户端连接到zookeeper

./zkCli.sh

查询常用命令

[zk: localhost:2181(CONNECTED) 7] 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. create 创建znode节点
 create /persistent_node Created /persistent_node         创建持久节点
 create -e /ephemeral_node mydata Created /ephemeral_node 创建临时节点
 create -s /persistent_sequential_node mydata Created /persistent_sequential_node0000000176                     创建持久顺序节点
 create -s -e /ephemeral_sequential_node mydata Created /ephemeral_sequential_node0000000174                      创建临时顺序节点
  1. delete 删除指定路径得节点
delete /config/topics/test
  1. deleteall 删除指定路径下得所有节点
deleteall /config
  1. get 获取指定路径节点数据
get /latest_producer_id_block
{"version":1,"broker":0,"block_start":"0","block_end":"999"}
  1. get -s 获取指定节点得stat 数据
get -s /latest_producer_id_block
{"version":1,"broker":0,"block_start":"0","block_end":"999"} cZxid = 0x90000009a ctime = Sat Jul 28 08:14:09 UTC 2018 mZxid = 0x9000000a2 mtime = Sat Jul 28 08:14:12 UTC 2018 pZxid = 0x90000009a cversion = 0 dataVersion = 1 aclVersion = 0 ephemeralOwner = 0x0 dataLength = 60 numChildren = 0
  1. getAcl 获取指定路径得ACL权限
getAcl /acl_test
'world,'anyone
: cdrwa
  1. getAllChildrenNumber 获取指定节点下得所有子节点数量
getAllChildrenNumber /zookeeper
5
  1. getEphemerals 获取当前session下创建得所有临时节点
getEphemerals
[/test-get-ephemerals1, /test-get-ephemerals]
  1. history 查询最近运行过的11个命令
[zk: localhost:2181(CONNECTED) 11] history
1 - getAcl /test
2 - delete /test
3 - ls /test
4 - deleteall /test
5 - getAllChildrenNumber /zookeeper
6 - create -e /test-get-ephemerals
7 - getEphemerals
8 - getEphemerals /test-get-ephemerals
9 - create -e /test-get-ephemerals1
10 - getEphemerals
11 - history
  1. ls 展示指定路径下得子节点
[zk: localhost:2181(CONNECTED) 13] ls /
[test-get-ephemerals, test-get-ephemerals1, zookeeper]
  1. quit 退出CLI窗口
[zk: localhost:2181(CONNECTED) 14] quit

Zookeeper核心概念介绍

zookeeper数据模型

zookeeper有一个像分布式文件系统得层级命名空间,唯一有不同得是命名空间中得节点中可以拥有数据。就好像文件系统一个既是文件夹又是文件得路径。

ZNode

在zookeeper中得节点被成为ZNode,ZNode管理stat得结构,包括版本号、数据变更、acl控制、时间戳等信息,下面我们来介绍下ZNode一些值得了解得特性。

Watches

客户端可以给znode设置一个watche,任何znode改变会触发watch并且会清楚掉这个watch。当watch被触发,zookeeper会给对应client发送通知消息。

Data Access

zookeeper通过Access Control List (ACL)方式限制谁可以做什么。

Ephemeral Nodes

临时节点,创建该节点得session活跃着,临时节点就存在,一旦创建该节点得session结束了,该临时节点就会被删除。由于这个特性所以临时节点不允许有子节点。

Sequence Nodes

顺序节点,zookeeper创建一个节点时在末尾加上一个单调递增得计数,这个计数值对于父节点来说是唯一得。计数得格式为%010d。

Time in ZooKeeper

zookeeper拥有多种时间追踪方式

ZooKeeper Stat Structure

zookeeper stat structure 由以下属性组成

ZooKeeper Sessions

zookeeper客户端会和zookeeper服务端建立一个session。下图展示了客户端连接状态的转换。
在这里插入图片描述

客户端创建session需要一个连接信息,多个zookeeper服务通过逗号分隔如 “127.0.0.1:3000,127.0.0.1:3001,127.0.0.1:3002”。客户端会随机挑选一个zookeeper服务去连接,如果失败,客户端会挑选下一个zookeeper服务进行连接,直到最终连接建立。

客户端和zookeeper 服务建立连接后会为session建立一个64位的sessionId并通知给客户端,如果客户端由于网络原因和原先的zookeeper服务器断开了连接,客户端会和另外一台zookeeper服务器尝试建立连接,连接握手时客户端会将sessionId信息发送过去,为了安全客户端会带上服务器给对应session生成的密码,这个密码在任何zookeeper 服务中都可以得到验证,这样客户端和新的zookeeper服务器建立和连接,sessionid还是之前建立的那一个。

session timeout 要求最小2倍的tickTime 最大20倍的tickTime。如果客户端没有 在session timeout周期内和zookeeper服务器进行通信那么连接状态将会变为 “expired”。

ZooKeeper Watches

zookeeper中所有读操作 getData(), getChildren(), exists() 都有一个设置watche的选项。watch定义:当被watch的znode发生改变时,会有一次触发,发送watch事件到设置watch的客户端。在watch定义中有三个核心点。

关于watch的几个注意点

参考

zookeeper官方文档

标签:入门,zookeeper,watch,path,znode,节点,客户端
来源: https://blog.csdn.net/weixin_44433834/article/details/118894958