docker-compose搭建Zookeeper集群(3个节点)
·
1.首先创建一个zk-cluster文件夹并创建zk-*三个目录
2.创建docker-compose.yml文件,完成3 节点集群配置,内容如下
version: '3.8'
services:
zk1:
image: zookeeper:3.8 # 使用官方Zookeeper镜像
container_name: zk1
restart: always
ports:
- "2181:2181" # 客户端端口
environment:
ZOO_MY_ID: 1 # 节点ID(唯一)
ZOO_SERVERS: server.1=zk1:2888:3888;2181 server.2=zk2:2888:3888;2181 server.3=zk3:2888:3888;2181
volumes:
- ./zk1/data:/data # 数据持久化目录
- ./zk1/datalog:/datalog # 日志持久化目录
networks:
- zk-network
zk2:
image: zookeeper:3.8
container_name: zk2
restart: always
ports:
- "2182:2181"
environment:
ZOO_MY_ID: 2
ZOO_SERVERS: server.1=zk1:2888:3888;2181 server.2=zk2:2888:3888;2181 server.3=zk3:2888:3888;2181
volumes:
- ./zk2/data:/data
- ./zk2/datalog:/datalog
networks:
- zk-network
zk3:
image: zookeeper:3.8
container_name: zk3
restart: always
ports:
- "2183:2181"
environment:
ZOO_MY_ID: 3
ZOO_SERVERS: server.1=zk1:2888:3888;2181 server.2=zk2:2888:3888;2181 server.3=zk3:2888:3888;2181
volumes:
- ./zk3/data:/data
- ./zk3/datalog:/datalog
networks:
- zk-network
networks:
zk-network:
driver: bridge # 自定义桥接网络,确保节点互通
节点 ID(ZOO_MY_ID):每个节点必须有唯一 ID(1-255),通过环境变量指定,对应数据目录下的myid文件。
集群通信配置(ZOO_SERVERS):格式:server.ID=主机名:通信端口:选举端口;客户端端口
2888:节点间数据同步端口
3888: Leader 选举端口
2181:客户端连接端口
持久化:通过volumes挂载本地目录到容器的/data(数据)和/datalog(事务日志),避免容器重启后数据丢失。
网络:自定义zk-network确保 3 个节点在同一网络,可通过容器名互相访问。
3.启动集群
docker-compose up -d
docker-compose ps # 检查容器是否运行
4.数据同步性测试
docker exec -it zk1 zkCli.sh #进入zk1客户端
create /test "hello zk cluster" # 创建节点
get /test # 查看数据(确认写入)
quit退出客户端 并进入zk2、zk3测试同上
5.停止集群
docker-compose down
更多推荐
所有评论(0)