ZooKeeper标准软件基于Bitnami ZooKeeper 构建。当前版本为3.9.2
你可以通过Qinghub部署工具直接安装部署,也可以手动按如下文档操作
zooKeeper 是一个开放源码的分布式协调服务,主要为了解决分布式架构下数据一致性问题, 它是集群的管理者, 监视着集群中各个节点的状态,根据节点提交的反馈进行下一步合理操作。 最终, 将简单易用的接口和性能高效、 功能稳定的系统提供给用户
使用Docker 容器网络,应用程序容器可以轻松访问容器内运行的 Apache ZooKeeper 服务器。
连接到同一网络的容器可以使用容器名称作为主机名来相互通信。
在此示例中,我们将创建一个 Apache ZooKeeper 客户端实例,该实例将连接到与客户端在同一 Docker 网络上运行的服务器实例。
docker network create app-tier --driver bridge
使用命令--network app-tier的参数docker run将 Apache ZooKeeper 容器连接到网络app-tier。
docker run -d --name zookeeper-server \
--network app-tier \
registry.cn-hangzhou.aliyuncs.com/qingcloudtech/zookeeper:latest
最后,我们创建一个新的容器实例来启动 Apache ZooKeeper 客户端并连接到上一步中创建的服务器:
docker run -it --rm \
--network app-tier \
registry.cn-hangzhou.aliyuncs.com/qingcloudtech/zookeeper:latest zkCli.sh -server zookeeper-server:2181 get /
如果未指定,Docker Compose 会自动设置一个新网络并将所有已部署的服务附加到该网络。但是,我们将显式定义一个bridge名为app-tier的新网络。在此示例中,我们假设您希望从您自己的自定义应用程序映像连接到 Apache ZooKeeper 服务器,该映像在以下代码段中通过服务名称进行标识myapp。
version: '2'
networks:
app-tier:
driver: bridge
services:
zookeeper:
image: 'registry.cn-hangzhou.aliyuncs.com/qingcloudtech/zookeeper:latest'
networks:
- app-tier
myapp:
image: 'YOUR_APPLICATION_IMAGE'
networks:
- app-tier
重要: 替换YOUR_APPLICATION_IMAGE占位符 在您的应用程序容器中,使用主机名zookeeper连接到 Apache ZooKeeper 服务器 启动容器:
docker-compose up -d
可以使用以下环境变量设置配置:
services:
zookeeper:
...
environment:
- ZOO_SERVER_ID=1
...
该镜像配置存放在/opt/bitnami/zookeeper/conf/目录中。
docker run --name zookeeper -v /path/to/zoo.cfg:/opt/bitnami/zookeeper/conf/zoo.cfg registry.cn-hangzhou.aliyuncs.com/qingcloudtech/zookeeper:latest
之后,您的更改将被考虑到服务器的行为中。
运行 Apache ZooKeeper 容器,从主机安装目录。
docker run --name zookeeper -v /path/to/zoo.cfg:/opt/bitnami/zookeeper/conf/zoo.cfg registry.cn-hangzhou.aliyuncs.com/qingcloudtech/zookeeper:latest
或使用 Docker Compose:
version: '2'
services:
zookeeper:
image: 'registry.cn-hangzhou.aliyuncs.com/qingcloudtech/zookeeper:latest'
ports:
- '2181:2181'
volumes:
- /path/to/zoo.cfg:/opt/bitnami/zookeeper/conf/zoo.cfg
使用您喜欢的编辑器编辑主机上的配置。
vi /path/to/zoo.cfg
更改配置后,重新启动 Apache ZooKeeper 容器以使更改生效。
docker restart zookeeper
或使用 Docker Compose:
docker-compose restart zookeeper
通过传递环境变量可以轻松启用基于 SASL/Digest-MD5 的身份验证ZOO_ENABLE_AUTH。启用 Apache ZooKeeper 身份验证时,还需要传递能够登录的用户和密码列表。
注意:使用 CLI 工具启用身份验证zkCli.sh。ZOO_CLIENT_USER因此,设置ZOO_CLIENT_PASSWORD环境变量也是有必要的 。
docker run -it -e ZOO_ENABLE_AUTH=yes \
-e ZOO_SERVER_USERS=user1,user2 \
-e ZOO_SERVER_PASSWORDS=pass4user1,pass4user2 \
-e ZOO_CLIENT_USER=user1 \
-e ZOO_CLIENT_PASSWORD=pass4user1 \
registry.cn-hangzhou.aliyuncs.com/qingcloudtech/zookeeper
或修改docker-compose.yml文件:
services:
zookeeper:
...
environment:
- ZOO_ENABLE_AUTH=yes
- ZOO_SERVER_USERS=user1,user2
- ZOO_SERVER_PASSWORDS=pass4user1,pass4user2
- ZOO_CLIENT_USER=user1
- ZOO_CLIENT_PASSWORD=pass4user1
...
可以使用以下环境变量通过 Apache ZooKeeper Docker 映像轻松设置Apache ZooKeeper ( https://zookeeper.apache.org/doc/r3.1.2/zookeeperAdmin.html ) 集群:
ZOO_SERVERS:逗号、空格或分号分隔的服务器列表。这可以在指定或不指定集合中服务器的 ID 的情况下完成。没有默认值。例子:
没有服务器 ID - zoo1:2888:3888,zoo2:2888:3888
带有服务器 ID - zoo1:2888:3888::1,zoo2:2888:3888::2
没有服务器ID和观察者-zoo1:2888:3888,zoo2:2888:3888:observer
带有服务器 ID 和观察者 - Zoo1:2888:3888::1,zoo2:2888:3888:observer::2
为了获得可靠的 Apache ZooKeeper 服务,您应该将 Apache ZooKeeper 部署在称为集成的集群中。只要大多数节点都已启动,该服务就可用。由于 Apache ZooKeeper 需要多数,因此最好使用奇数台机器。例如,四台机器的 Apache ZooKeeper 只能处理单台机器的故障;如果两台机器出现故障,剩下的两台机器不占多数。然而,有了五台机器,Apache ZooKeeper 就可以处理两台机器的故障。
您必须使用 0.0.0.0 作为服务器的主机。更具体地说,如果zookeeper1容器启动的ID是1,那么ZOO_SERVERS环境变量必须是0.0.0.0:2888:3888,zookeeper2:2888:3888,zookeeper3:2888:3888,或者如果zookeeper服务器的ID不是-sequential 那么需要指定它们 0.0.0.0:2888:3888::2,zookeeper2:2888:3888::4.zookeeper3:2888:3888::6
见下文:
创建 Docker 网络以通过 docker 容器名称相互可见
docker network create app-tier --driver bridge
第一步是创建一个 Apache ZooKeeper 实例。
docker run --name zookeeper1 \
--network app-tier \
-e ZOO_SERVER_ID=1 \
-e ZOO_SERVERS=0.0.0.0:2888:3888,zookeeper2:2888:3888,zookeeper3:2888:3888 \
-p 2181:2181 \
-p 2888:2888 \
-p 3888:3888 \
registry.cn-hangzhou.aliyuncs.com/qingcloudtech/zookeeper:latest
接下来我们启动一个新的 Apache ZooKeeper 容器。
docker run --name zookeeper2 \
--network app-tier \
-e ZOO_SERVER_ID=2 \
-e ZOO_SERVERS=zookeeper1:2888:3888,0.0.0.0:2888:3888,zookeeper3:2888:3888 \
-p 2181:2181 \
-p 2888:2888 \
-p 3888:3888 \
registry.cn-hangzhou.aliyuncs.com/qingcloudtech/zookeeper:latest
####步骤3:创建第三个节点
接下来我们启动另一个新的 Apache ZooKeeper 容器。
docker run --name zookeeper3 \
--network app-tier \
-e ZOO_SERVER_ID=3 \
-e ZOO_SERVERS=zookeeper1:2888:3888,zookeeper2:2888:3888,0.0.0.0:2888:3888 \
-p 2181:2181 \
-p 2888:2888 \
-p 3888:3888 \
registry.cn-hangzhou.aliyuncs.com/qingcloudtech/zookeeper:latest
您现在已经启动并运行了一个两节点 Apache ZooKeeper 集群。您可以通过添加/删除从属服务器来扩展集群,而不会导致任何停机。
通过 Docker Compose,可以使用以下命令设置整体:
version: '2'
services:
zookeeper1:
image: 'registry.cn-hangzhou.aliyuncs.com/qingcloudtech/zookeeper:latest'
ports:
- '2181'
- '2888'
- '3888'
volumes:
- /path/to/zookeeper-persistence:/bitnami/zookeeper
environment:
- ZOO_SERVER_ID=1
- ZOO_SERVERS=0.0.0.0:2888:3888,zookeeper2:2888:3888,zookeeper3:2888:3888
zookeeper2:
image: 'registry.cn-hangzhou.aliyuncs.com/qingcloudtech/zookeeper:latest'
ports:
- '2181'
- '2888'
- '3888'
volumes:
- /path/to/zookeeper-persistence:/bitnami/zookeeper
environment:
- ZOO_SERVER_ID=2
- ZOO_SERVERS=zookeeper1:2888:3888,0.0.0.0:2888:3888,zookeeper3:2888:3888
zookeeper3:
image: 'registry.cn-hangzhou.aliyuncs.com/qingcloudtech/zookeeper:latest'
ports:
- '2181'
- '2888'
- '3888'
volumes:
- /path/to/zookeeper-persistence:/bitnami/zookeeper
environment:
- ZOO_SERVER_ID=3
- ZOO_SERVERS=zookeeper1:2888:3888,zookeeper2:2888:3888,0.0.0.0:2888:3888
docker run --name zookeeper \
-v /path/to/domain.key:/bitnami/zookeeper/certs/domain.key:ro
-v /path/to/domain.crs:/bitnami/zookeeper/certs/domain.crs:ro
-e ALLOW_EMPTY_PASSWORD=yes \
-e ZOO_TLS_CLIENT_ENABLE=yes \
-e ZOO_TLS_CLIENT_KEYSTORE_FILE=/bitnami/zookeeper/certs/domain.key\
-e ZOO_TLS_CLIENT_TRUSTSTORE_FILE=/bitnami/zookeeper/certs/domain.crs\
registry.cn-hangzhou.aliyuncs.com/qingcloudtech/zookeeper:latest
docker logs zookeeper
或使用 Docker Compose:
docker-compose logs zookeeper
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。