zookeeper基础知识以及常用命令

zookeeper简介

1、中间件,提供协调服务。
2、作用于分布式系统,发挥其优势,可以为大数据服务。
3、支持java,提供Java和c语言的客户端API。

什么是分布式系统

1、很多台计算机组成一个整体,一个整体一致对外并且处理同一请求。
2、内部的每台计算机都可以相互通信(rest/rpc)。
3、客户端到服务端的一次请求到响应结束会历经多台计算机。

zookeeper的特性

1、一致性:数据一致性,数据按照顺序分批入库。
2、原子性:事务要么成功要么失败,不会局部化。
3、单一视图:客户端连接集群中的任一zk节点,数据都是一致的。
4、可靠性:每次对zk的操作状态都会保存在服务端。
5、实时性:客户端可以读取到zk服务端的最新数据。

JDK的安装

1、下载linux的JDK1.8.tar,上传至linux服务器。
2、解压缩jdk,配置jdk。
tar -zxvf
sudo vim /etc/profile
source /etc/profile
3、测试:java -version显示版本号。

单机zookeeper安装

1、zookeeper下载、安装以及配置环境变量
2、zookeeper文件夹主要目录介绍
bin:主要的一些运行命令。
config:存放配置文件,其中我们需要修改zk.cfg。
contrib:附加的一些功能。
dist-maven:mvn编译后的目录。
docs:文档。
lib:需要依赖的jar包。
recipes:案例demo代码。
src:源码。

lqq@LAPTOP-VJ6DKVGI:/mnt/d/software/zk/zookeeper-3.4.13$ cd bin/
lqq@LAPTOP-VJ6DKVGI:/mnt/d/software/zk/zookeeper-3.4.13/bin$ ls
README.txt    zkCli.cmd  zkEnv.cmd  zkServer.cmd  zkTxnLogToolkit.cmd
zkCleanup.sh  zkCli.sh   zkEnv.sh   zkServer.sh   zkTxnLogToolkit.sh

lqq@LAPTOP-VJ6DKVGI:/mnt/d/software/zk/zookeeper-3.4.13$ cd conf/
lqq@LAPTOP-VJ6DKVGI:/mnt/d/software/zk/zookeeper-3.4.13/conf$ ls
configuration.xsl  log4j.properties  zoo_sample.cfg
lqq@LAPTOP-VJ6DKVGI:/mnt/d/software/zk/zookeeper-3.4.13/conf$ cd ..
lqq@LAPTOP-VJ6DKVGI:/mnt/d/software/zk/zookeeper-3.4.13$ cd contrib/
lqq@LAPTOP-VJ6DKVGI:/mnt/d/software/zk/zookeeper-3.4.13/contrib$ ls
ZooInspector  fatjar  loggraph  rest  zkfuse  zkperl  zkpython  zktreeutil

lqq@LAPTOP-VJ6DKVGI:/mnt/d/software/zk/zookeeper-3.4.13$ cd dist-maven/
lqq@LAPTOP-VJ6DKVGI:/mnt/d/software/zk/zookeeper-3.4.13/dist-maven$ ls
zookeeper-3.4.13-javadoc.jar       zookeeper-3.4.13-sources.jar.sha1  zookeeper-3.4.13.jar.md5
zookeeper-3.4.13-javadoc.jar.asc   zookeeper-3.4.13-tests.jar         zookeeper-3.4.13.jar.sha1
zookeeper-3.4.13-javadoc.jar.md5   zookeeper-3.4.13-tests.jar.asc     zookeeper-3.4.13.pom
zookeeper-3.4.13-javadoc.jar.sha1  zookeeper-3.4.13-tests.jar.md5     zookeeper-3.4.13.pom.asc
zookeeper-3.4.13-sources.jar       zookeeper-3.4.13-tests.jar.sha1    zookeeper-3.4.13.pom.md5
zookeeper-3.4.13-sources.jar.asc   zookeeper-3.4.13.jar               zookeeper-3.4.13.pom.sha1
zookeeper-3.4.13-sources.jar.md5   zookeeper-3.4.13.jar.asc

lqq@LAPTOP-VJ6DKVGI:/mnt/d/software/zk/zookeeper-3.4.13$ cd docs/
lqq@LAPTOP-VJ6DKVGI:/mnt/d/software/zk/zookeeper-3.4.13/docs$ ls
api                        images             zookeeperAdmin.html                zookeeperOver.html
bookkeeperConfig.html      index.html         zookeeperAdmin.pdf                 zookeeperOver.pdf
bookkeeperConfig.pdf       index.pdf          zookeeperHierarchicalQuorums.html  zookeeperProgrammers.html
bookkeeperOverview.html    javaExample.html   zookeeperHierarchicalQuorums.pdf   zookeeperProgrammers.pdf
bookkeeperOverview.pdf     javaExample.pdf    zookeeperInternals.html            zookeeperQuotas.html
bookkeeperProgrammer.html  jdiff              zookeeperInternals.pdf             zookeeperQuotas.pdf
bookkeeperProgrammer.pdf   linkmap.html       zookeeperJMX.html                  zookeeperReconfig.pdf
bookkeeperStarted.html     linkmap.pdf        zookeeperJMX.pdf                   zookeeperStarted.html
bookkeeperStarted.pdf      recipes.html       zookeeperObservers.html            zookeeperStarted.pdf
bookkeeperStream.html      recipes.pdf        zookeeperObservers.pdf             zookeeperTutorial.html
bookkeeperStream.pdf       releasenotes.html  zookeeperOtherInfo.html            zookeeperTutorial.pdf
broken-links.xml           skin               zookeeperOtherInfo.pdf

lqq@LAPTOP-VJ6DKVGI:/mnt/d/software/zk/zookeeper-3.4.13$ cd lib/
lqq@LAPTOP-VJ6DKVGI:/mnt/d/software/zk/zookeeper-3.4.13/lib$ ls
audience-annotations-0.5.0.jar  jline-0.9.94.LICENSE.txt  log4j-1.2.17.jar          slf4j-api-1.7.25.jar
cobertura                       jline-0.9.94.jar          netty-3.10.6.Final.jar    slf4j-log4j12-1.7.25.jar
jdiff                           log4j-1.2.17.LICENSE.txt  slf4j-1.7.25.LICENSE.txt

lqq@LAPTOP-VJ6DKVGI:/mnt/d/software/zk/zookeeper-3.4.13$ cd recipes/
lqq@LAPTOP-VJ6DKVGI:/mnt/d/software/zk/zookeeper-3.4.13/recipes$ ls
election  lock  queue

lqq@LAPTOP-VJ6DKVGI:/mnt/d/software/zk/zookeeper-3.4.13$ cd src/
lqq@LAPTOP-VJ6DKVGI:/mnt/d/software/zk/zookeeper-3.4.13/src$ ls
LICENSE.txt  NOTICE.txt  c  contrib  docs  java  lastRevision.bat  lastRevision.sh  packages  pom.template  recipes  zookeeper.jute
lqq@LAPTOP-VJ6DKVGI:/mnt/d/software/zk/zookeeper-3.4.13/src$

