開發分布式應用時,往往需要高度可靠的分布式協調,Apache ZooKeeper 致力于開發和維護開源服務器,以實現高度可靠的分布式協調。具體內容見zookeeper官網。現代應用往往使用云原生技術進行搭建,如何用Docker搭建Zookeeper集群,這里介紹使用Docker Compose方式搭建分布式協調服務(Zookeeper)集群,適用于單機Docker環境,無論是本地單機開發、測試環境單機驗證,還是生產環境單機運行。
文章目錄
- 開發環境
- 開發流程
- 運行效果
- 配置代碼
- zookeeper.yaml
- README.md
開發環境
- ?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.3container_name: zk-node1hostname: 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-netzk-node2:image: zookeeper:3.9.3container_name: zk-node2hostname: zk-node2environment:ZOO_MY_ID: 2ZOO_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-netzk-node3:image: zookeeper:3.9.3container_name: zk-node3hostname: zk-node3environment:ZOO_MY_ID: 3ZOO_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
```