docker快速搭建zookeeper集群

一、准备工作

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集群就搭建好了。