一、拉取 Zookeeper 镜像
首先获取指定版本的 Zookeeper 镜像,这里选择 3.8.4 稳定版:
[root@elk01 ~]# docker pull zookeeper:3.8.4
二、准备工作目录
创建集群所需的数据存储和日志目录,采用 zoo1、zoo2、zoo3 区分三个节点:
[root@elk01 ~]# mkdir -p /data/zookeeper/zoo{1,2,3}/{data,datalog}
配置目录权限,确保容器有读写权限:
[root@elk01 ~]# chmod -R 644 /data/zookeeper
三、编写 docker-compose 配置文件
创建并编辑docker-compose.yml
文件,定义三个 Zookeeper 节点的集群配置:
[root@elk01 ~]# vi docker-compose.yml
version: '3.1'
services:
zoo1:
image: zookeeper:3.8.4
restart: always # 容器退出时自动重启
hostname: zoo1 # 节点主机名,用于集群内部通信
ports:
- 2181:2181 # 映射客户端端口到宿主机2181
environment:
ZOO_MY_ID: 1 # 当前节点ID,必须唯一
# 集群节点配置:server.ID=主机:数据同步端口:选举端口;客户端端口
ZOO_SERVERS: server.1=0.0.0.0:2888:3888;2181 server.2=zoo2:2888:3888;2181 server.3=zoo3:2888:3888;2181
volumes:
- /data/zookeeper/zoo1/data:/data # 挂载数据目录
- /data/zookeeper/zoo1/datalog:/datalog # 挂载日志目录
zoo2:
image: zookeeper:3.8.4
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
volumes:
- /data/zookeeper/zoo2/data:/data
- /data/zookeeper/zoo2/datalog:/datalog
zoo3:
image: zookeeper:3.8.4
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
volumes:
- /data/zookeeper/zoo3/data:/data
- /data/zookeeper/zoo3/datalog:/datalog
四、启动 Zookeeper 集群
使用 docker-compose 启动整个集群(-d 参数表示后台运行):
[root@elk01 ~]# docker-compose up -d
[+] Building 0.0s (0/0)
[+] Running 4/4
? Network root_default Created
? Container root-zoo3-1 Started
? Container root-zoo1-1 Started
? Container root-zoo2-1 Started
五、验证集群状态
查看运行中的容器状态:
[root@elk01 ~]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
bda694884ef2 zookeeper:3.8.4 "/docker-entrypoint.…" 2 minutes ago Up 2 minutes 2888/tcp, 3888/tcp, 8080/tcp, 0.0.0.0:2183->2181/tcp, :::2183->2181/tcp root-zoo3-1
241783f4e656 zookeeper:3.8.4 "/docker-entrypoint.…" 2 minutes ago Up 2 minutes 2888/tcp, 3888/tcp, 8080/tcp, 0.0.0.0:2182->2181/tcp, :::2182->2181/tcp root-zoo2-1
6fc420d76571 zookeeper:3.8.4 "/docker-entrypoint.…" 2 minutes ago Up 2 minutes 2888/tcp, 3888/tcp, 0.0.0.0:2181->2181/tcp, :::2181->2181/tcp, 8080/tcp root-zoo1-1
查看指定节点的运行日志(以 zoo1 为例):
[root@elk01 ~]# docker-compose logs -f zoo1
六、集群功能测试
连接到任意节点(以 zoo3 为例),使用 zkCli.sh 客户端工具:
[root@elk01 ~]# docker exec -it root-zoo3-1 zkCli.sh -server 127.0.0.1:2181
[zk: 127.0.0.1:2181(CONNECTED) 0] ls /
[zookeeper]
[zk: 127.0.0.1:2181(CONNECTED) 1] create /test "我来了"
Created /test
[zk: 127.0.0.1:2181(CONNECTED) 2] get /test
我来了
2.验证数据同步:登录其他节点(如 zoo2)查看是否能获取到刚才创建的数据:
[root@elk01 ~]# docker exec -it root-zoo2-1 zkCli.sh -server 127.0.0.1:2181
端口说明:2181 为客户端连接端口,2888 为节点间数据同步端口,3888 为选举端口