Zookeeper是一个分布式应用程序协调服务,主要负责集中维护配置信息的服务,提供分布式的同步机制。其所有的服务都是做为其他分布式应用的基础。Zookeeper是Google Chubby的一个开源实现,是现在很多分布式应用的重要组件,包括诸如Hadoop、HBase、Kafka等,可以说现在Zookeeper是大家必须掌握的一门软件。
Zookeeper主要提供以下几种服务:
1、命名服务
2、配置管理
3、集群管理
4、分布式锁
5、队列管理
为了熟悉Zookeeper的常用操作,最简单的办法就是使用Docker。
$ docker pull zookeeper # 完成后启动zookeeper $ docker run -p 2181:2181 zookeeper # 重新打开一个Terminal界面,查找到当前容器的ID,登陆到容器中 $ docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 63c3aa117fca zookeeper "/docker-entrypoint.…" About a minute ago Up About a minute 2888/tcp, 0.0.0.0:2181->2181/tcp, 3888/tcp infallible_saha $ docker exec -it 63c3aa117fca bash
现在一个单机版的Zookeeper就运行起来了,可以尝试常用的命令了。
bash-4.4# ./zkServer.sh status ZooKeeper JMX enabled by default Using config: /conf/zoo.cfg Mode: standalone
bash-4.4# ./zkCli.sh Connecting to localhost:2181
ls get /zookeeper
[zk: localhost:2181(CONNECTED) 3] get /zookeeper cZxid = 0x0 ctime = Thu Jan 01 00:00:00 GMT 1970 mZxid = 0x0 mtime = Thu Jan 01 00:00:00 GMT 1970 pZxid = 0x0 cversion = -1 dataVersion = 0 aclVersion = 0 ephemeralOwner = 0x0 dataLength = 0 numChildren = 1
stat /zookeeper
craete [-s] [-e] path data acl
, -s
表示创建顺序节点, -e
表示创建临时节点。 [zk: localhost:2181(CONNECTED) 6] create /spring hello Created /spring [zk: localhost:2181(CONNECTED) 9] get /spring hello cZxid = 0x4 ctime = Fri Apr 05 09:30:55 GMT 2019 mZxid = 0x4 mtime = Fri Apr 05 09:30:55 GMT 2019 pZxid = 0x4 cversion = 0 dataVersion = 0 aclVersion = 0 ephemeralOwner = 0x0 dataLength = 5 numChildren = 0
set path data [version]
,可以看到dataVersion变成了1 [zk: localhost:2181(CONNECTED) 11] set /spring spring-v1 cZxid = 0x4 ctime = Fri Apr 05 09:30:55 GMT 2019 mZxid = 0x5 mtime = Fri Apr 05 09:34:19 GMT 2019 pZxid = 0x4 cversion = 0 dataVersion = 1 aclVersion = 0 ephemeralOwner = 0x0 dataLength = 9 numChildren = 0
delete path [version]
[zk: localhost:2181(CONNECTED) 17] delete /spring [zk: localhost:2181(CONNECTED) 18] get /spring Node does not exist: /spring
stat path [watch]
[zk: localhost:2181(CONNECTED) 33] stat /spring/bootx watch Node does not exist: /spring/bootx [zk: localhost:2181(CONNECTED) 34] create /spring/bootx bootx Created /spring/bootx WATCHER:: [zk: localhost:2181(CONNECTED) 35] WatchedEvent state:SyncConnected type:NodeCreated path:/spring/bootx
get path [watch]
[zk: localhost:2181(CONNECTED) 38] get /spring/booty watch new-boot-y cZxid = 0xc ctime = Fri Apr 05 13:38:36 GMT 2019 mZxid = 0xd mtime = Fri Apr 05 13:38:48 GMT 2019 pZxid = 0xc cversion = 0 dataVersion = 1 aclVersion = 0 ephemeralOwner = 0x0 dataLength = 10 numChildren = 0 [zk: localhost:2181(CONNECTED) 39] set /spring/booty nnew-boot-y WATCHER:: WatchedEvent state:SyncConnected type:NodeDataChanged path:/spring/booty cZxid = 0xc ctime = Fri Apr 05 13:38:36 GMT 2019 mZxid = 0xe mtime = Fri Apr 05 13:39:26 GMT 2019 pZxid = 0xc cversion = 0 dataVersion = 2 aclVersion = 0 ephemeralOwner = 0x0 dataLength = 11 numChildren = 0
ZK的节点有5种操作权限: CREATE、READ、WRITE、DELETE、ADMIN
也就是 增、删、改、查、管理权限。
注:这5种权限中,delete是指对子节点的删除权限,其它4种权限指对自身节点的操作权限。
身份的认证有4种方式:
[zk: localhost:2181(CONNECTED) 42] getAcl /spring 'world,'anyone : cdrwa [zk: localhost:2181(CONNECTED) 43] getAcl /zookeeper 'world,'anyone : cdrwa
ZooKeeper 支持某些特定的四字命令字母与其的交互。它们大多是查询命令,用来获取 ZooKeeper 服务的当前状态及相关信息。用户在客户端可以通过 telnet
或 nc
向 ZooKeeper 提交相应的命令。 ZooKeeper 常用四字命令如下表所示。
Zookeeper四字命令 | 功能描述 |
---|---|
conf | 输出相关服务配置的详细信息。 |
cons | 列出所有连接到服务器的客户端的完全的连接 / 会话的详细信息。包括“接受 / 发送”的包数量、会话 id 、操作延迟、最后的操作执行等等信息。 |
dump | 列出未经处理的会话和临时节点。 |
envi | 输出关于服务环境的详细信息(区别于 conf 命令)。 |
reqs | 列出未经处理的请求 |
ruok | 测试服务是否处于正确状态。如果确实如此,那么服务返回“ imok ”,否则不做任何相应。 |
stat | 输出关于性能和连接的客户端的列表。 |
wchs | 列出服务器 watch 的详细信息。 |
wchc | 通过 session 列出服务器 watch 的详细信息,它的输出是一个与 watch 相关的会话的列表。 |
wchp | 通过路径列出服务器 watch 的详细信息。它输出一个与 session 相关的路径。 |
使用方法
$ echo stat | nc 127.0.0.1 2181 Zookeeper version: 3.4.13-2d71af4dbe22557fda74f9a9b4309b15a7487f03, built on 06/29/2018 04:05 GMT Clients: /172.17.0.1:53548[0](queued=0,recved=1,sent=0) /127.0.0.1:56306[1](queued=0,recved=483,sent=485) Latency min/avg/max: 0/0/45 Received: 500 Sent: 501 Connections: 2 Outstanding: 0 Zxid: 0xe Mode: standalone Node count: 8