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

 

posted @ 2022-02-08 15:11  JavaIceman  阅读(703)  评论(0)    收藏  举报