Zookeeper 环境搭建指南
DockerDesktop 版本(win10)
下载 zookeeper
# 搜索镜像
docker search zookeeper
# 拉取最新版本镜像
docker pull zookeeper:latest
# 查看 zookeeper 详细信息
docker inspect zookeeper
启动容器
创建挂载目录
- data:数据挂载目录
- config:配置文件挂载目录
- logs:日志文件挂载目录
zoo.cfg
配置文件
新增 dataDir=/data
clientPort=2181
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
单节点启动
## 创建 docker 网络
docker network create zookeeper
## 启动
docker run --name zookeeper --network zookeeper --restart=always -p 2181:2181 -v D:/DockerDesktop/docker-container-workspace/zookeeper/config:/conf -v D:/DockerDesktop/docker-container-workspace/zookeeper/data:/data -v D:/DockerDesktop/docker-container-workspace/zookeeper/logs:/datalog -d zookeeper:latest
说明
--name zookeeper
:容器名称为 zookeeper--network zookeeper
:连接容器网络--restart=always
:自启动-p 2181:2181
:将容器的服务端口映射到宿主机端口(宿主机端口:容器端口)-v xxx/config:/conf
:容器启动配置文件挂载,将本地的配置文件路径映射到容器的配置路径-v xxx/data:/data
:容器启动数据目录挂载,容器数据自动映射到本地数据目录-v xxx/logs:/datalog
:容器启动日志目录挂载,容器日志自动映射到本地日志目录-d zookeeper:latest
:指定最新版本的镜像以容器方式在后台启动
进入容器
# 进入 zookeeper 容器内部
docker exec -it zookeeper /bin/bash
检查容器状态
# 检查容器状态
docker exec -it zookeeper /bin/bash ./bin/zkServer.sh status
使用容器客户端
# 进入容器并使用 zookeeper 客户端
docker exec -it zookeeper zkCli.sh
使用如下命令:
# 创建持久化节点,节点名称为 `/test`,数据为 “测试”
create /test '测试'
# 获取节点数据
get /test
更详细的操作命令参考:zookeeperCLI
参考
Docker 命令行版本(CentOS 7)
由于和 win10 下面的 docker 命令差不多,这里不再过多赘述,只贴出命令汇总,如下所示:
# 拉取最新版本镜像
docker pull zookeeper:latest
## 创建文件目录
mkdir -p /home/你的用户名/docker/zookeeper/config
mkdir -p /home/你的用户名/docker/zookeeper/data
mkdir -p /home/你的用户名/docker/zookeeper/logs
## 或者
mkdir -p /home/你的用户名/docker/zookeeper/{config,data,logs}
## 赋予文件权限,防止容器启动失败
chmod -R 777 /home/你的用户名/docker/zookeeper/
## 新增如下内容到 /home/你的用户名/docker/zookeeper/config/zoo.cfg 配置文件
dataDir=/data
clientPort=2181
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
## 创建 docker 网络
docker network create zookeeper
## 启动
docker run --name zookeeper --network zookeeper \
--restart=always -p 2181:2181 \
-v /home/你的用户名/docker/zookeeper/config:/conf \
-v /home/你的用户名/docker/zookeeper/data:/data \
-v /home/你的用户名/docker/zookeeper/logs:/datalog \
-d zookeeper:latest
## 进入 zookeeper 容器内部
docker exec -it zookeeper /bin/bash
## 检查容器状态
docker exec -it zookeeper /bin/bash ./bin/zkServer.sh status
## 进入容器并使用 zookeeper 客户端
docker exec -it zookeeper zkCli.sh
## 停止容器
docker stop zookeeper
## 删除网络配置和容器
docker network rm zookeeper
docker rm zookeeper
基于 Docker 搭建 zookeeper 集群
基于 docker 普通方式启动集群
## 分别创建 node1、node2、node3 目录
mkdir -p /home/你的用户名/docker/zookeeper/node1/{config,data,logs}
mkdir -p /home/你的用户名/docker/zookeeper/node2/{config,data,logs}
mkdir -p /home/你的用户名/docker/zookeeper/node3/{config,data,logs}
## 三个节点下的 config 目录下的 zoo.cfg 配置填入如下相同配置
## 同时设置 myid 标识,比如 node1 为 myid=1,node2 为 myid=2,依次类推
## 除了 myid 不一样以外,其余配置均相同
myid=1
clientPort=2181
dataDir=/data
dataLogDir=/data/log
tickTime=2000
initLimit=5
syncLimit=2
autopurge.snapRetainCount=3
autopurge.purgeInterval=0
maxClientCnxns=60
server.1=node1:2888:3888
server.2=node2:2888:3888
server.3=node3:2888:3888
## 分别启动三个容器
## 启动 node1 容器
docker run --name node1 --network zookeeper \
--restart=always -p 2181:2181 \
-v /home/你的用户名/docker/zookeeper/node1/config:/conf \
-v /home/你的用户名/docker/zookeeper/node1/data:/data \
-v /home/你的用户名/docker/zookeeper/node1/logs:/datalog \
-d zookeeper:latest
## 启动 node2 容器
docker run --name node2 --network zookeeper \
--restart=always -p 2182:2181 \
-v /home/你的用户名/docker/zookeeper/node2/config:/conf \
-v /home/你的用户名/docker/zookeeper/node2/data:/data \
-v /home/你的用户名/docker/zookeeper/node2/logs:/datalog \
-d zookeeper:latest
## 启动 node3 容器
docker run --name node3 --network zookeeper \
--restart=always -p 2183:2181 \
-v /home/你的用户名/docker/zookeeper/node3/config:/conf \
-v /home/你的用户名/docker/zookeeper/node3/data:/data \
-v /home/你的用户名/docker/zookeeper/node3/logs:/datalog \
-d zookeeper:latest
基于 docker-compose 方式启动集群
为了避免一个一个的启动,也可以使用 docker-compose 的方式来启动 zookeeper 集群。首先创建一个名为 docker-compose.yml
的文件,其内容如下:
version: '3.1'
services:
zoo1:
image: zookeeper:latest
restart: always
hostname: zoo1
ports:
- 2181:2181
environment:
ZOO_MY_ID: 1
ZOO_SERVERS: server.1=0.0.0.0:2888:3888;2181 server.2=zoo2:2888:3888;2181 server.3=zoo3:2888:3888;2181
zoo2:
image: zookeeper:latest
restart: always
hostname: zoo2
ports:
- 2182:2181
environment:
ZOO_MY_ID: 2
ZOO_SERVERS: server.1=zoo1:2888:3888;2181 server.2=0.0.0.0:2888:3888;2181 server.3=zoo3:2888:3888;2181
zoo3:
image: zookeeper:latest
restart: always
hostname: zoo3
ports:
- 2183:2181
environment:
ZOO_MY_ID: 3
ZOO_SERVERS: server.1=zoo1:2888:3888;2181 server.2=zoo2:2888:3888;2181 server.3=0.0.0.0:2888:3888;2181
说明
上述配置将以副本模式启动 zookeeper latest 版本,同时会告诉 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 工程起一个名字。
看到如下信息表示容器启动成功:
Creating network "zookeeper_cluster_default" with the default driver
Creating zookeeper_cluster_zoo1_1 ... done
Creating zookeeper_cluster_zoo3_1 ... done
Creating zookeeper_cluster_zoo2_1 ... done
通过如下命令查看运行中的 zookeeper 集群容器:
docker ps
连接集群容器的方式和单机方式一样,只是需要分别进入对应节点容器即可。
连接 zookeeper 集群
docker exec -it zkCli.sh -server localhost:2181,localhost:2182,localhost:2183
参考
安装 ZooInspector 客户端连接
下载地址:ZooInspector
启动 ZooInspector 客户端
将下载好的压缩包进行解压,执行如下命令:
java -jar zookeeper-dev-ZooInspector.jar
运行结果如下: