Zookeeper 环境搭建指南

olinonee大约 6 分钟deploy-operation环境搭建Zookeeperdocker

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
zookeeper 容器客户端
zookeeper 容器客户端

更详细的操作命令参考:zookeeperCLIopen in new window

参考

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 客户端连接

下载地址:ZooInspectoropen in new window

启动 ZooInspector 客户端

将下载好的压缩包进行解压,执行如下命令:

java -jar zookeeper-dev-ZooInspector.jar

运行结果如下:

zookeeper-inspector
zookeeper-inspector