3、zookeeper配置文件介绍,运行zk
tickTime:用于计算的时间单元。比如session超时:N*tickTime。
initLimit:用于集群,允许从节点连接并同步到master节点的初始化连接时间,以tickTime的倍数来表示。
syncLimit:用于集群,master主节点与从节点之间发送消息,请求和应答时间长度。(心跳机制)
dataDir:必须配置。
dataLogDir:日志目录,如果不配置会和dataDir公用。
clientPort: 连接服务器的端口,默认2181

lqq@LAPTOP-VJ6DKVGI:~$ cd /mnt/d/software/zk/zookeeper
lqq@LAPTOP-VJ6DKVGI:/mnt/d/software/zk/zookeeper$ ls
LICENSE.txt           bin        dist-maven       lib                   zookeeper-3.4.13.jar.asc
NOTICE.txt            build.xml  docs             recipes               zookeeper-3.4.13.jar.md5
README.md             conf       ivy.xml          src                   zookeeper-3.4.13.jar.sha1
README_packaging.txt  contrib    ivysettings.xml  zookeeper-3.4.13.jar

lqq@LAPTOP-VJ6DKVGI:/$ sudo vim /etc/profile
[sudo] password for lqq:
lqq@LAPTOP-VJ6DKVGI:/$ cd /mnt/d/software/zk/zookeeper/
lqq@LAPTOP-VJ6DKVGI:/mnt/d/software/zk/zookeeper$ ls
LICENSE.txt           bin        dist-maven       lib                   zookeeper-3.4.13.jar.asc
NOTICE.txt            build.xml  docs             recipes               zookeeper-3.4.13.jar.md5
README.md             conf       ivy.xml          src                   zookeeper-3.4.13.jar.sha1
README_packaging.txt  contrib    ivysettings.xml  zookeeper-3.4.13.jar
lqq@LAPTOP-VJ6DKVGI:/mnt/d/software/zk/zookeeper$ cd conf/
lqq@LAPTOP-VJ6DKVGI:/mnt/d/software/zk/zookeeper/conf$ ls
configuration.xsl  log4j.properties  zoo_sample.cfg
lqq@LAPTOP-VJ6DKVGI:/mnt/d/software/zk/zookeeper/conf$ cp zoo_sample.cfg zoo.cfg
lqq@LAPTOP-VJ6DKVGI:/mnt/d/software/zk/zookeeper/conf$ ls
configuration.xsl  log4j.properties  zoo.cfg  zoo_sample.cfg
lqq@LAPTOP-VJ6DKVGI:/mnt/d/software/zk/zookeeper/conf$ cd ..
lqq@LAPTOP-VJ6DKVGI:/mnt/d/software/zk/zookeeper$ mkdir dataDir
lqq@LAPTOP-VJ6DKVGI:/mnt/d/software/zk/zookeeper$ mkdir dataLogDir
lqq@LAPTOP-VJ6DKVGI:/mnt/d/software/zk/zookeeper$ pwd
/mnt/d/software/zk/zookeeper
lqq@LAPTOP-VJ6DKVGI:/mnt/d/software/zk/zookeeper$ ls
LICENSE.txt           bin        dataDir     ivy.xml          src                       zookeeper-3.4.13.jar.sha1
NOTICE.txt            build.xml  dataLogDir  ivysettings.xml  zookeeper-3.4.13.jar
README.md             conf       dist-maven  lib              zookeeper-3.4.13.jar.asc
README_packaging.txt  contrib    docs        recipes          zookeeper-3.4.13.jar.md5
lqq@LAPTOP-VJ6DKVGI:/mnt/d/software/zk/zookeeper$ cd dataDir
lqq@LAPTOP-VJ6DKVGI:/mnt/d/software/zk/zookeeper/dataDir$ pwd
/mnt/d/software/zk/zookeeper/dataDir
lqq@LAPTOP-VJ6DKVGI:/mnt/d/software/zk/zookeeper/dataDir$ cd ..
lqq@LAPTOP-VJ6DKVGI:/mnt/d/software/zk/zookeeper$ cd conf/
lqq@LAPTOP-VJ6DKVGI:/mnt/d/software/zk/zookeeper/conf$ sudo vim zoo.cfg
lqq@LAPTOP-VJ6DKVGI:/mnt/d/software/zk/zookeeper/conf$ cd ..
lqq@LAPTOP-VJ6DKVGI:/mnt/d/software/zk/zookeeper$ cd bin/
lqq@LAPTOP-VJ6DKVGI:/mnt/d/software/zk/zookeeper/bin$ ./zkServer.sh start
ZooKeeper JMX enabled by default
Using config: /mnt/d/software/zk/zookeeper/bin/../conf/zoo.cfg
Starting zookeeper ... STARTED
lqq@LAPTOP-VJ6DKVGI:/mnt/d/software/zk/zookeeper/bin$ ./zkServer.sh status
ZooKeeper JMX enabled by default
Using config: /mnt/d/software/zk/zookeeper/bin/../conf/zoo.cfg
Mode: standalone

在这里插入图片描述

zookeeper基本数据模型介绍

1、是一个树形结构,类似于前端开发中的tree.js。
2、zk的数据模型也可以理解为linux/unix的文件目录:/user/local/…。
3、每一个节点都称之为znode,它可以有子节点,也可以有数据。
4、每个节点分为临时节点和永久节点,临时节点在客户端断开后消失。
5、每个zk节点都有各自的版本号,可以通过命令行来显示节点信息。
6、每当节点数据发生变化,那么该节点的版本号会累加(乐观锁)。
7、删除/修改过时节点,版本号不匹配则会报错。
8、每个zk节点存储的数据不宜过大,几k即可。
9、节点可以设置权限acl,可以通过权限来限制用户的访问。

zookeeper数据模型基本操作

1、客户端连接
2、查看znode结构
3、关闭客户端连接

