基于 Docker Compose 搭建 3 节点的 ZooKeeper 集群及数据同步测试
·
拉取 zookeeper 镜像
docker pull zookeeper:3.8
编辑对应的 zookeeper.yml 文件,配置如下:
version: '3.8'
services:
# 节点1:Server-01
Server-01:
container_name: Server-01
image: zookeeper:3.8
ports:
- "2181:2181" # 客户端连接端口
environment:
ZOO_MY_ID: 1 # 节点唯一ID
# 服务器列表格式:server.id=host:peerPort:leaderElectionPort:clientPort(补充clientPort支持重配置)
ZOO_SERVERS: server.1=Server-01:2888:3888;2181 server.2=Server-02:2888:3888;2181 server.3=Server-03:2888:3888;2181
volumes:
- ./Cluster-01/Server-01/data:/data # 数据持久化目录
- ./Cluster-01/Server-01/datalog:/datalog # 日志持久化目录
networks:
netzookeeper:
ipv4_address: 172.24.0.11
# 节点2:Server-02
Server-02:
container_name: Server-02
image: zookeeper:3.8
ports:
- "2182:2181"
environment:
ZOO_MY_ID: 2
ZOO_SERVERS: server.1=Server-01:2888:3888;2181 server.2=Server-02:2888:3888;2181 server.3=Server-03:2888:3888;2181
volumes:
- ./Cluster-01/Server-02/data:/data # 数据持久化目录
- ./Cluster-01/Server-02/datalog:/datalog # 日志持久化目录
networks:
netzookeeper:
ipv4_address: 172.24.0.12
# 节点3:Server-03
Server-03:
container_name: Server-03
image: zookeeper:3.8
ports:
- "2183:2181"
environment:
ZOO_MY_ID: 3
ZOO_SERVERS: server.1=Server-01:2888:3888;2181 server.2=Server-02:2888:3888;2181 server.3=Server-03:2888:3888;2181
volumes:
- ./Cluster-01/Server-03/data:/data
- ./Cluster-01/Server-03/datalog:/datalog
networks:
netzookeeper:
ipv4_address: 172.24.0.13
networks:
netzookeeper:
name: netzookeeper
driver: bridge # 自定义桥接网络,确保节点互通
ipam:
driver: default
config:
- subnet: 172.24.0.0/25 # 定义网络的子网范围,/25 表示子网掩码为 255.255.255.128
gateway: 172.24.0.1 # 网络的网关地址,用于容器与外部网络(如宿主机、其他网络)之间的通信路由
然后打开命令行,跳转到 zookeeper.yml 文件所在路径,输入以下命令:
docker-compose -f zookeeper.yml up -d

即搭建成功
接着进入容器 Server-01 内部,并切换到bin目录下
docker exec -it Server-01 bash
cd bin
启动 ZooKeeper 命令行客户端并连接到指定服务端
./zkCli.sh -server localhost:2181

出现如图所示情况,则说明成功通过 Zookeeper 客户端连接到 Server - 01 节点
创建节点test,并存储数据"hello zookeeper"
create /test "hello zookeeper"
查看 /test 节点的数据和元信息
get /test

新打开一个终端,进入 Server-02 节点的bin目录
docker exec -it Server-02 bash
cd bin
启动 ZooKeeper 命令行客户端并连接到指定服务端
./zkCli.sh -server localhost:2181

可看见在 Server-02 节点内也能查看到
随后返回 Server-01 所在终端,更新节点数据,将 /test 节点的数据更新为 "goodbye zookeeper",随后在/test节点下创建子节点/sub,并存储数据"sub node"
set /test "goodbye zookeeper"
create /test/sub "sub node"
在 Server-02 所在终端,输入以下命令查看操作是否同步完成
get /test
get /test/sub

最后返回 Server-01 所在终端,删除/test节点及其子节点
注意:删除节点前需先删除其所有子节点,否则会报错 "Node not empty"
delete /test/sub
delete /test

在 Server-02 所在终端,输入以下命令查看结果
ls /

完成测试后,输入 quit 退出交互模式
quit
以上测试说明了 ZooKeeper 集群节点间通信与同步机制正常,成功验证了 Zookeeper 集群的数据一致性和集群协同能力
更多推荐
所有评论(0)