一、准备工作
1、拉取zookeeper镜像
docker pull zookeeper
docker tag docker.io/zookeeper zookeeper
docker rmi docker.io/zookeeper
2、安装docker-compose工具
# 升级 pip
pip3 install --upgrade pip
# 指定 docker-compose 版本安装
pip install docker-compose==1.22
# 验证是否安装成功,有返回值,说明安装成功
docker-compose -v
3、创建相关文件夹
mkdir -p /data/docker-compose/zookeeper
mkdir -p /data/docker-data/zookeeper
二、使用docker-compose编排zookeeper集群
1、创建docker-compose.yml
cd /data/docker-compose/zookeeper
vi docker-compose.yml
version: '3.6'
services:
zoo1:
image: zookeeper
restart: always
hostname: zoo1
container_name: zoo1
ports:
- 2181:2181
environment:
ZOO_MY_ID: 1
ZOO_SERVERS: server.1=zoo1:2888:3888;2181 server.2=zoo2:2888:3888;2181 server.3=zoo3:2888:3888;2181
volumes:
- /data/docker-data/zookeeper/zoo1/data:/data
- /data/docker-data/zookeeper/zoo1/datalog:/datalog
zoo2:
image: zookeeper
restart: always
hostname: zoo2
container_name: zoo2
ports:
- 2182:2181
environment:
ZOO_MY_ID: 2
ZOO_SERVERS: server.1=zoo1:2888:3888;2181 server.2=zoo2:2888:3888;2181 server.3=zoo3:2888:3888;2181
volumes:
- /data/docker-data/zookeeper/zoo2/data:/data
- /data/docker-data/zookeeper/zoo2/datalog:/datalog
zoo3:
image: zookeeper
restart: always
hostname: zoo3
container_name: zoo3
ports:
- 2183:2181
environment:
ZOO_MY_ID: 3
ZOO_SERVERS: server.1=zoo1:2888:3888;2181 server.2=zoo2:2888:3888;2181 server.3=zoo3:2888:3888;2181
volumes:
- /data/docker-data/zookeeper/zoo3/data:/data
- /data/docker-data/zookeeper/zoo3/datalog:/datalog
2、执行构建consul集群
cd /data/docker-compose/zookeeper
docker-compose up -d
3、进入容器验证集群是否构建成功
docker exec -it zoo1 bash
zkServer.sh status
返回下面信息,说明集群搭建成功
root@zoo1:/# zkServer.sh status
ZooKeeper JMX enabled by default
Using config: /conf/zoo.cfg
Client port found: 2181. Client address: localhost. Client SSL: false.
Mode: follower
可以看到,zoo1是follower角色
再依次到zoo2、zoo3中看,最后发现,zoo3是leader角色,其他两个是follower角色,这是三台zookeeper内部选举的结果,无需我们干预。
我们通过docker stop zoo3
把leader zoo3关掉,再分别进zoo1、zoo2,会发现,zoo2变成leader了,这也说明了zookeeper集群中,主从角色不需要我们人为干预,其内部会自己进行选举。
到这里,zookeeper集群就搭建好了。