ZooKeeper是用于维护配置信息,命名,提供分布式同步以及提供组服务的集中式服务.ZooKeeper底层实现是Java来实现的,所有需要Java环境.
环境搭建
Linux JDK搭建
这里采用的sftp的方式上传文件.
| 12
 3
 
 | sftp user@ip
 put  物理机文件路径 虚拟机文件需要存储的路径
 
 | 
Linux ZooKeeper 搭建
下载路径
简单使用
ZooKeeper 有两个核心概念: 文件系统数据结构, 监听通知机制.
文件系统数据结构
在Zookeeper系统中,所有的节点都可以理解为是一个文件夹,所有访问任何一个节点都会带上一个 /.
文件节点类型
在v3.5之前只有四种节点类型, 在v3.5 之后增加了 容器节点和 TTL节点类型;
- 持久化节点 (默认) 
- 持久化顺序节点 (-s) 
- 临时节点 (-e) 
- 临时顺序节点 (-e -s) 
- 容器节点 (-c) 
- TTL 节点 (-t) - 常用命令
系统提供的help 文档:
 | 12
 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 argsaddauth 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有如下这些个事件
监听单个节点
监听目录节点
监听整个节点树
树上每个节点的监听都只会被触发一次.相当于遍历执行了get -w /path
日志查看
Zookeeper 默认输出的数据存储在 /tmp/Zookeeper 目录,可以在启动Zookeeper的cfg配置.
| 12
 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码.
| 12
 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.1SLF4J: 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快照文件查看的方式:
| 12
 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.5SLF4J: 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
 ----
 ...
 
 
 |