使用 docker-compose 部署 zookeeper(单机和集群)

我之前编写了一些 zookeeper 的博客,当时是在 windows 系统上部署的单机版,在实际应用中绝大多数情况下都是部署在 Linux 系统上,因此很有必要介绍一下如何在 CentOS7 上快速部署 zookeeper 的单机版和集群版。

这里就不详细介绍 zookeeper 了,网上资料很多,也可以查看官网或者我之前的博客,我之前编写的相关博客地址如下:

zookeeper 部署和常用操作命令:https://www.cnblogs.com/studyjobs/p/16413055.html

对 zookeeper 进行增删改查:https://www.cnblogs.com/studyjobs/p/16460619.html

使用 zookeeper 实现分布式协调机制:https://www.cnblogs.com/studyjobs/p/16468221.html

使用 zookeeper 实现分布式锁:https://www.cnblogs.com/studyjobs/p/16488794.html

另外 zookeeper 的官网地址是:https://zookeeper.apache.org


一、单机版部署

我的 CentOS7 虚拟机 ip 地址是 192.168.136.128,已经安装好了 docker 和 docker-compose

在虚拟机上创建目录 mkdir -p /data/zookeeper 在其下面再创建两个目录 data 和 datalog,整体结构如下图:

image

编写 docker-compose.yml 文件,具体内容如下:

version: '3.2'
services:
  zoo1:
    image: zookeeper:latest
    restart: always
    container_name: zookeeper
    ports:
      - "2181:2181"
      - "8080:8080"
    volumes:
      - ./data:/data
      - ./datalog:/datalog
      - /etc/localtime:/etc/localtime

其中 2181 是 zookeeper 的连接端口,8080 是 zookeeper 提供的 web 界面操作端口

在 docker-compose.yml 所在目录运行命令 docker-compose up -d 启动服务,使用 docker-compose logs -f 查看启动日志

服务启动成功后,打开浏览器访问 http://192.168.136.128:8080/commands 查看服务提供的 web 操作界面,界面很简陋。

image

有兴趣的话,可以把上面的链接都点一下,熟悉了解一下。这里我们点击 server_stats 链接,可以查看 zookeeper 服务的状态:

image

要想操作 zookeeper ,还是得使用可视化工具比较方便,我介绍使用 prettyZoo 这个开源免费的可视化工具

prettyZoo 的 github 地址为:https://github.com/vran-dev/PrettyZoo

prettyZoo 的工具下载地址为:https://github.com/vran-dev/PrettyZoo/releases

我当前看到的最新版本是 v2.1.1,如下图所示:

image

我下载的是 zip 包,解压缩之后双击里面的 exe 程序即可启动可视化界面,可以设置为中文界面:

image

然后使用该工具连接到刚刚部署的 zookeeper,然后就可以很方便的查看 zookeeper 中的树节点,也可以进行增删改查操作

image

prettyZoo 可视化工具,使用起来很简单,也非常方便,这里就不详细介绍了


二、集群部署

有了上面单机部署的经验后,集群部署就简单很多了,创建 /data/zookeeper-cluster 目录,然后在其下面创建 3 个子目录 zk1、zk2、zk3

每个 zk 目录的结构跟上面的单机部署目录结构一样,都包含 2 个目录 data、datalog,如下图所示:

image

编写 docker-compose.yml 文件内容如下所示:

version: '3.2'

services:
  zk1:
    image: zookeeper:latest
    hostname: zk1
    container_name: zk1
    ports:
      - "2181:2181"
      - "8081:8080"
    environment:
      ZOO_MY_ID: 1
      ZOO_SERVERS: server.1=0.0.0.0:2888:3888;2181 server.2=zk2:2888:3888;2181 server.3=zk3:2888:3888;2181
    volumes:
      - ./zk1/data:/data
      - ./zk1/datalog:/datalog
      - /etc/localtime:/etc/localtime
    networks:
      - zk-net

  zk2:
    image: zookeeper:latest
    hostname: zk2
    container_name: zk2
    ports:
      - "2182:2181"
      - "8082:8080"
    environment:
      ZOO_MY_ID: 2
      ZOO_SERVERS: server.1=zk1:2888:3888;2181 server.2=0.0.0.0:2888:3888;2181 server.3=zk3:2888:3888;2181
    volumes:
      - ./zk2/data:/data
      - ./zk2/datalog:/datalog
      - /etc/localtime:/etc/localtime
    networks:
      - zk-net

  zk3:
    image: zookeeper:latest
    hostname: zk3
    container_name: zk3
    ports:
      - "2183:2181"
      - "8083:8080"
    environment:
      ZOO_MY_ID: 3
      ZOO_SERVERS: server.1=zk1:2888:3888;2181 server.2=zk2:2888:3888;2181 server.3=0.0.0.0:2888:3888;2181
    volumes:
      - ./zk3/data:/data
      - ./zk3/datalog:/datalog
      - /etc/localtime:/etc/localtime
    networks:
      - zk-net

# 给集群创建一个网络,名称自己随便定义,这里取名为 zk-net
networks:
  zk-net:
    driver: bridge

最后在 docker-compose.yml 所在目录运行命令 docker-compose up -d 启动服务

使用 docker-compose logs -f 命令可以实时查看 3 个 zookeeper 服务启动的日志。

zookeeper 的集群部署,最主要是配置 environment 环境变量,上面配置的 2 个环境变量含义如下:

  • ZOO_MY_ID 表示当前 zookeeper 实例在集群中的编号,范围为1-255,所以一个 zookeeper 集群最多有 255 个节点
  • ZOO_SERVERS 表示当前 zookeeper 实例所在集群中的所有节点的编号、主机名(或IP地址)、端口

zookeeper一共需要用到三个端口:

  • 2181:对客户端程序(如我们开发的 SpringBoot 程序)提供服务的连接端口
  • 3888:zookeeper 集群中的节点,选举 leader 使用的通信端口
  • 2888:集群内各节点之间的通讯端口(Leader监听此端口)

最后我们分别访问已经部署好的 zookeeper 的 3 个节点的 web 操作界面,访问其 server_stats 界面,查看其在集群中的角色

image

image

image


OK,到此为止,有关 zookeeper 的单机部署和集群部署,已经介绍完毕。

posted @ 2024-06-02 21:12  乔京飞  阅读(3278)  评论(0编辑  收藏  举报