目錄
- 1.1、概述
- 1.2、系統環境
- 1.3、部署流程
- 1.3.1、下載安裝包
- 1.3.2、解壓文件
- 1.3.3、創建數據目錄和日志目錄
- 1.3.4、配置ZooKeeper
- 1.3.5、啟動ZooKeeper服務
- 1.3.6、連接和驗證
- 1.4、Zookeeper服務管理命令
- 1.4.1、啟動Zookeeper服務
- 1.4.2、停止Zookeeper服務
- 1.4.3、查看Zookeeper服務狀態
- 1.4.4、重啟Zookeeper服務
1.1、概述
????????ZooKeeper 的搭建模式包括單機模式、集群模式和偽集群模式,分別適用于不同的場景和需求,從簡單的單節點測試環境到復雜的多節點高可用生產環境。在實際部署時,應根據系統的可用性要求、數據量、并發負載等因素選擇合適的部署模式。
- 單機模式(Standalone Mode)
????????在單機模式下,ZooKeeper 僅在一個單獨的服務器節點上運行。這種模式主要用于開發測試環境,便于快速部署和調試。由于只有一個節點,沒有數據冗余和故障轉移機制,因此不具備高可用性。單節點故障會導致整個服務不可用,不適用于生產環境。 - 集群模式(Cluster Mode / Distributed Mode)
????????集群模式是 ZooKeeper 在生產環境中推薦使用的部署模式。它由多個(通常為奇數個,如 3、5、7 等)獨立的服務器節點組成一個 ZooKeeper 集群。每個節點既是服務提供者又是服務消費者,它們之間通過心跳機制保持通信,并通過 ZAB(ZooKeeper Atomic Broadcast)協議實現數據的復制、同步和一致性保證。集群模式提供了高可用性、容錯性和可擴展性,即使部分節點發生故障,只要集群中存活節點的數量大于等于半數(即形成“多數派”),ZooKeeper 集群就能繼續對外提供服務。 - 偽集群模式(Pseudo-Distributed Mode / Local Cluster Mode)
????????偽集群模式是在單臺物理或虛擬機上模擬多節點集群的部署方式。在同一臺機器上啟動多個 ZooKeeper 服務實例,每個實例配置不同的端口、數據目錄和身份標識(如服務器ID)。盡管所有節點實際上運行在同一臺機器上,但從邏輯上看,它們形成了一個小型的 ZooKeeper 集群,能夠模擬集群模式的行為,包括數據復制、節點選舉等。偽集群模式常用于本地開發和測試環境,便于在單機上模擬多節點集群環境,驗證分布式協調邏輯。
1.2、系統環境
????????zookeeper服務器是用Java創建的,運行在JVM之上。需要安裝JDK7以上版本(最好JDK8或以上)。如果服務器上沒有JDK環境請自行安裝,這里不在贅述。具體系統環境如下:
環境名稱 | 版本號 |
---|---|
操作系統 | CentOS Linux release 8.4.2105 |
JDK | 17.0.7 |
ZooKeeper | 3.8.4 |
1.3、部署流程
????????本文將在操作系統為CentOS Linux release 8.4.2105、Java環境為JDK17.0.7的服務器上部署ZooKeeper3.8.4版本,具體流程如下:
1.3.1、下載安裝包
????????用戶可以自行在Apache ZooKeeper官網 ,選擇最新穩定版本進行下載。在國內,從官網的下載速度較慢,可以從博主提供的資源地址下載:資源下載,也可以選擇國內鏡像站下載,比如阿里鏡像站:阿里鏡像 。官網下載和阿里鏡像下載如下:
????????下載文件一般為一個.tar.gz或.zip格式的壓縮包,例如 apache-zookeeper-3.8.4-bin.tar.gz。下載后將安裝包保存在服務器上的自定義目錄下即可,比如:/usr/local/ZooKeeper。
1.3.2、解壓文件
????????對于.tar.gz文件,可以使用以下命令進行文件解壓。命令如下:
tar -xvzf apache-zookeeper-3.8.4-bin.tar.gz
????????解壓后,將會生成一個名為 apache-zookeeper-3.8.4-bin 的目錄,該目錄即為ZooKeeper的安裝目錄。為了方便配置,可以重命名 ZooKeeper 安裝目錄。解壓后的目錄結構如下:
1.3.3、創建數據目錄和日志目錄
????????根據ZooKeeper的配置要求,需要創建兩個目錄分別用于存放數據和日志。如果不需要單獨存放日志時,data 和 logs 可以共用一個目錄。命令如下:
mkdir /data/zookeeper/data
mkdir /data/zookeeper/logs
1.3.4、配置ZooKeeper
????????進入 apache-zookeeper-3.8.4-bin/conf 目錄,使用 cp zoo_sample.cfg zoo.cfg 命令拷貝 zoo_sample.cfg 到當前目錄。拷貝結果如下:
????????使用文本編輯器(如 vi、nano 或 emacs)打開 zoo.cfg 文件并進行如下配置:# 數據目錄設置 dataDir=/data/zookeeper/data # 日志目錄設置(如果需要單獨存放日志) dataLogDir=/data/zookeeper/logs # 客戶端連接端口 clientPort=2181。最終配置文件如下:
????????配置文件參數詳解
- tickTime
????????時鐘每跳的時間,默認值是2000毫秒,也就是2秒。 - initLimit
????????初始化集群時集群節點同步超時時間,默認值是10跳,也就是20秒。 - syncLimit
????????集群在運行過程中同步數據超時時間,默認值是5跳,也就是10秒。 - dataDir
????????數據存儲位置。 - dataLogDir
????????日志存儲位置。 - clientPort
????????ZooKeeper服務監聽的端口,客戶端連接的端口。 - maxClientCnxns
????????端連接線程池的數量,也就是最大客戶端連接數量。
1.3.5、啟動ZooKeeper服務
????????進入 apache-zookeeper-3.8.4-bin/bin 目錄,執行 ./zkServer.sh start 命令啟動 Zookeeper服務,啟動成功后的效果如下:
1.3.6、連接和驗證
????????驗證單機模式運行狀態可以通過查看日志或客戶端連接的方式來驗證,具體如下:
- 查看日志
????????檢查指定的 dataLogDir 中的ZooKeeper日志文件,確認是否有啟動成功的消息和其他異常信息。 - 使用命令行客戶端
????????在ZooKeeper安裝目錄下,執行命令行客戶端以連接到本地ZooKeeper服務:./zkCli.sh -server localhost:2181,如果連接成功,客戶端將顯示歡迎信息及提示符 [zkshell:0]。你可以嘗試執行一些基本的命令,如 ls / 查看根節點下的子節點列表,驗證ZooKeeper服務的響應。具體如下:
1.4、Zookeeper服務管理命令
1.4.1、啟動Zookeeper服務
zkServer.sh start
1.4.2、停止Zookeeper服務
zkServer.sh stop
1.4.3、查看Zookeeper服務狀態
zkServer.sh status
1.4.4、重啟Zookeeper服務
zkServer.sh restart