我之前編寫了一些 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,整體結構如下圖:
編寫 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 操作介面,介面很簡陋。
有興趣的話,可以把上面的連結都點一下,熟悉瞭解一下。這裡我們點選 server_stats
連結,可以檢視 zookeeper 服務的狀態:
要想操作 zookeeper ,還是得使用視覺化工具比較方便,我介紹使用 prettyZoo 這個開源免費的視覺化工具
prettyZoo 的 github 地址為:https://github.com/vran-dev/PrettyZoo
prettyZoo 的工具下載地址為:https://github.com/vran-dev/PrettyZoo/releases
我當前看到的最新版本是 v2.1.1,如下圖所示:
我下載的是 zip 包,解壓縮之後雙擊裡面的 exe 程式即可啟動視覺化介面,可以設定為中文介面:
然後使用該工具連線到剛剛部署的 zookeeper,然後就可以很方便的檢視 zookeeper 中的樹節點,也可以進行增刪改查操作
prettyZoo 視覺化工具,使用起來很簡單,也非常方便,這裡就不詳細介紹了
二、叢集部署
有了上面單機部署的經驗後,叢集部署就簡單很多了,建立 /data/zookeeper-cluster 目錄,然後在其下面建立 3 個子目錄 zk1、zk2、zk3
每個 zk 目錄的結構跟上面的單機部署目錄結構一樣,都包含 2 個目錄 data、datalog,如下圖所示:
編寫 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 介面,檢視其在叢集中的角色
OK,到此為止,有關 zookeeper 的單機部署和叢集部署,已經介紹完畢。