使用 docker-compose 部署 zookeeper(單機和叢集)

乔京飞發表於2024-06-02

我之前編寫了一些 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 的單機部署和叢集部署,已經介紹完畢。

相關文章