一、安装
zookeeper 的安装模式有三种:
- 单机模式( stand-alone):单机单 server;
- 集群模式:多机多 server,形成集群;
- 伪集群模式:单机多个 server,形成伪集群;
1.1 Zookeeper单机模式安装
下面介绍使用Docker安装zookeeper的方式。
- 寻找镜像
docker search zookeeper
NAME DESCRIPTION STARS OFFICIAL AUTOMATED
zookeeper Apache ZooKeeper is an open-source server wh… 871 [OK]
jplock/zookeeper Builds a docker image for Zookeeper version … 164 [OK]
wurstmeister/zookeeper 122 [OK]
mesoscloud/zookeeper ZooKeeper 73 [OK]
bitnami/zookeeper ZooKeeper is a centralized service for distr… 35 [OK]
mbabineau/zookeeper-exhibitor 24 [OK]
digitalwonderland/zookeeper Latest Zookeeper - clusterable 20 [OK]
tobilg/zookeeper-webui Docker image for using `zk-web` as ZooKeeper… 14 [OK]
confluent/zookeeper 13 [OK]
debezium/zookeeper Zookeeper image required when running the De… 11 [OK]
31z4/zookeeper Dockerized Apache Zookeeper. 7 [OK]
thefactory/zookeeper-exhibitor Exhibitor-managed ZooKeeper with S3 backups … 6 [OK]
emccorp/zookeeper Zookeeper 2
engapa/zookeeper Zookeeper image optimised for being used int… 2
strimzi/zookeeper 1
paulbrown/zookeeper Zookeeper on Kubernetes (PetSet) 1 [OK]
duffqiu/zookeeper-cli 1 [OK]
openshift/zookeeper-346-fedora20 ZooKeeper 3.4.6 with replication support 1
josdotso/zookeeper-exporter ref: https://github.com/carlpett/zookeeper_e… 1 [OK]
perrykim/zookeeper k8s - zookeeper ( forked k8s contrib ) 1 [OK]
midonet/zookeeper Dockerfile for a Zookeeper server. 0 [OK]
humio/zookeeper-dev zookeeper build with zulu jvm. 0
dabealu/zookeeper-exporter zookeeper exporter for prometheus 0 [OK]
phenompeople/zookeeper Apache ZooKeeper is an open-source server wh… 0 [OK]
pravega/zookeeper-operator Kubernetes operator for Zookeeper 0
2、拉取镜像
docker pull zookeeper
3、启动镜像
docker run --name zk -p 2181:2181 -p 2888:2888 -p 3888:3888 --restart always -d zookeeper
#或者
docker run --privileged=true -id --name zookeeper --publish 2181:2181 -id zookeeper:latest
参数介绍
- -p 端口映射
- --name 容器实例名称
- -d 后台运行
- 2181 Zookeeper客户端交互端口
- 2888 Zookeeper集群端口
- 3888 Zookeeper选举端口
4、查看zookeeper的运行状态
docker ps -a|grep zk
二、基本使用
前面说了 ZooKeeper 主要是用来维护和监控一个目录节点树中存储的数据的状态,所有我们能够操作 ZooKeeper 的也和操作目录节点树大体一样,如创建一个目录节点,给某个目录节点设置数据,获取某个目录节点的所有子目录节点,给某个目录节点设置权限和监控这个目录节点的状态变化。
2.1 核心API列表
图片.png
除了以上这些上表中列出的方法之外还有一些重载方法,如都提供了一个回调类的重载方法以及可以设置特定 Watcher 的重载方法,具体的方法可以参考 org.apache.zookeeper. ZooKeeper 类的 API 说明。
2.2 基本操作
下面给出基本的操作 ZooKeeper 的示例代码,包括了创建与 ZooKeeper 服务器的连接以及最基本的数据操作。
// 创建一个与服务器的连接
ZooKeeper zk = new ZooKeeper("localhost:" + CLIENT_PORT,
ClientBase.CONNECTION_TIMEOUT, new Watcher() {
// 监控所有被触发的事件
public void process(WatchedEvent event) {
System.out.println("已经触发了" + event.getType() + "事件!");
}
});
// 创建一个目录节点
zk.create("/testRootPath", "testRootData".getBytes(), Ids.OPEN_ACL_UNSAFE,
CreateMode.PERSISTENT);
// 创建一个子目录节点
zk.create("/testRootPath/testChildPathOne", "testChildDataOne".getBytes(),
Ids.OPEN_ACL_UNSAFE,CreateMode.PERSISTENT);
System.out.println(new String(zk.getData("/testRootPath",false,null)));
// 取出子目录节点列表
System.out.println(zk.getChildren("/testRootPath",true));
// 修改子目录节点数据
zk.setData("/testRootPath/testChildPathOne","modifyChildDataOne".getBytes(),-1);
System.out.println("目录节点状态:["+zk.exists("/testRootPath",true)+"]");
// 创建另外一个子目录节点
zk.create("/testRootPath/testChildPathTwo", "testChildDataTwo".getBytes(),
Ids.OPEN_ACL_UNSAFE,CreateMode.PERSISTENT);
System.out.println(new String(zk.getData("/testRootPath/testChildPathTwo",true,null)));
// 删除子目录节点
zk.delete("/testRootPath/testChildPathTwo",-1);
zk.delete("/testRootPath/testChildPathOne",-1);
// 删除父目录节点
zk.delete("/testRootPath",-1);
// 关闭连接
zk.close();
输出的结果如下:
已经触发了 None 事件!
testRootData
[testChildPathOne]
目录节点状态:[5,5,1281804532336,1281804532336,0,1,0,0,12,1,6]
已经触发了 NodeChildrenChanged 事件!
testChildDataTwo
已经触发了 NodeDeleted 事件!
已经触发了 NodeDeleted 事件!
当对目录节点监控状态打开时,一旦目录节点的状态发生变化,Watcher 对象的 process 方法就会被调用。