lqq@LAPTOP-VJ6DKVGI:/mnt/d/software/zk/zookeeper/bin$ ./zkCli.sh
Connecting to localhost:2181
2020-11-27 14:15:19,692 [myid:] - INFO  [main:Environment@100] - Client environment:zookeeper.version=3.4.13-2d71af4dbe22557fda74f9a9b4309b15a7487f03, built on 06/29/2018 04:05 GMT
2020-11-27 14:15:19,696 [myid:] - INFO  [main:Environment@100] - Client environment:host.name=LAPTOP-VJ6DKVGI.localdomain
2020-11-27 14:15:19,696 [myid:] - INFO  [main:Environment@100] - Client environment:java.version=1.8.0_271
2020-11-27 14:15:19,698 [myid:] - INFO  [main:Environment@100] - Client environment:java.vendor=Oracle Corporation
2020-11-27 14:15:19,699 [myid:] - INFO  [main:Environment@100] - Client environment:java.home=/mnt/d/software/JDK1.8/jdk1.8.0_271/jre
2020-11-27 14:15:19,699 [myid:] - INFO  [main:Environment@100] - Client environment:java.class.path=/mnt/d/software/zk/zookeeper/bin/../build/classes:/mnt/d/software/zk/zookeeper/bin/../build/lib/*.jar:/mnt/d/software/zk/zookeeper/bin/../lib/slf4j-log4j12-1.7.25.jar:/mnt/d/software/zk/zookeeper/bin/../lib/slf4j-api-1.7.25.jar:/mnt/d/software/zk/zookeeper/bin/../lib/netty-3.10.6.Final.jar:/mnt/d/software/zk/zookeeper/bin/../lib/log4j-1.2.17.jar:/mnt/d/software/zk/zookeeper/bin/../lib/jline-0.9.94.jar:/mnt/d/software/zk/zookeeper/bin/../lib/audience-annotations-0.5.0.jar:/mnt/d/software/zk/zookeeper/bin/../zookeeper-3.4.13.jar:/mnt/d/software/zk/zookeeper/bin/../src/java/lib/*.jar:/mnt/d/software/zk/zookeeper/bin/../conf:.:%JAVA_HOME%/lib/dt.jar:%JAVA_HOME%/lib/tools.jar
2020-11-27 14:15:19,700 [myid:] - INFO  [main:Environment@100] - Client environment:java.library.path=/usr/java/packages/lib/amd64:/usr/lib64:/lib64:/lib:/usr/lib
2020-11-27 14:15:19,701 [myid:] - INFO  [main:Environment@100] - Client environment:java.io.tmpdir=/tmp
2020-11-27 14:15:19,701 [myid:] - INFO  [main:Environment@100] - Client environment:java.compiler=<NA>
2020-11-27 14:15:19,701 [myid:] - INFO  [main:Environment@100] - Client environment:os.name=Linux
2020-11-27 14:15:19,702 [myid:] - INFO  [main:Environment@100] - Client environment:os.arch=amd64
2020-11-27 14:15:19,702 [myid:] - INFO  [main:Environment@100] - Client environment:os.version=4.4.0-19041-Microsoft
2020-11-27 14:15:19,702 [myid:] - INFO  [main:Environment@100] - Client environment:user.name=lqq
2020-11-27 14:15:19,703 [myid:] - INFO  [main:Environment@100] - Client environment:user.home=/home/lqq
2020-11-27 14:15:19,703 [myid:] - INFO  [main:Environment@100] - Client environment:user.dir=/mnt/d/software/zk/zookeeper/bin
2020-11-27 14:15:19,705 [myid:] - INFO  [main:ZooKeeper@442] - Initiating client connection, connectString=localhost:2181 sessionTimeout=30000 watcher=org.apache.zookeeper.ZooKeeperMain$MyWatcher@5ce65a89
Welcome to ZooKeeper!
2020-11-27 14:15:19,727 [myid:] - INFO  [main-SendThread(localhost:2181):ClientCnxn$SendThread@1029] - Opening socket connection to server localhost/127.0.0.1:2181. Will not attempt to authenticate using SASL (unknown error)
JLine support is enabled
2020-11-27 14:15:19,733 [myid:] - INFO  [main-SendThread(localhost:2181):ClientCnxn$SendThread@879] - Socket connection established to localhost/127.0.0.1:2181, initiating session
2020-11-27 14:15:19,753 [myid:] - INFO  [main-SendThread(localhost:2181):ClientCnxn$SendThread@1303] - Session establishment complete on server localhost/127.0.0.1:2181, sessionid = 0x1000009d9260000, negotiated timeout = 30000

WATCHER::

WatchedEvent state:SyncConnected type:None path:null
[zk: localhost:2181(CONNECTED) 0] help
ZooKeeper -server host:port cmd args
        stat path [watch]
        set path data [version]
        ls path [watch]
        delquota [-n|-b] path
        ls2 path [watch]
        setAcl path acl
        setquota -n|-b val path
        history
        redo cmdno
        printwatches on|off
        delete path [version]
        sync path
        listquota path
        rmr path
        get path [watch]
        create [-s] [-e] path data acl
        addauth scheme auth
        quit
        getAcl path
        close
        connect host:port
[zk: localhost:2181(CONNECTED) 1] ls /
[zookeeper]
[zk: localhost:2181(CONNECTED) 3] ls /zookeeper
[quota]
[zk: localhost:2181(CONNECTED) 4] ls /zookeeper/quota
[]
[zk: localhost:2181(CONNECTED) 5] ^Clqq@LAPTOP-VJ6DKVGI:/mnt/d/software/zk/zookeeper/bin$
lqq@LAPTOP-VJ6DKVGI:/mnt/d/software/zk/zookeeper/bin$ pwd
/mnt/d/software/zk/zookeeper/bin
lqq@LAPTOP-VJ6DKVGI:/mnt/d/software/zk/zookeeper/bin$

关闭客户端连接可以使用快捷键Ctrl+c

zookeeper的作用体现

1、master节点选举,主节点挂了以后,从节点就会接收工作,并且保证这个节点是唯一的,这也是所谓首脑模式,从而保证我们的集群是高可用的。
2、统一配置文件管理,即只需要部署一台服务器,则可以把相同的配置文件同步更新到其他所有服务器,此操作在运计算中用的特别多(假设修改了redis统一配置)。
3、发布与订阅,类似消息队列MQ(amq,rmq…),dubbo发布者把数据存在znode上,订阅者会读取这个数据。
4、提供分布式锁,分布式环境中不同进程之间争夺资源,类似于多线程中的锁。
5、集群管理,集群中保证数据的强一致性。

zookeeper常用命令行操作1

1、通过./zkCli.sh打开zk的客户端进行命令行后台
2、ls与ls2 命令

[zk: localhost:2181(CONNECTED) 2] ls /
[zookeeper]
[zk: localhost:2181(CONNECTED) 3] ls /zookeeper
[quota]
[zk: localhost:2181(CONNECTED) 4] ls2 /
[zookeeper]
cZxid = 0x0
ctime = Thu Jan 01 08:00:00 CST 1970
mZxid = 0x0
mtime = Thu Jan 01 08:00:00 CST 1970
pZxid = 0x0
cversion = -1
dataVersion = 0
aclVersion = 0
ephemeralOwner = 0x0
dataLength = 0
numChildren = 1
[zk: localhost:2181(CONNECTED) 5]

ls2命令就相当于ls+stat命令
3、get与stat命令

[zk: localhost:2181(CONNECTED) 5] stat /
cZxid = 0x0
ctime = Thu Jan 01 08:00:00 CST 1970
mZxid = 0x0
mtime = Thu Jan 01 08:00:00 CST 1970
pZxid = 0x0
cversion = -1
dataVersion = 0
aclVersion = 0
ephemeralOwner = 0x0
dataLength = 0
numChildren = 1
get命令会把当前节点所包含的数据给打印出来
[zk: localhost:2181(CONNECTED) 6] get /

cZxid = 0x0//创建了节点后,zookeeper为该节点分配的id
ctime = Thu Jan 01 08:00:00 CST 1970//创建该节点的时间
mZxid = 0x0//修改之后的,zookeeper为该节点分配的id
mtime = Thu Jan 01 08:00:00 CST 1970//该节点被修改后的时间
pZxid = 0x0//子节点的id
cversion = -1//子节点的版本号,子节点发生变化后,该值会发生变化
dataVersion = 0//当前节点的数据版本号,如果当前节点的数据发生变化后,则该值也会变化
aclVersion = 0//权限版本, 权限发生变化时版本号会发生变化
ephemeralOwner = 0x0//
dataLength = 0//数据长度
numChildren = 1//子节点数量

zk特性–session的基本原理
1、客户端与服务端之间的连接存在会话
2、每个会话都可以设置一个超时时间
3、心跳结束,session则过期
4、session过期,则临时节点znode会被抛弃
5、心跳机制:客户端向服务端的ping包请求

zookeeper常用命令行操作2

1、create命令

[zk: localhost:2181(CONNECTED) 21] create /imooc imooc-data//默认创建的是永久的节点
Created /imooc
[zk: localhost:2181(CONNECTED) 22] get /imooc
imooc-data
cZxid = 0x33
ctime = Fri Nov 27 20:56:40 CST 2020
mZxid = 0x33
mtime = Fri Nov 27 20:56:40 CST 2020
pZxid = 0x33
cversion = 0
dataVersion = 0
aclVersion = 0
ephemeralOwner = 0x0//该值可以用来判别一个节点是为临时/永久节点,如果该值为0,则表示该节点为永久节点;如果该值部位0,则表示该节点为临时节点
dataLength = 10
numChildren = 0

[zk: localhost:2181(CONNECTED) 23] create -e /imooc/tmp imooc-data//-e表示创建的是临时节点
Created /imooc/tmp
[zk: localhost:2181(CONNECTED) 24] get /imooc
imooc-data
cZxid = 0x33
ctime = Fri Nov 27 20:56:40 CST 2020
mZxid = 0x33
mtime = Fri Nov 27 20:56:40 CST 2020
pZxid = 0x34
cversion = 1//imooc创建了一个子节点,子节点版本号发生变化,该值加1
dataVersion = 0
aclVersion = 0
ephemeralOwner = 0x0//imooc节点为永久节点,故该值为0
dataLength = 10
numChildren = 1//imooc有一个子节点为tmp

[zk: localhost:2181(CONNECTED) 25] get /imooc/tmp
imooc-data
cZxid = 0x34
ctime = Fri Nov 27 20:58:27 CST 2020
mZxid = 0x34
mtime = Fri Nov 27 20:58:27 CST 2020
pZxid = 0x34
cversion = 0
dataVersion = 0
aclVersion = 0
ephemeralOwner = 0x100013929cf0003//tmp为临时节点,故该值不为0
dataLength = 10
numChildren = 0
重新连接后该临时节点会自动删除,但是删除的时候会有一个时效。
[zk: localhost:2181(CONNECTED) 26] lqq@LAPTOP-VJ6DKVGI:/mnt/d/software/zk/zookeeper/bin$
lqq@LAPTOP-VJ6DKVGI:/mnt/d/software/zk/zookeeper/bin$ ./zkCli.sh
[zk: localhost:2181(CONNECTED) 0] ls /imooc
[tmp]//表明心跳机制还在该有效时间内。
[zk: localhost:2181(CONNECTED) 1] ls /imooc
[]//表明有效时间内没有收到心跳,则自动删除临时节点。
[zk: localhost:2181(CONNECTED) 2]
//创建顺序节点create -s
[zk: localhost:2181(CONNECTED) 2] create -s /imooc/sec seq
Created /imooc/sec0000000001
[zk: localhost:2181(CONNECTED) 3] create -s /imooc/sec seq
Created /imooc/sec0000000002
[zk: localhost:2181(CONNECTED) 4]

2、set命令(修改命令)

[zk: localhost:2181(CONNECTED) 4] get /imooc
imooc-data//初始值
cZxid = 0x33
ctime = Fri Nov 27 20:56:40 CST 2020
mZxid = 0x33
mtime = Fri Nov 27 20:56:40 CST 2020
pZxid = 0x38
cversion = 4
dataVersion = 0
aclVersion = 0
ephemeralOwner = 0x0
dataLength = 10
numChildren = 2
[zk: localhost:2181(CONNECTED) 5] set /imooc new-data
cZxid = 0x33
ctime = Fri Nov 27 20:56:40 CST 2020
mZxid = 0x39
mtime = Fri Nov 27 21:12:36 CST 2020
pZxid = 0x38
cversion = 4
dataVersion = 1
aclVersion = 0
ephemeralOwner = 0x0
dataLength = 8
numChildren = 2
[zk: localhost:2181(CONNECTED) 6] get /imooc
new-data//修改后的新值
cZxid = 0x33
ctime = Fri Nov 27 20:56:40 CST 2020
mZxid = 0x39
mtime = Fri Nov 27 21:12:36 CST 2020
pZxid = 0x38
cversion = 4
dataVersion = 1//数据版本号从0变为1,表示数据已经发生了变化
aclVersion = 0
ephemeralOwner = 0x0
dataLength = 8
numChildren = 2

最常见的乐观锁

[zk: localhost:2181(CONNECTED) 7] set /imooc 123 1//用户A获得当前数据的版本号为1,则进行修改值操作,操作成功,因为当前最新数据版本号值为1
cZxid = 0x33
ctime = Fri Nov 27 20:56:40 CST 2020
mZxid = 0x3a
mtime = Fri Nov 27 21:15:19 CST 2020
pZxid = 0x38
cversion = 4
dataVersion = 2
aclVersion = 0
ephemeralOwner = 0x0
dataLength = 3
numChildren = 2
[zk: localhost:2181(CONNECTED) 8] set /imooc 123 1//用户B获得当前数据的版本号为1,则进行修改值操作,操作失败,因为用户A已经进行修改了,当前数据版本号的最新值为2
version No is not valid : /imooc
[zk: localhost:2181(CONNECTED) 9] set /imooc 123 2//用户B获得当前数据的版本号为2,则进行修改值操作,操作成功,因为数据版本号的最新值为2
cZxid = 0x33
ctime = Fri Nov 27 20:56:40 CST 2020
mZxid = 0x3c
mtime = Fri Nov 27 21:16:03 CST 2020
pZxid = 0x38
cversion = 4
dataVersion = 3
aclVersion = 0
ephemeralOwner = 0x0
dataLength = 3
numChildren = 2

3、delete命令

[zk: localhost:2181(CONNECTED) 21] set /imooc/sec0000000002 123//将sec0000000002的数据版本号从0改为1
cZxid = 0x38
ctime = Fri Nov 27 21:10:19 CST 2020
mZxid = 0x42
mtime = Fri Nov 27 21:24:43 CST 2020
pZxid = 0x38
cversion = 0
dataVersion = 1
aclVersion = 0
ephemeralOwner = 0x0
dataLength = 3
numChildren = 0
[zk: localhost:2181(CONNECTED) 22] get /imooc/sec0000000002
123
cZxid = 0x38
ctime = Fri Nov 27 21:10:19 CST 2020
mZxid = 0x42
mtime = Fri Nov 27 21:24:43 CST 2020
pZxid = 0x38
cversion = 0
dataVersion = 1
aclVersion = 0
ephemeralOwner = 0x0
dataLength = 3
numChildren = 0
[zk: localhost:2181(CONNECTED) 23] delete /imooc/sec0000000002 0//删除数据版本号为0 的sec0000000002会出错,因为此时的sec0000000002的数据版本号已经变为1
version No is not valid : /imooc/sec0000000002
[zk: localhost:2181(CONNECTED) 24] delete /imooc/sec0000000002 1//此时已经删除成功
[zk: localhost:2181(CONNECTED) 27] ls /imooc
[sec0000000004, sec0000000005]
[zk: localhost:2181(CONNECTED) 28]

zk特性–watcher机制
1、针对每个节点的操作,都会有一个监督者->watcher。
2、当监控的某个对象(znode)发生了变化,则触发watcher事件。
3、zk中的watcher是一次性的,出发后立即销毁。
4、父节点、子节点的增删改都能够触发其watcher。
5、针对不同类型的操作,触发的watcher事件也不同:
1)(子)节点创建事件。
2)(子)节点删除事件。
3)(子)节点数据变化事件。

Watcher命令行学习

1、通过get path [watch]设置watcher
2、父节点增删改操作触发watcher
3、子节点增删改操作触发watcher
watcher事件类型一
1、创建父节点触发:NodeCreated

[zk: localhost:2181(CONNECTED) 36] stat /imooc watch
Node does not exist: /imooc
[zk: localhost:2181(CONNECTED) 37] create /imooc 123
WATCHER::Created /imooc
WatchedEvent state:SyncConnected type:NodeCreated path:/imooc

2、修改父节点数据触发:NodeDataChanged

[zk: localhost:2181(CONNECTED) 40] get /imooc watch
456
cZxid = 0x48
ctime = Fri Nov 27 21:44:06 CST 2020
mZxid = 0x49
mtime = Fri Nov 27 21:46:01 CST 2020
pZxid = 0x48
cversion = 0
dataVersion = 1
aclVersion = 0
ephemeralOwner = 0x0
dataLength = 3
numChildren = 0
[zk: localhost:2181(CONNECTED) 41] set /imooc 789
WATCHER::cZxid = 0x48
WatchedEvent state:SyncConnected type:NodeDataChanged path:/imoocctime = Fri Nov 27 21:44:06 CST 2020
mZxid = 0x4a
mtime = Fri Nov 27 21:46:58 CST 2020
pZxid = 0x48
cversion = 0
dataVersion = 2
aclVersion = 0
ephemeralOwner = 0x0
dataLength = 3
numChildren = 0

3、删除父节点触发:NodeDeleted

[zk: localhost:2181(CONNECTED) 42] get /imooc watch
789
cZxid = 0x48
ctime = Fri Nov 27 21:44:06 CST 2020
mZxid = 0x4a
mtime = Fri Nov 27 21:46:58 CST 2020
pZxid = 0x48
cversion = 0
dataVersion = 2
aclVersion = 0
ephemeralOwner = 0x0
dataLength = 3
numChildren = 0
[zk: localhost:2181(CONNECTED) 43] delete /imooc
WATCHER::
WatchedEvent state:SyncConnected type:NodeDeleted path:/imooc

watcher事件类型二
1、ls为父节点设置watcher,创建子节点触发:NodeChildrenChanged。

[zk: localhost:2181(CONNECTED) 48] ls /imooc watch
[]
[zk: localhost:2181(CONNECTED) 49] create /imooc/abc 88
WATCHER::Created /imooc/abc
WatchedEvent state:SyncConnected type:NodeChildrenChanged path:/imooc

2、ls为父节点设置watcher,删除子节点触发:NodeChildrenChanged。

[zk: localhost:2181(CONNECTED) 50] ls /imooc watch
[abc]
[zk: localhost:2181(CONNECTED) 51] delete /imooc/abc
WATCHER::
WatchedEvent state:SyncConnected type:NodeChildrenChanged path:/imooc

3、ls为父节点设置watcher,修改子节点不触发事件。

[zk: localhost:2181(CONNECTED) 53] ls /imooc watch
[xyz]
[zk: localhost:2181(CONNECTED) 54] set /imooc/xyz 9090
cZxid = 0x4f
ctime = Fri Nov 27 21:58:28 CST 2020
mZxid = 0x50
mtime = Fri Nov 27 21:59:05 CST 2020
pZxid = 0x4f
cversion = 0
dataVersion = 1
aclVersion = 0
ephemeralOwner = 0x0
dataLength = 4
numChildren = 0
//将子节点当作父节点设置watcher后,修改才会触发:NodeChildrenChanged。
[zk: localhost:2181(CONNECTED) 55] get /imooc/xyz watch
9090
cZxid = 0x4f
ctime = Fri Nov 27 21:58:28 CST 2020
mZxid = 0x50
mtime = Fri Nov 27 21:59:05 CST 2020
pZxid = 0x4f
cversion = 0
dataVersion = 1
aclVersion = 0
ephemeralOwner = 0x0
dataLength = 4
numChildren = 0
[zk: localhost:2181(CONNECTED) 56] set /imooc/xyz 8080
WATCHER::cZxid = 0x4f
WatchedEvent state:SyncConnected type:NodeDataChanged path:/imooc/xyzctime = Fri Nov 27 21:58:28 CST 2020
mZxid = 0x51
mtime = Fri Nov 27 22:00:43 CST 2020
pZxid = 0x4f
cversion = 0
dataVersion = 2
aclVersion = 0
ephemeralOwner = 0x0
dataLength = 4
numChildren = 0

watcher使用场景
统一资源配置

ACL(access control lists)权限控制

1、针对节点可以设置相关读写等权限,目的是为了保障数据安全性。
2、权限permissions可以指定不同的权限范围以及角色。
ACL命令行
1、getAcl:获取某个节点的acl权限信息。
2、setAcl:设置某个节点的acl权限信息。
3、addauth:输入认证授权信息,注册时输入明文密码(登录),但是在zk的系统里,密码是以加密的形式存在的。

ACL的构成
1、zk的acl通过[scheme🆔permissions]来构成权限列表。
scheme:代表采用的某种权限机制。
id:代表允许访问的用户。
permissions:权限组合字符串。
2、scheme
world:world下只有一个id,即只有一个用户,也就是anyone,那么组合的 写法就是world:anyone:[permissions]。
auth:代表认证登录,需要注册用户有权限就可以,形式为auth:user:password:[permissions]。
digest:需要对密码加密才能访问,组合形式为digest:username:BASE64(SHA1(password)):[permissions]。
简而言之,auth与digest的区别就是,前者明文,后者密文。setAcl /path auth:lee:lee:cdrwa与setAcl /path digest:lee:BASE64(SHA1(password))cdrwa是等价的,在通过addauth digest lee:lee后能操作指定节点的权限。
ip:当设置为ip指定的ip地址,此时限制ip进行访问,比如ip:192.168.1.1:[permissions]。
super:代表超级管理员,拥有所有的权限。
3、permissions
权限字符串缩写crdwa
CREATE:创建子节点。
READ:获取节点/子节点。
DELETE:删除子节点。
WRITE:设置节点数据。
ADMIN:设置权限。
ACL命令行学习一
1)world:anyone:cdrwa(默认权限cdrw代表增删查改)

[zk: localhost:2181(CONNECTED) 15] create /imooc abc
Created /imooc
[zk: localhost:2181(CONNECTED) 16] ls /imooc
[]
[zk: localhost:2181(CONNECTED) 17] create /imooc/abc aa
Created /imooc/abc
[zk: localhost:2181(CONNECTED) 18] getAcl /imooc/abc
'world,'anyone
: cdrwa

[zk: localhost:2181(CONNECTED) 19] setAcl /imooc/abc world:anyone:crwa//设置abc下节点的权限。
cZxid = 0x6
ctime = Fri Nov 27 15:48:45 CST 2020
mZxid = 0x6
mtime = Fri Nov 27 15:48:45 CST 2020
pZxid = 0x6
cversion = 0
dataVersion = 0
aclVersion = 1
ephemeralOwner = 0x0
dataLength = 2
numChildren = 0
[zk: localhost:2181(CONNECTED) 20] getAcl /imooc/abc
'world,'anyone
: crwa//设置权限中没有删除
[zk: localhost:2181(CONNECTED) 21] create /imooc/abc/xyz 123
Created /imooc/abc/xyz
[zk: localhost:2181(CONNECTED) 22] delete /imooc/abc/xyz
Authentication is not valid : /imooc/abc/xyz//没有删除的权限

[zk: localhost:2181(CONNECTED) 23] setAcl /imooc/abc world:anyone:rda
cZxid = 0x6
ctime = Fri Nov 27 15:48:45 CST 2020
mZxid = 0x6
mtime = Fri Nov 27 15:48:45 CST 2020
pZxid = 0x8
cversion = 1
dataVersion = 0
aclVersion = 2
ephemeralOwner = 0x0
dataLength = 2
numChildren = 1
[zk: localhost:2181(CONNECTED) 24] getAcl /imooc/abc
'world,'anyone
: dra
[zk: localhost:2181(CONNECTED) 25] delete /imooc/abc/xyz
[zk: localhost:2181(CONNECTED) 26] ls /imooc/abc
[]

[zk: localhost:2181(CONNECTED) 27] get /imooc/abc
aa
cZxid = 0x6
ctime = Fri Nov 27 15:48:45 CST 2020
mZxid = 0x6
mtime = Fri Nov 27 15:48:45 CST 2020
pZxid = 0xb
cversion = 2
dataVersion = 0
aclVersion = 2
ephemeralOwner = 0x0
dataLength = 2
numChildren = 0
[zk: localhost:2181(CONNECTED) 28] setAcl /imooc/abc world:anyone:a//只能设置权限,不能增删改查
cZxid = 0x6
ctime = Fri Nov 27 15:48:45 CST 2020
mZxid = 0x6
mtime = Fri Nov 27 15:48:45 CST 2020
pZxid = 0xb
cversion = 2
dataVersion = 0
aclVersion = 3
ephemeralOwner = 0x0
dataLength = 2
numChildren = 0
[zk: localhost:2181(CONNECTED) 29] get /imooc/abc
Authentication is not valid : /imooc/abc
[zk: localhost:2181(CONNECTED) 30] set /imooc/zbc 123
Node does not exist: /imooc/zbc
[zk: localhost:2181(CONNECTED) 31]

2)quth:user:pwd:cdrwa
digest:user:BASE64(SHA1(pwd)):cdrwa
addauth digest user:pwd

[zk: localhost:2181(CONNECTED) 1] create /names/imooc imooc
Created /names/imooc
[zk: localhost:2181(CONNECTED) 2] getAcl /names/imooc
'world,'anyone
: cdrwa
[zk: localhost:2181(CONNECTED) 3] setAcl /names/imooc auth:imooc:imooc:cdrwa
Acl is not valid : /names/imooc//没有注册用户
[zk: localhost:2181(CONNECTED) 4] addauth digest imooc:imooc//注册用户后添加权限
[zk: localhost:2181(CONNECTED) 5] setAcl /names/imooc auth:imooc:imooc:cdrwa
cZxid = 0x14
ctime = Fri Nov 27 16:35:59 CST 2020
mZxid = 0x14
mtime = Fri Nov 27 16:35:59 CST 2020
pZxid = 0x14
cversion = 0
dataVersion = 0
aclVersion = 1
ephemeralOwner = 0x0
dataLength = 5
numChildren = 0
[zk: localhost:2181(CONNECTED) 6] getAcl /names/imooc
'digest,'imooc:XwEDaL3J0JQGkRQzM0DpO6zMzZs=
: cdrwa
[zk: localhost:2181(CONNECTED) 7] get /names/imooc
imooc
cZxid = 0x14
ctime = Fri Nov 27 16:35:59 CST 2020
mZxid = 0x14
mtime = Fri Nov 27 16:35:59 CST 2020
pZxid = 0x14
cversion = 0
dataVersion = 0
aclVersion = 1
ephemeralOwner = 0x0
dataLength = 5
numChildren = 0
[zk: localhost:2181(CONNECTED) 8] setAcl /names/imooc auth:jack:jack:cdrwa//修改用户
cZxid = 0x14
ctime = Fri Nov 27 16:35:59 CST 2020
mZxid = 0x14
mtime = Fri Nov 27 16:35:59 CST 2020
pZxid = 0x14
cversion = 0
dataVersion = 0
aclVersion = 2
ephemeralOwner = 0x0
dataLength = 5
numChildren = 0
[zk: localhost:2181(CONNECTED) 9] getAcl /names/imooc
'digest,'imooc:XwEDaL3J0JQGkRQzM0DpO6zMzZs=//和最初用户的用户名和密码保持一致,不能随意更改,还是默认最初创建的用户
: cdrwa
[zk: localhost:2181(CONNECTED) 10] setAcl /names/imooc auth::cdrwa//匿名创建用户,也是和最初创建的用户保持一致
cZxid = 0x14
ctime = Fri Nov 27 16:35:59 CST 2020
mZxid = 0x14
mtime = Fri Nov 27 16:35:59 CST 2020
pZxid = 0x14
cversion = 0
dataVersion = 0
aclVersion = 3
ephemeralOwner = 0x0
dataLength = 5
numChildren = 0
[zk: localhost:2181(CONNECTED) 11] getAcl /names/imooc
'digest,'imooc:XwEDaL3J0JQGkRQzM0DpO6zMzZs=
: cdrwa

使用digest 需要一个用户的密文

[zk: localhost:2181(CONNECTED) 0] create /names/test ttt
Created /names/test
[zk: localhost:2181(CONNECTED) 1] getAcl /names/test
'world,'anyone
: cdrwa
[zk: localhost:2181(CONNECTED) 2] setAcl /names/test digest:imooc:XwEDaL3J0JQGkRQzM0DpO6zMzZs=:cdra//使用密文设置权限
cZxid = 0x1b
ctime = Fri Nov 27 18:53:52 CST 2020
mZxid = 0x1b
mtime = Fri Nov 27 18:53:52 CST 2020
pZxid = 0x1b
cversion = 0
dataVersion = 0
aclVersion = 1
ephemeralOwner = 0x0
dataLength = 3
numChildren = 0
[zk: localhost:2181(CONNECTED) 3] getAcl /names/test
'digest,'imooc:XwEDaL3J0JQGkRQzM0DpO6zMzZs=
: cdra

[zk: localhost:2181(CONNECTED) 4] get /names/test
Authentication is not valid : /names/test
[zk: localhost:2181(CONNECTED) 5] addauth digest imooc:imooc
[zk: localhost:2181(CONNECTED) 6] get /names/test
Authentication is not valid : /names/test//获取数据前,需要限登录
[zk: localhost:2181(CONNECTED) 7] addauth digest imooc:imooc//使用明文登录
[zk: localhost:2181(CONNECTED) 8] get /names/test
ttt
cZxid = 0x1b
ctime = Fri Nov 27 18:53:52 CST 2020
mZxid = 0x1b
mtime = Fri Nov 27 18:53:52 CST 2020
pZxid = 0x1b
cversion = 0
dataVersion = 0
aclVersion = 1
ephemeralOwner = 0x0
dataLength = 3
numChildren = 0

3)ip:192.168.11:cdrwa

[zk: localhost:2181(CONNECTED) 13] create /names/ip ip
Created /names/ip
[zk: localhost:2181(CONNECTED) 14] getAcl /names/ip
'world,'anyone
: cdrwa
[zk: localhost:2181(CONNECTED) 15] setAcl /names/ip ip:10.175.131.123:cdrwa//设置的是windows的ip地址,还没有创建java客户端
cZxid = 0x1f
ctime = Fri Nov 27 19:17:27 CST 2020
mZxid = 0x1f
mtime = Fri Nov 27 19:17:27 CST 2020
pZxid = 0x1f
cversion = 0
dataVersion = 0
aclVersion = 1
ephemeralOwner = 0x0
dataLength = 2
numChildren = 0
[zk: localhost:2181(CONNECTED) 16] getAcl /names/ip
'ip,'10.175.131.123
: cdrwa
[zk: localhost:2181(CONNECTED) 17] get /names/ip//在linux系统中还是没有权限去访问ip
Authentication is not valid : /names/ip

ACL命令行学习二(super超级管理员)
super
1)修改zkServer.sh增加super管理员
2)重启zkServer.sh
在这里插入图片描述

lqq@LAPTOP-VJ6DKVGI:/mnt/d/software/zk/zookeeper/bin$  sudo vim zkServer.sh//去该文件中加入super超级管理员,即在nohup所在行插入"-Dzookeeper.DigestAuthenticationProvider.superDigest=imooc:XwEDaL3J0JQGkRQzM0DpO6zMzZs="
[sudo] password for lqq:
lqq@LAPTOP-VJ6DKVGI:/mnt/d/software/zk/zookeeper/bin$ ./zkServer.sh restart//重启
ZooKeeper JMX enabled by default
Using config: /mnt/d/software/zk/zookeeper/bin/../conf/zoo.cfg
ZooKeeper JMX enabled by default
Using config: /mnt/d/software/zk/zookeeper/bin/../conf/zoo.cfg
Stopping zookeeper ... STOPPED
ZooKeeper JMX enabled by default
Using config: /mnt/d/software/zk/zookeeper/bin/../conf/zoo.cfg
Starting zookeeper ... STARTED
lqq@LAPTOP-VJ6DKVGI:/mnt/d/software/zk/zookeeper/bin$ ./zkCli.sh//连接客户端
[zk: localhost:2181(CONNECTED) 0] ls /names
[imooc, ip]
[zk: localhost:2181(CONNECTED) 1] ls /names/ip//依然没有权限
Authentication is not valid : /names/ip
[zk: localhost:2181(CONNECTED) 2] getAcl /names/ip
'ip,'10.175.131.123
: cdrwa
[zk: localhost:2181(CONNECTED) 3] addauth digest imooc:imooc//登录super管理员之后具有了查看的权限
[zk: localhost:2181(CONNECTED) 4] ls /names/ip
[]
[zk: localhost:2181(CONNECTED) 5] get /names/ip
ip
cZxid = 0x1f
ctime = Fri Nov 27 19:17:27 CST 2020
mZxid = 0x1f
mtime = Fri Nov 27 19:17:27 CST 2020
pZxid = 0x1f
cversion = 0
dataVersion = 0
aclVersion = 1
ephemeralOwner = 0x0
dataLength = 2
numChildren = 0

ACL的常用使用场景
1)开发/测试环境 分离,开发者无权操作测试库的节点,只能看。
2)生产环境上控制指定ip的服务可以访问相关节点,防止混乱。
zookeeper四字命令 Four Letter Words
1)zk可以通过它自身提供的简写命令来和服务器进行交互
2)需要使用到nc命令,安装: yum install nc
3)echo [commond] | nc [ip] [port]
[stat] 查看zk的状态信息,以及是否mode`

lqq@LAPTOP-VJ6DKVGI:/mnt/d/software/zk/zookeeper/bin$ echo stat | nc 10.175.131.123 2181
Zookeeper version: 3.4.13-2d71af4dbe22557fda74f9a9b4309b15a7487f03, built on 06/29/2018 04:05 GMT
Clients:
 /10.175.131.123:53581[0](queued=0,recved=1,sent=0)

Latency min/avg/max: 0/0/7
Received: 104
Sent: 103
Connections: 1
Outstanding: 0
Zxid: 0x26
Mode: standalone
Node count: 9
lqq@LAPTOP-VJ6DKVGI:/mnt/d/software/zk/zookeeper/bin$ echo stat | nc localhost 2181
Zookeeper version: 3.4.13-2d71af4dbe22557fda74f9a9b4309b15a7487f03, built on 06/29/2018 04:05 GMT
Clients:
 /127.0.0.1:53591[0](queued=0,recved=1,sent=0)

Latency min/avg/max: 0/0/7
Received: 105
Sent: 104
Connections: 1
Outstanding: 0
Zxid: 0x27
Mode: standalone
Node count: 9

[ruok] 查看当前zkserver是否启动,返回imok

lqq@LAPTOP-VJ6DKVGI:/mnt/d/software/zk/zookeeper/bin$ echo ruok | nc localhost 2181
imoklqq@LAPTOP-VJ6DKVGI:/mnt/d/software/zk/zookeeper/bin$

[dump]列出未经处理的会话和临时节点

lqq@LAPTOP-VJ6DKVGI:/mnt/d/software/zk/zookeeper/bin$ echo ruok | nc localhost 2181
imoklqq@LAPTOP-VJ6DKVGI:/mnt/d/software/zk/zookeeper/bin$ echo dump | nc localhost 2181
SessionTracker dump:
Session Sets (0):
ephemeral nodes dump:
Sessions with Ephemerals (0)://目前没有创建会话和临时节点
打开另一个窗口,开启./zkServer.sh并创建临时节点tmp-dump
[zk: localhost:2181(CONNECTED) 0] ls /
[names, zookeeper, imooc]
[zk: localhost:2181(CONNECTED) 1] create -e/names/tmp-dump 123
Command failed: java.lang.IllegalArgumentException: Path must start with / character
[zk: localhost:2181(CONNECTED) 2] create -e /names/tmp-dump 123
Created /names/tmp-dump
[zk: localhost:2181(CONNECTED) 3] ls /names
[imooc, tmp-dump, ip]
再次查看时,则可以看到有会话和临时节点
lqq@LAPTOP-VJ6DKVGI:/mnt/d/software/zk/zookeeper/bin$ echo dump | nc localhost 2181
SessionTracker dump:
Session Sets (4):
0 expire at Thu Jan 01 14:09:46 CST 1970:
0 expire at Thu Jan 01 14:09:56 CST 1970:
0 expire at Thu Jan 01 14:10:00 CST 1970:
1 expire at Thu Jan 01 14:10:10 CST 1970:
        0x100013929cf0002
ephemeral nodes dump:
Sessions with Ephemerals (1):
0x100013929cf0002:
        /names/tmp-dump

[conf]查看服务器配置

lqq@LAPTOP-VJ6DKVGI:/mnt/d/software/zk/zookeeper/bin$ echo conf | nc localhost 2181
clientPort=2181
dataDir=/mnt/d/software/zk/zookeeper/dataDir/version-2
dataLogDir=/mnt/d/software/zk/zookeeper/dataLogDir/version-2
tickTime=2000
maxClientCnxns=60
minSessionTimeout=4000
maxSessionTimeout=40000
serverId=0

[cons]展示连接到服务器的客户端信息

lqq@LAPTOP-VJ6DKVGI:/mnt/d/software/zk/zookeeper/bin$ echo cons | nc localhost 2181
 /127.0.0.1:53657[1](queued=0,recved=48,sent=48,sid=0x100013929cf0002,lop=PING,est=1606478992781,to=30000,lcxid=0x3,lzxid=0x29,lresp=22468164,llat=0,minlat=0,avglat=0,maxlat=6)
 /127.0.0.1:53743[0](queued=0,recved=1,sent=0)

[envi]环境变量

lqq@LAPTOP-VJ6DKVGI:/mnt/d/software/zk/zookeeper/bin$ echo envi |nc localhost 2181
Environment:
zookeeper.version=3.4.13-2d71af4dbe22557fda74f9a9b4309b15a7487f03, built on 06/29/2018 04:05 GMT
host.name=LAPTOP-VJ6DKVGI.localdomain
java.version=1.8.0_271
java.vendor=Oracle Corporation
java.home=/mnt/d/software/JDK1.8/jdk1.8.0_271/jre
java.class.path=/mnt/d/software/zk/zookeeper/bin/../build/classes:/mnt/d/software/zk/zookeeper/bin/../build/lib/*.jar:/mnt/d/software/zk/zookeeper/bin/../lib/slf4j-log4j12-1.7.25.jar:/mnt/d/software/zk/zookeeper/bin/../lib/slf4j-api-1.7.25.jar:/mnt/d/software/zk/zookeeper/bin/../lib/netty-3.10.6.Final.jar:/mnt/d/software/zk/zookeeper/bin/../lib/log4j-1.2.17.jar:/mnt/d/software/zk/zookeeper/bin/../lib/jline-0.9.94.jar:/mnt/d/software/zk/zookeeper/bin/../lib/audience-annotations-0.5.0.jar:/mnt/d/software/zk/zookeeper/bin/../zookeeper-3.4.13.jar:/mnt/d/software/zk/zookeeper/bin/../src/java/lib/*.jar:/mnt/d/software/zk/zookeeper/bin/../conf:/mnt/d/software/zk/zookeeper/bin/../build/classes:/mnt/d/software/zk/zookeeper/bin/../build/lib/*.jar:/mnt/d/software/zk/zookeeper/bin/../lib/slf4j-log4j12-1.7.25.jar:/mnt/d/software/zk/zookeeper/bin/../lib/slf4j-api-1.7.25.jar:/mnt/d/software/zk/zookeeper/bin/../lib/netty-3.10.6.Final.jar:/mnt/d/software/zk/zookeeper/bin/../lib/log4j-1.2.17.jar:/mnt/d/software/zk/zookeeper/bin/../lib/jline-0.9.94.jar:/mnt/d/software/zk/zookeeper/bin/../lib/audience-annotations-0.5.0.jar:/mnt/d/software/zk/zookeeper/bin/../zookeeper-3.4.13.jar:/mnt/d/software/zk/zookeeper/bin/../src/java/lib/*.jar:/mnt/d/software/zk/zookeeper/bin/../conf:.:%JAVA_HOME%/lib/dt.jar:%JAVA_HOME%/lib/tools.jar
java.library.path=/usr/java/packages/lib/amd64:/usr/lib64:/lib64:/lib:/usr/lib
java.io.tmpdir=/tmp
java.compiler=<NA>
os.name=Linux
os.arch=amd64
os.version=4.4.0-19041-Microsoft
user.name=lqq
user.home=/home/lqq
user.dir=/mnt/d/software/zk/zookeeper/bin

[mntr]监控zk健康信息

lqq@LAPTOP-VJ6DKVGI:/mnt/d/software/zk/zookeeper/bin$ echo mntr | nc localhost 2181
zk_version      3.4.13-2d71af4dbe22557fda74f9a9b4309b15a7487f03, built on 06/29/2018 04:05 GMT
zk_avg_latency  0
zk_max_latency  7
zk_min_latency  0
zk_packets_received     204
zk_packets_sent 203
zk_num_alive_connections        2
zk_outstanding_requests 0
zk_server_state standalone
zk_znode_count  10//关闭当前会话时,该数据将减1。该数据表示临时节点和永久节点的数量的总和。
zk_watch_count  0
zk_ephemerals_count     1//关闭当前会话时,临时节点数量也将减1 
zk_approximate_data_size        106
zk_open_file_descriptor_count   28
zk_max_file_descriptor_count    65536
zk_fsync_threshold_exceed_count 0

[wchs]展示watch的信息

lqq@LAPTOP-VJ6DKVGI:/mnt/d/software/zk/zookeeper/bin$ echo wchs |nc localhost 2181
0 connections watching 0 paths
Total watches:0//当没有设置watch时该数量为0
lqq@LAPTOP-VJ6DKVGI:/mnt/d/software/zk/zookeeper/bin$ echo wchs |nc localhost 2181
1 connections watching 1 paths//利用命令get  /names watch后该数量变为1
Total watches:1

[wchc]与[wchp]session与watch及path与watch信息

lqq@LAPTOP-VJ6DKVGI:/mnt/d/software/zk/zookeeper/bin$ echo wchc | nc localhost 2181
wchc is not executed because it is not in the whitelist.
lqq@LAPTOP-VJ6DKVGI:/mnt/d/software/zk/zookeeper/bin$ echo wchp | nc localhost 2181
wchp is not executed because it is not in the whitelist.
默认情况下对这两个命令时不开放的,所以需要进行一个命令的设置
在zoo.cfg文件末尾添加如下内容即可:
# 将需要的命令添加到白名单中
4lw.commands.whitelist=stat, ruok, conf, isro
# 将所有命令添加到白名单中
4lw.commands.whitelist=*

lqq@LAPTOP-VJ6DKVGI:/mnt/d/software/zk/zookeeper/bin$ cd ..
lqq@LAPTOP-VJ6DKVGI:/mnt/d/software/zk/zookeeper$ cd conf/
lqq@LAPTOP-VJ6DKVGI:/mnt/d/software/zk/zookeeper/conf$ ls
configuration.xsl  log4j.properties  zoo.cfg  zoo_sample.cfg
lqq@LAPTOP-VJ6DKVGI:/mnt/d/software/zk/zookeeper/conf$ sudo vim zoo.cfg
[sudo] password for lqq:
lqq@LAPTOP-VJ6DKVGI:/mnt/d/software/zk/zookeeper/conf$ cd ../bin
lqq@LAPTOP-VJ6DKVGI:/mnt/d/software/zk/zookeeper/bin$ ./zkServer.sh restart
ZooKeeper JMX enabled by default
Using config: /mnt/d/software/zk/zookeeper/bin/../conf/zoo.cfg
ZooKeeper JMX enabled by default
Using config: /mnt/d/software/zk/zookeeper/bin/../conf/zoo.cfg
Stopping zookeeper ... STOPPED
ZooKeeper JMX enabled by default
Using config: /mnt/d/software/zk/zookeeper/bin/../conf/zoo.cfg
Starting zookeeper ... STARTED
lqq@LAPTOP-VJ6DKVGI:/mnt/d/software/zk/zookeeper/bin$ echo wchc | nc localhost 2181
0x100013929cf0003
        /names
        /imooc

lqq@LAPTOP-VJ6DKVGI:/mnt/d/software/zk/zookeeper/bin$ echo wchp | nc localhost 2181
/names
        0x100013929cf0003
/imooc
        0x100013929cf0003
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值