Zookeeper

This is about Zookeeper

Posted by PsycheLee on 2015-09-08

Zookeeper

是什么?

​ 协调管理

​ 分布式系统: 多个节点组成

存储的数据模型

  • 层次化的目录结构

  • 每个节点是znode

    • 临时节点
      • session过期后被删除
      • 不能有子节点
      • 有序
    • 永久节点
      • 如果不手动删除,不会自动被删除
      • 可以有子节点
      • 有序

    znode特点

    • 身份id, 版本号
    • 修改\删除, 如果版本号不匹配, 会报错
    • zk上的数据较小
    • 可以为znode添加监听器
    • 设置权限ACL

安装

​ 解压==> 配置环境变量

​ 修改conf文件

1
2
3
4
[bigdata@hadoop001 conf]$ cp zoo_sample.cfg zoo.cfg
[bigdata@hadoop001 conf]$ vi zoo.cfg
#修改这个参数的路径
dataDir=/home/bigdata/tmp/zookeeper

使用

服务端 进程是QuorumPeerMain

  • 启动
1
2
3
4
[bigdata@hadoop001 bin]$ zkServer.sh start
JMX enabled by default
Using config: /home/bigdata/app/zookeeper/bin/../conf/zoo.cfg
Starting zookeeper ... STARTED
  • 查看状态
1
2
3
4
[bigdata@hadoop001 bin]$ zkServer.sh status
JMX enabled by default
Using config: /home/bigdata/app/zookeeper/bin/../conf/zoo.cfg
Mode: standalone
  • 停止

    1
    2
    3
    4
    [bigdata@hadoop001 bin]$ zkServer.sh stop
    JMX enabled by default
    Using config: /home/bigdata/app/zookeeper/bin/../conf/zoo.cfg
    Stopping zookeeper ... STOPPED

客户端 进程是 ZooKeeperMain

1
2
[bigdata@hadoop001 bin]$ zkCli.sh 
Connecting to localhost:2181

客户端常用命令

ls / 查看/的目录结构
1
2
[zk: localhost:2181(CONNECTED) 2] ls /
[zookeeper]
create 创建节点
1
2
3
4
[zk: localhost:2181(CONNECTED) 5] create /lxl jim
Created /lxl
[zk: localhost:2181(CONNECTED) 6] ls /
[lxl, zookeeper]
delete 删除

如果有子节点, 先删除子节点

1
2
[zk: localhost:2181(CONNECTED) 32] delete /lxl
Node not empty: /lxl
get 查看节点上的信息
1
2
[zk: localhost:2181(CONNECTED) 36] get /lxl
lxl
stat查看节点的详细信息
1
2
3
4
5
6
7
8
9
10
11
12
[zk: localhost:2181(CONNECTED) 37] stat /lxl
cZxid = 0xf2
ctime = Tue Mar 16 21:53:21 CST 2021
mZxid = 0xf2
mtime = Tue Mar 16 21:53:21 CST 2021
pZxid = 0xf2
cversion = 0 #版本号
dataVersion = 0
aclVersion = 0
ephemeralOwner = 0x0 #永久节点
dataLength = 3 #数据长度
numChildren = 0 #子节点个数

如果增加子节点, 版本号和节点数都会变化

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
[zk: localhost:2181(CONNECTED) 39] create /lxl/a jack
Created /lxl/a
[zk: localhost:2181(CONNECTED) 40] get /lxl
lxl
cZxid = 0xf2
ctime = Tue Mar 16 21:53:21 CST 2021
mZxid = 0xf2
mtime = Tue Mar 16 21:53:21 CST 2021
pZxid = 0xf9
cversion = 1
dataVersion = 0
aclVersion = 0
ephemeralOwner = 0x0
dataLength = 3
numChildren = 1
[zk: localhost:2181(CONNECTED) 41]
create -e 创建临时节点
1
2
3
4
5
6
[zk: localhost:2181(CONNECTED) 43] create -e /lxl/tmp kkk
Created /lxl/tmp
[zk: localhost:2181(CONNECTED) 44] stat /lxl/tmp
...
ephemeralOwner = 0x1782fb0dd6e0038 #永久节点为0x0
...
create -s创建有序节点
1
2
[zk: localhost:2181(CONNECTED) 45] create -s /lxl/seq mack
Created /lxl/seq0000000003

不支持级联创建

