前置条件
安装Docker Engine,并搭建一个swarm集群。参考文章
swarm集群创建一个覆盖网络xxl
//同一个覆盖网络的服务可以通过服务名和ip互相访问,不同的覆盖网络不行
docker network create -d overlay --scope swarm --subnet 172.22.0.0/16 --gateway 172.22.0.1 xxl
编写zookeeper.yml配置文件
version: "3.7"
networks:
xxl:
external: true //为true表示网络在stack外已经创建,deploy时不用创建
name: xxl
driver: overlay
ipam:
config:
- subnet: 172.22.0.0/16
services:
zoo1:
image: zookeeper:3.5.6
networks:
- xxl
volumes:
- ./zk/data1:/data
- ./zk/log1:/datalog
environment:
ZOO_MY_ID: 1
ZOO_SERVERS: server.1=0.0.0.0:2888:3888;2181 server.2=zoo2:2888:3888;2181 server.3=zoo3:2888:3888;2181
deploy:
replicas: 1
zoo2:
image: zookeeper:3.5.6
networks:
- xxl
volumes:
- ./zk/data2:/data
- ./zk/log2:/datalog
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
deploy:
replicas: 1
depends_on: //避免出现错误
- zoo1
zoo3:
image: zookeeper:3.5.6
networks:
- xxl
volumes:
- ./zk/data3:/data
- ./zk/log3:/datalog
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
deploy:
replicas: 1
depends_on:
- zoo2
zkweb:
image: tobilg/zookeeper-webui:latest
networks:
- xxl
ports:
- "2100:2100"
environment:
- HTTP_PORT=2100
- ZK_DEFAULT_NODE=zoo1:2181
- USER=***
- PASSWORD=***
deploy:
replicas: 1
depends_on:
- zoo1
- zoo2
- zoo3
部署服务栈
//部署
docke swarm deploy -c zookeeper.yml zk
//移除
docker swarm rm zk
说明
- 集群中每个节点的状态一致,三个节点完全等价
- 通过zkServer status查看节点的角色
- 覆盖网络内,通过zkCli连接每个节点查看信息