Zookeeper快速入门

 

 

Zookeeper快速入门

 

一、安装

  1. 安装

 环境要求:必须要有jdk环境

   从官网https://archive.apache.org/dist/zookeeper/下载最新的版本,如:zookeeper-3.4.9.tar.gz

如果是windows,解压即可;
如果是linux运行tar –zxvf zookeeper-3.4.9.tar.gz ,解压。

解压之后如下:

 

  1. 配置

需将conf/ zoo_sample.cfg  复制一份名为zoo.cfg的配置文件。其中重要的几项配置:

clientPort=2181       端口

dataDir=D:/logs/zookeeper/data   快照存放位置

dataLogDir=D:/logs/zookeeper/log         日志存放位置

snapCount=3   执行多少次事物就生成快照文件

 

  1. 运行服务端

如果是windows ,双击zkServer.cmd

如果是linux,运行sh zkServer.sh

看到如下就代表成功

 

 

或者通过jps查看,如果有QuorumPeerMain就代表成功

 

 

  1. 客户端连接服务端

 

如果是windows ,双击zkCli.cmd,或者在命令窗口运行 zkCli.cmd  -server ip:port

其中ip:port 为服务端的ip和端口,如127.0.0.1:2181

如果是linux,运行sh zkCli.sh  -server ip:port

 

 

二、使用

创建节点

create /node1 v1    (其中node1为节点名称,v1为节点的值)

 

 

 

修改节点

set /node1 v11  (其中node1为节点名称,v11为需要修改节点的值)

 

 

删除节点

delete /node2    (其中node2为节点名称)

 

 

如果/node1下面有子节点,那么会报错,需要使用rmr /node1命令

 

 

查看节点

get /node1    (其中node1为节点名称)

 

 

说明:

如上的操作不带参数默认都是持久节点。

 

三、节点类型:

1.Zookeeper中有两种节点类型:

持久节点persitent

create /node1 v1,客户端断开连接之后,zk不删除persitent节点

 

临时节点ephemeral

create  -e /node1 v1 ,客户端断开连接之后,zk删除ephemeral节点

 

2.zookeeper有四种形式的目录节点(默认是persistent)

PERSISTENT 

create /node1 v1

PERSISTENT_sequence

create  -s /node1 v1

实际上创建了一个新的名称为node10000000001的节点。再次执行会生成一个新的名称为node10000000002的节点

 

EPHEMERAL

create  -e /node1 v1  当客户端退出之后,改节点就被删除了

注意,临时节点下面不能创建子节点,会报错:

 

 

 

EPHEMERAL_sequence

create  -e -s /node1 v1  当客户端退出之后,改节点就被删除了。

 

3.节点状态属性

cZxid :节点被创建的事物id值  c:create

ctime :节点被创建的时间

mZxid :节点被修改的事物的事物id值 m:modify

mtime :节点被修改的时间

pZxid :子节点最后一次呗修改的事物id

cversion :节点的子节点被修改的版本号

dataVersion :数据被修改的版本号

aclVersion : 节点的acl被修改的版本号

ephemeralOwner :如果是持久节点值为0,临时节点非0

dataLength : 节点值得长度

numChildren :子节点个数

 

如下为持久节点的值:

[zk: localhost:2181(CONNECTED) 11] get /node1

v11

cZxid = 0x13

ctime = Mon Oct 29 10:07:58 CST 2018

mZxid = 0x14

mtime = Mon Oct 29 10:08:39 CST 2018

pZxid = 0x13

cversion = 0

dataVersion = 1

aclVersion = 0

ephemeralOwner = 0x0

dataLength = 3

numChildren = 0

 

如下为临时节点的值:

[zk: localhost:2181(CONNECTED) 12] get /node2

v2

cZxid = 0x29

ctime = Mon Oct 29 10:28:13 CST 2018

mZxid = 0x29

mtime = Mon Oct 29 10:28:13 CST 2018

pZxid = 0x29

cversion = 0

dataVersion = 0

aclVersion = 0

ephemeralOwner = 0x1000efbbe700001

dataLength = 2

numChildren = 0

 

四、zookeeper的ACL

 

4.1ACL机制

ACL(Access Control List)机制,表示为scheme:id:permissions,第一个字段表示采用哪一种机制,第二个id表示用户,permissions表示相关权限(如只读,读写,管理等)。

 

Scheme:

world: 它下面只有一个id, 叫anyone, world:anyone代表任何人,zookeeper中对所有人有权限的结点就是属于world:anyone的

auth: 它不需要id, 只要是通过authentication的user都有权限(zookeeper支持通过kerberos来进行authencation, 也支持username/password形式的authentication)

digest: 它对应的id为username:BASE64(SHA1(password)),它需要先通过username:password形式的authentication

ip: 它对应的id为客户机的IP地址,设置的时候可以设置一个ip段,比如ip:192.168.1.0/16, 表示匹配前16个bit的IP段

 

id:

id是验证模式,不同的scheme,id值不一样
scheme为auth时:username:password

scheme为digest时:username:BASE64(SHA1(password))

scheme为ip时:客户端的ip地址。

scheme为world时:anyone。

 

permiddsion:

CREATE、READ、WRITE、DELETE、ADMIN 也就是 增、删、改、查、管理权限,这5种权限简写为crwda(即:每个单词的首字符缩写)

CREATE(c):创建子节点的权限

DELETE(d):删除节点的权限

READ(r):读取节点数据的权限

WRITE(w):修改节点数据的权限

ADMIN(a):设置子节点权限的权限

 

 

4.2ACL的命令:

4.2.1getAcl

create /node1 v1  # 创建一个子节点

getAcl /node1     # 获取该节点的acl权限信息

 

 