set 修改值
1
2
3
4
5
6
7
8
9
10
11
12
[zk: localhost:2181(CONNECTED) 48] set /lxl/a mamama
cZxid = 0xf9
ctime = Tue Mar 16 22:45:08 CST 2021
mZxid = 0xfe
mtime = Tue Mar 16 23:04:18 CST 2021
pZxid = 0xf9
cversion = 0
dataVersion = 1 #版本+1
aclVersion = 0
ephemeralOwner = 0x0
dataLength = 6
numChildren = 0
set path value version修改+版本号

版本号不存在,报错

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
[zk: localhost:2181(CONNECTED) 55] stat /lxl/a
cZxid = 0xf9
ctime = Tue Mar 16 22:45:08 CST 2021
mZxid = 0xfe
mtime = Tue Mar 16 23:04:18 CST 2021
pZxid = 0xf9
cversion = 0
dataVersion = 1
aclVersion = 0
ephemeralOwner = 0x0
dataLength = 6
numChildren = 0
[zk: localhost:2181(CONNECTED) 56] stat /lxl/a abc 1
cZxid = 0xf9
ctime = Tue Mar 16 22:45:08 CST 2021
mZxid = 0xfe
mtime = Tue Mar 16 23:04:18 CST 2021
pZxid = 0xf9
cversion = 0
dataVersion = 1
aclVersion = 0
ephemeralOwner = 0x0
dataLength = 6
numChildren = 0
[zk: localhost:2181(CONNECTED) 58] set /lxl/a abc 2
version No is not valid : /lxl/a
delete path version带版本号删除

如果版本号不存在, 报错

1
2
[zk: localhost:2181(CONNECTED) 61] delete /lxl/a 2
version No is not valid : /lxl/a
watch监听
1
2
3
4
5
6
[zk: localhost:2181(CONNECTED) 1] stat /lxl/ab watch
[zk: localhost:2181(CONNECTED) 2] delete /lxl/ab

WATCHER::

WatchedEvent state:SyncConnected type:NodeDeleted path:/lxl/ab

可以被监听的event: NodeCreated NodeDataChanged NodeDelete

子节点可以被监听: NodeCreated NodeDelete【修改子节点, 不能被监听】

服务端四字命令

stat 查看服务的一些信息

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
[bigdata@hadoop001 ~]$  echo stat|nc hadoop001 2181
Zookeeper version: 3.4.5-cdh5.16.2--1, built on 06/03/2019 10:40 GMT
Clients:
/127.0.0.1:45678[1](queued=0,recved=14,sent=14)
/127.0.0.1:45676[1](queued=0,recved=15,sent=15)
/172.22.212.16:34830[0](queued=0,recved=1,sent=0)

Latency min/avg/max: 0/0/2
Received: 30
Sent: 29
Connections: 3
Outstanding: 0
Zxid: 0x109
Mode: standalone
Node count: 8

dump 临时session

1
2
3
4
5
6
7
8
9
10
[bigdata@hadoop001 ~]$  echo dump|nc hadoop001 2181 
SessionTracker dump:
Session Sets (3):
0 expire at Wed Mar 17 20:33:16 CST 2021:
0 expire at Wed Mar 17 20:33:26 CST 2021:
2 expire at Wed Mar 17 20:33:36 CST 2021:
0x1782fb0dd6e0047
0x1782fb0dd6e0046
ephemeral nodes dump:
Sessions with Ephemerals (0):

conf 配置信息

1
2
3
4
5
6
7
8
9
[bigdata@hadoop001 ~]$  echo conf|nc hadoop001 2181      
clientPort=2181
dataDir=/home/bigdata/tmp/zookeeper/version-2
dataLogDir=/home/bigdata/tmp/zookeeper/version-2
tickTime=2000
maxClientCnxns=60
minSessionTimeout=4000
maxSessionTimeout=40000
serverId=0

wchs 监听情况

1
2
3
[bigdata@hadoop001 ~]$  echo wchs|nc hadoop001 2181     
1 connections watching 2 paths
Total watches:2

API使用

依赖

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
<--!原生API-->
<dependency>
<groupId>org.apache.zookeeper</groupId>
<artifactId>zookeeper</artifactId>
<version>${zk.version}</version>
</dependency>

<--!升级API-->
<dependency>
<groupId>org.apache.curator</groupId>
<artifactId>curator-client</artifactId>
<version>2.13.0</version>
</dependency>
<dependency>
<groupId>org.apache.curator</groupId>
<artifactId>curator-recipes</artifactId>
<version>2.13.0</version>
</dependency>
<dependency>
<groupId>org.apache.curator</groupId>
<artifactId>curator-framework</artifactId>
<version>2.13.0</version>
</dependency>

插件zoolytic