开发分布式应用时,往往需要高度可靠的分布式协调,Apache ZooKeeper 致力于开发和维护开源服务器,以实现高度可靠的分布式协调。具体内容见zookeeper官网。现代应用往往使用云原生技术进行搭建,如何用Docker搭建Zookeeper集群,这里介绍使用Docker Compose方式搭建分布式协调服务(Zookeeper)集群,适用于单机Docker环境,无论是本地单机开发、测试环境单机验证,还是生产环境单机运行。
开发环境
- macOS For Apple Silicon;
- Idea;
- Docker Desktop: 4.41.2,Engine:28.1.1,Compose: v2.35.1-desktop.1;
- Docker镜像:zookeeper:3.9.3;
- Docker Compose配置文件:zookeeper-cluster.yaml;
- 命令行启动配置文件:README.md.
开发流程
- 下载Docker Desktop并安装,Docker Desktop For Mac Apple Silicon地址;
- 编写Docker Compose配置文件,配置3个结点,每个结点的ZOO_MY_ID分别为1-3,配置客户端连接、集群结点通信端口和集群选举端口,配置3个服务结点.工程文件见zookeeper-cluster.yaml;
- 执行启动集群结点命令;
- 应用连接zookeeper集群的连接串设置为localhost:12181,localhost:22181,localhost:32181,如spring.cloud. zookeeper.connect-string=localhost:12181,localhost:22181,localhost:32181.
运行效果
启动集群图
配置代码
zookeeper.yaml
version: "3.8"
services:
zk-node1:
image: zookeeper:3.9.3
container_name: zk-node1
hostname: zk-node1 # 主机名用于集群通信
environment:
ZOO_MY_ID: 1 # 节点唯一标识:ml-citation{ref="3,4" data="citationList"}
ZOO_SERVERS: "server.1=zk-node1:2888:3888;2181 server.2=zk-node2:2888:3888;2181 server.3=zk-node3:2888:3888;2181"
ports:
- "12181:2181" # 客户端连接端口
- "12888:2888" # 集群节点通信端口
- "13888:3888" # 集群选举端口
networks:
- zk-cluster-net
zk-node2:
image: zookeeper:3.9.3
container_name: zk-node2
hostname: zk-node2
environment:
ZOO_MY_ID: 2
ZOO_SERVERS: "server.1=zk-node1:2888:3888;2181 server.2=zk-node2:2888:3888;2181 server.3=zk-node3:2888:3888;2181"
ports:
- "22181:2181" # 客户端连接端口
- "22888:2888" # 集群节点通信端口
- "23888:3888" # 集群选举端口
networks:
- zk-cluster-net
zk-node3:
image: zookeeper:3.9.3
container_name: zk-node3
hostname: zk-node3
environment:
ZOO_MY_ID: 3
ZOO_SERVERS: "server.1=zk-node1:2888:3888;2181 server.2=zk-node2:2888:3888;2181 server.3=zk-node3:2888:3888;2181"
ports:
- "32181:2181" # 客户端连接端口
- "32888:2888" # 集群节点通信端口
- "33888:3888" # 集群选举端口
networks:
- zk-cluster-net
networks:
zk-cluster-net:
driver: bridge # 统一网络确保容器互联:ml-citation{ref="4,7" data="citationList"}
README.md
### zk集群启动
```shell
docker-compose -f zookeeper-cluster.yaml up -d
```
### zk集群停止
```shell
docker-compose -f zookeeper-cluster.yaml down
```