0%

ZooKeeper搭建和简单使用

ZooKeeper是用于维护配置信息,命名,提供分布式同步以及提供组服务的集中式服务.ZooKeeper底层实现是Java来实现的,所有需要Java环境.

环境搭建

Linux JDK搭建

  • 1 获取CPU架构
1
uname -m
  • 2 下载对应的JDK,上传到Linux服务器

这里采用的sftp的方式上传文件.

1
2
3
sftp user@ip

put 物理机文件路径 虚拟机文件需要存储的路径
  • 3 解压文件 + 配置环境变量

  • 4 检查

Linux ZooKeeper 搭建

下载路径

  • 下载ZooKeeper对应的压缩包;

  • 解压

简单使用

ZooKeeper 有两个核心概念: 文件系统数据结构, 监听通知机制.

文件系统数据结构

在Zookeeper系统中,所有的节点都可以理解为是一个文件夹,所有访问任何一个节点都会带上一个 /.

文件节点类型

v3.5之前只有四种节点类型, 在v3.5 之后增加了 容器节点和 TTL节点类型;

  • 持久化节点 (默认)

  • 持久化顺序节点 (-s)

  • 临时节点 (-e)

  • 临时顺序节点 (-e -s)

  • 容器节点 (-c)

  • TTL 节点 (-t)

    常用命令

系统提供的help 文档:

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
27
ZooKeeper -server host:port cmd args
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
delquota [-n|-b] path
get [-s] [-w] path
getAcl [-s] path
history
listquota path
ls [-s] [-w] [-R] path
ls2 path [watch]
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]
rmr path
set [-s] [-v version] path data
setAcl [-s] [-v version] [-R] path acl
setquota -n|-b val path
stat [-w] path
sync path

监听通知机制

Zookeeper系统中, Zookeeper客户端可以监听任意节点,节点可以是单个节点(如果没有子节点),可以是目录节点(有子节点),也可以是一整个节点树;

  • 单个节点

  • 目录节点

  • 整个节点树

不管是单个节点,还是整个节点树,Zookeeper都只是给节点注册一次监听,如果监听被触发,随后这个监听就会被移除,客户端如果想持续监听,就必须再次注册监听.

Zookeeper有如下这些个事件

  • None: 连接建立事件

  • NodeCreated: 节点创建

  • NodeDeleted: 节点删除

  • NodeDataChanged:节点数据变化

  • NodeChildrenChanged:子节点列表变化

  • DataWatchRemoved:节点监听被移除

  • ChildWatchRemoved:子节点监听被移除

监听单个节点

1
get -w /path

监听目录节点

1
ls -s /pathdir

监听整个节点树

树上每个节点的监听都只会被触发一次.相当于遍历执行了get -w /path

1
ls -w -R /pathDir

日志查看

Zookeeper 默认输出的数据存储在 /tmp/Zookeeper 目录,可以在启动Zookeeper的cfg配置.

1
2
3
4
5
6
7
8
9
10
11
12
13
[root@oldconan ~]# cd /tmp/zookeeper/
[root@oldconan zookeeper]# ll
总用量 4
drwxr-xr-x. 2 root root 68 11月 16 14:41 version-2
-rw-r--r--. 1 root root 5 11月 16 14:40 zookeeper_server.pid
[root@oldconan zookeeper]# cd version-2/
[root@oldconan version-2]# ll
总用量 28
-rw-r--r--. 1 root root 67108880 11月 16 14:35 log.1
-rw-r--r--. 1 root root 67108880 11月 16 15:25 log.6
-rw-r--r--. 1 root root 424 11月 16 14:13 snapshot.0
-rw-r--r--. 1 root root 643 11月 16 14:40 snapshot.5
[root@oldconan version-2]#

目录下面有两种文件,log文件, snapshot快照文件;

如果想查看这两个文件,我们需要用的Java类的支持;

log 文件查看的方式: 进入到Zookeeper的**/lib**目录下. 执行如下命令. 数据内容是ASCIIM码.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
[root@oldconan lib]# java -classpath .:slf4j-api-1.7.25.jar:zookeeper-3.5.8.jar:zookeeper-jute-3.5.8.jar  org.apache.zookeeper.server.LogFormatter /tmp/zookeeper/version-2/log.1
SLF4J: Failed to load class "org.slf4j.impl.StaticLoggerBinder".
SLF4J: Defaulting to no-operation (NOP) logger implementation
SLF4J: See http://www.slf4j.org/codes.html#StaticLoggerBinder for further details.
ZooKeeper Transactional Log File with dbid 0 txnlog format version 2
20-11-16 下午02时21分37秒 session 0x1000b4e09350000 cxid 0x0 zxid 0x1 createSession 30000

20-11-16 下午02时23分41秒 session 0x1000b4e09350000 cxid 0x1 zxid 0x2 create '/default,#64656661756c7450617468,v{s{31,s{'world,'anyone}}},F,1

20-11-16 下午02时26分24秒 session 0x1000b4e09350000 cxid 0x5 zxid 0x3 create '/aaa,#61656565,v{s{31,s{'world,'anyone}}},T,2

20-11-16 下午02时28分51秒 session 0x1000b4e09350000 cxid 0xc zxid 0x4 create '/default/sub0,,v{s{31,s{'world,'anyone}}},F,1

20-11-16 下午02时35分36秒 session 0x1000b4e09350000 cxid 0x13 zxid 0x5 closeSession null
EOF reached after 5 txns.
[root@oldconan lib]#

snapshot快照文件查看的方式:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
[root@oldconan lib]# java -classpath .:slf4j-api-1.7.25.jar:zookeeper-3.5.8.jar:zookeeper-jute-3.5.8.jar  org.apache.zookeeper.server.SnapshotFormatter /tmp/zookeeper/version-2/snapshot.5
SLF4J: Failed to load class "org.slf4j.impl.StaticLoggerBinder".
SLF4J: Defaulting to no-operation (NOP) logger implementation
SLF4J: See http://www.slf4j.org/codes.html#StaticLoggerBinder for further details.
ZNode Details (count=7):
----
/
cZxid = 0x00000000000000
ctime = Thu Jan 01 08:00:00 CST 1970
mZxid = 0x00000000000000
mtime = Thu Jan 01 08:00:00 CST 1970
pZxid = 0x00000000000005
cversion = 2
dataVersion = 0
aclVersion = 0
ephemeralOwner = 0x00000000000000
dataLength = 0
----
...