单机 Docker 容器中搭建 Zookeeper 集群

171 阅读2分钟

本文已参与「新人创作礼」活动,一起开启掘金创作之路。

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 集群启动成功。