Docker搭建ZooKeeper集群
1、镜像下载
使用官方提供的ZooKeeper镜像
docker pull zookeeper:3.5.8
通过命令查看下载的ZooKeeper镜像
docker images
2、Standalone模式
2.1 启动容器
docker run -p 8080:8080 --name zookeeper-demo --restart always -d zookeeper:3.5.8
--name上述命令在后台运行一个名为 zookeeper-demo的容器。
由于 Zookeeper 是’快速失败’,因此最好通过 --retart参数设置容器在意外停止时自动重启。默认是 no,表示不重启。
-p 参数将宿主机端口 8080 与容器端口 8080 映射。通过如下命令查看运行中的 Zookeeper 容器:
docker ps

通过上图我们可以看到容器对外暴露了4个端口:2181 2888 3888 8080(分别是 Zookeeper 客户端端口,主从节点交互信息的端口,选举端口以及 AdminServer 端口)。暴露端口主要是镜像包含了 EXPOSE 2181 2888 3888 8080 命令,具体可以参阅镜像Dockerfile。
2.2 进入容器
docker exec -it #{CONTAINER ID} /bin/bash
配置文件默认在 /conf 目录下,我们具体看一下默认配置:
dataDir=/data dataLogDir=/datalog tickTime=2000 initLimit=5 syncLimit=2 autopurge.snapRetainCount=3 autopurge.purgeInterval=0 maxClientCnxns=60 standaloneEnabled=true admin.enableServer=true server.1=localhost:2888:3888;2181
我们可以使用 zkServer.sh status 命令来查看 Zookeeper 启动状态:
zkServer.sh status ZooKeeper JMX enabled by default Using config: /conf/zoo.cfg Client port found: 2181. Client address: localhost. Mode: standalone
从上面可以看到确实是 standalone 模式。
2.3 连接ZooKeeper服务
zkCli.sh -server 127.0.0.1:2181
我们可以不用先进入容器再连接Zookeeper服务,使用如下命令一步到位:
docker exec -it #{CONTAINER ID} zkCli.sh -server 127.0.0.1:2181
3、集群模式
3.1 启动容器
为了避免一个一个的启动,我们使用 docker-compose 的方式来启动 Zookeeper 集群。首先创建一个名为 docker-compose.yml 的文件, 其内容如下:
1 version: '3.1' 2 3 services: 4 zoo1: 5 image: zookeeper:3.5.8 6 restart: always 7 hostname: zoo1 8 ports: 9 - 2181:2181 10 environment: 11 ZOO_MY_ID: 1 12 ZOO_SERVERS: server.1=0.0.0.0:2888:3888;2181 server.2=zoo2:2888:3888;2181 server.3=zoo3:2888:3888;2181 13 14 zoo2: 15 image: zookeeper:3.5.8 16 restart: always 17 hostname: zoo2 18 ports: 19 - 2182:2181 20 environment: 21 ZOO_MY_ID: 2 22 ZOO_SERVERS: server.1=zoo1:2888:3888;2181 server.2=0.0.0.0:2888:3888;2181 server.3=zoo3:2888:3888;2181 23 24 zoo3: 25 image: zookeeper:3.5.8 26 restart: always 27 hostname: zoo3 28 ports: 29 - 2183:2181 30 environment: 31 ZOO_MY_ID: 3 32 ZOO_SERVERS: server.1=zoo1:2888:3888;2181 server.2=zoo2:2888:3888;2181 server.3=0.0.0.0:2888:3888;2181
上述配置将以副本模式启动 Zookeeper 3.5.8,同时会告诉 Docker 运行三个 Zookeeper 容器:zoo1、zoo2、zoo3,并分别将本地的 2181, 2182, 2183 端口绑定到对应的容器的 2181 端口上。
ZOO_MY_ID 和 ZOO_SERVERS 是搭建 Zookeeper 集群需要设置的两个环境变量, 其中 ZOO_MY_ID 表示 Zookeeper 服务的 id, 它是1-255 之间的整数, 必须在集群中唯一。ZOO_SERVERS 是Zookeeper 集群的主机列表。
接着我们在 docker-compose.yml 当前目录下运行如下命令:
COMPOSE_PROJECT_NAME=zookeeper_cluster docker-compose up -d
或者指定配置文件名称 COMPOSE_PROJECT_NAME=zookeeper_cluster docker-compose -f docker-compose.yml up -d。 我们在 docker-compose up 前添加 COMPOSE_PROJECT_NAME=zookeeper_cluster 环境变量是为我们的 compose 工程起一个名字。
通过如下命令查看运行中的ZooKeeper集群容器:
docker ps

浙公网安备 33010602011771号