4.2.2setAcl

setAcl /node1 world:anyone:craw  把删除权限d去除 ,那么在node1下面创建的子节点是不能被删除的,但是/node1本身这个节点还是可以被删除的。

 

 

4.2.3addauth:注册会话授权信息(相当于创建用户或者切换用户)

 

4.2.3.1  auth

addauth digest u1:123456       新增用户,名为u1,密码为123456

setAcl /node3 auth:u1:123456:crdwa  给node3节点设置Acl ,scheme为auth类型,id 为auth类型即 u1:123456   ,permission为crdwa

 

 

退出本次客户端后:

再次重新连接客户端  (或者新启动一个客户端)

ls /node3/testAcl  #没有权限无法访问

create /node3/testAcl/testb bbb #没有权限无法访问

addauth digest user1:123456  # 重新新增权限后可以访问了

 

 

如果忘记密码那就没办法了,查看不了

 

4.2.3.1  digest

auth与digest的区别就是,前者使用明文密码进行登录,后者使用密文密码进行登录

create /node3/testDigest  dd

addauth digest u2:654321

setAcl /node3/testDigest digest:u2:Fqb0cTcVtn704lhrUTPitrq88fg=:ca   # 使用digest来设置权限

 

 

 

其中:addauth digest u2:654321 ,怎么查看加密的密码呢

通过执行如下java命令可获得:

java -Djava.ext.dirs=D:\lurenz\springboot\zookeeper\zookeeper-3.4.13\lib -cp D:\lurenz\springboot\zookeeper\zookeeper-3.4.13\zookeeper-3.4.13.jar org.apache.zookeeper.server.auth.DigestAuthenticationProvider u2:654321

 

 

五、常用四字命令

 

ZooKeeper 支持某些特定的四字命令字母与其的交互。它们大多是查询命令,用来获取 ZooKeeper 服务的当前状态及相关信息。用户在客户端可以通过 telnet 或 nc 向 ZooKeeper 提交相应的命令

 

echo stat|nc 127.0.0.1 2181 来查看哪个节点被选择作为follower或者leader 

使用echo ruok|nc 127.0.0.1 2181 测试是否启动了该Server,若回复imok表示已经启动。  

echo dump| nc 127.0.0.1 2181 ,列出未经处理的会话和临时节点。  

echo kill | nc 127.0.0.1 2181 ,关掉server  

echo conf | nc 127.0.0.1 2181 ,输出相关服务配置的详细信息。  

echo cons | nc 127.0.0.1 2181 ,列出所有连接到服务器的客户端的完全的连接 / 会话的详细信息  

echo envi |nc 127.0.0.1 2181 ,输出关于服务环境的详细信息(区别于 conf 命令)。  

echo reqs | nc 127.0.0.1 2181 ,列出未经处理的请求。  

echo wchs | nc 127.0.0.1 2181 ,列出服务器 watch 的详细信息。  

echo wchc | nc 127.0.0.1 2181 ,通过 session 列出服务器 watch 的详细信息,它的输出是一个与 watch 相关的会话的列表。  

echo wchp | nc 127.0.0.1 2181 ,通过路径列出服务器 watch 的详细信息。它输出一个与 session 相关的路径

 

5.1通过nc向zookeeper提交命令:

注意:需要安装nc否则会报错:

 

 

Linux(centos)安装命令:yum –y install nc

Windows安装netcat: 下载链接https://eternallybored.org/misc/netcat/

 

 

 

5.2通过telnet向zookeeper提交命令

首先要执行telnet 127.0.0.1 2181

 

连接成功之后,输入四字命令,如:stat

 

 

 

六、查看快照或日志文件

 

直接打开快照或日志文件时乱码,可用如下命令查看

 

在linux中执行:

java -cp /usr/local/zookeeper/zookeeper-3.4.8/zookeeper-3.4.8.jar:/usr/local/zookeeper/zookeeper-3.4.8/lib/slf4j-api-1.6.1.jar org.apache.zookeeper.server.LogFormatter log.11089bb

 

java -cp /usr/local/zookeeper/zookeeper-3.4.8/zookeeper-3.4.8.jar:/usr/local/zookeeper/zookeeper-3.4.8/lib/slf4j-api-1.6.1.jar org.apache.zookeeper.server.SnapshotFormatter snapshot.ffd9b6

 

注意:java cp 命令在windows中执行分隔符为;而在linux为:

java cp 命令:

-cp 和 -classpath 一样,是指定类运行所依赖其他类的路径,通常是类库,jar包之类,需要全路径到jar包,window上分号“;”分隔,linux上是分号“:”分隔

 

 

java -cp D:\lurenz\springboot\zookeeper\zookeeper-3.4.13\zookeeper-3.4.13.jar;D:\lurenz\springboot\zookeeper\zookeeper-3.4.13\lib\slf4j-api-1.7.25.jar org.apache.zookeeper.server.SnapshotFormatter D:\logs\zookeeper\data\version-2\snapshot.1a

 

 

java -cp D:\lurenz\springboot\zookeeper\zookeeper-3.4.13\zookeeper-3.4.13.jar;D:\lurenz\springboot\zookeeper\zookeeper-3.4.13\lib\slf4j-api-1.7.25.jar org.apache.zookeeper.server.LogFormatter D:\logs\zookeeper\log\version-2\log.1

 

 

 

七、zookeeper信息查看工具

下载地址:https://issues.apache.org/jira/secure/attachment/12436620/ZooInspector.zip

 

输入ip,端口

 

 

查看如下,代表链接成功

 

 

posted on 2018-10-30 09:14  sgyi06  阅读(1386)  评论(0编辑  收藏  举报

导航