本文已参与「新人创作礼」活动,一起开启掘金创作之路。
docker compose
引用官方介绍:
Compose 是一个用于定义和运行多容器 Docker 应用程序的工具。使用 Compose,可以使用 YAML 文件来配置应用程序的服务。然后,使用一个命令,您可以从您的配置中创建并启动所有服务。要了解有关 Compose 的所有功能的更多信息,请参阅功能列表。
综上,通过docker compose可以很方便的搭建集群,提高书写的便利性和提高可读性,简化我们的重复劳动以及降低出错概率。
Zookeeper 集群的搭建
Zookeeper 集群的机制是只要超过半数的节点正常,集群就能正常提供服务。只有在 Zookeeper 节点挂的太多,只剩一半或不到一半节点能工作,集群才失效。
我们最少需要启动 3 个Zookeeper示例才能搭建集群。
1.拉取镜像
docker pull zookeeper
2.实体机创建文件
用于映射到 docker 中的 Zookeeper。
├── zookeeper-1
│ ├── conf
│ │ └── zoo.cfg
│ ├── data
│ └── log
├── zookeeper-2
│ ├── conf
│ │ └── zoo.cfg
│ ├── data
│ └── log
└── zookeeper-3
├── conf
│ └── zoo.cfg
├── data
└── log
上面都是空文件夹居多,只有一个配置文件 zoo.cfg:
tickTime=2000
dataDir=/data
clientPort=2181 【我们创建 3 个节点,拷贝 3 份即可。注意依次递增2181、2182、2183】
initLimit=5
syncLimit=2
server.1=zookeeper-1:2887:3887
server.2=zookeeper-2:2888:3888
server.3=zookeeper-3:2889:3889
端口说明:
1、2181:对client端提供服务的端口
2、2888:集群内机器通讯使用(Leader监听此端口)
3、3888:选举leader使用
3.编写 docker compose 文件
docker-compose.yml
version: '3.7'
networks:
zk-net:
name: zk-net
services:
zookeeper-1:
image: zookeeper
hostname: zookeeper-1
container_name: zookeeper-1
ports:
- "2181:2181"
- "8081:8080"
environment:
ZOO_MY_ID: 1
ZOO_SERVERS: server.1=0.0.0.0:2887:3887;2181 server.2=zookeeper-2:2888:3888;2182 server.3=zookeeper-3:2889:3889;2183
volumes:
- /Users/lmmarise.j/docker/zookeeper/zookeeper-1/data:/data
- /Users/lmmarise.j/docker/zookeeper/zookeeper-1/log:/datalog
- /Users/lmmarise.j/docker/zookeeper/zookeeper-1/conf/zoo.cfg:/conf/zoo.cfg
networks:
- zk-net
zookeeper-2:
image: zookeeper
hostname: zookeeper-2
container_name: zookeeper-2
ports:
- "2182:2182"
- "8082:8080"
environment:
ZOO_MY_ID: 2
ZOO_SERVERS: server.1=zookeeper-1:2887:3887;2181 server.2=0.0.0.0:2888:3888;2182 server.3=zookeeper-3:2889:3889;2183
volumes:
- /Users/lmmarise.j/docker/zookeeper/zookeeper-2/data:/data
- /Users/lmmarise.j/docker/zookeeper/zookeeper-2/log:/datalog
- /Users/lmmarise.j/docker/zookeeper/zookeeper-2/conf/zoo.cfg:/conf/zoo.cfg
networks:
- zk-net
zookeeper-3:
image: zookeeper
hostname: zookeeper-3
container_name: zookeeper-3
ports:
- "2183:2183"
- "8083:8080"
environment:
ZOO_MY_ID: 3
ZOO_SERVERS: server.1=zookeeper-1:2887:3887;2181 server.2=zookeeper-2:2888:3888;2182 server.3=0.0.0.0:2889:3889;2183
volumes:
- /Users/lmmarise.j/docker/zookeeper/zookeeper-3/data:/data
- /Users/lmmarise.j/docker/zookeeper/zookeeper-3/log:/datalog
- /Users/lmmarise.j/docker/zookeeper/zookeeper-3/conf/zoo.cfg:/conf/zoo.cfg
networks:
- zk-net
注意:将配置中的绝对路径/Users/lmmarise.j/docker/zookeeper改为你机器配置所在的路径(docker-compose.yml的相对路径也可)。
4.启动 Zookeeper 集群
打开终端,进入到 docker-compose.yml 文件所在的文件夹。执行命令:docker-compose up -d
输出:
Creating zookeeper-2 ... done
Creating zookeeper-3 ... done
Creating zookeeper-1 ... done
Zookeeper 集群启动成功。