大數據系統架構實踐(一):Zookeeper集群部署
文章目錄
- 大數據系統架構實踐(一):Zookeeper集群部署
- 一、Zookeeper簡介
- 二、部署前準備
- 三、部署Zookeeper集群
- 1. 下載并解壓安裝包
- 2. 配置zoo.cfg
- 3. 設置日志目錄
- 4. 集群編號
- 5. 啟動zookeeper集群
- 5. 驗證集群狀態
- 總結
隨著微服務架構和分布式系統的快速發展,系統中各個服務之間的協調和狀態管理成為架構設計的重要一環。Zookeeper 作為 Apache 生態下的核心組件,提供了高可用的分布式協調服務,在 Hadoop、Kafka、HBase 等大數據平臺中都扮演著不可替代的角色。
在本系列中,我們將圍繞 Zookeeper 在大數據系統中的作用與部署實踐展開介紹。本篇作為第一篇,將聚焦于 Zookeeper 的核心概念、常見應用場景及基礎部署方式,為后續深入理解其在分布式架構中的地位打下基礎。
一、Zookeeper簡介
Zookeeper 是一個開源的分布式協調服務,主要用于維護配置信息、命名服務、分布式同步和集群管理。它的設計初衷是為分布式系統提供一致性保障,并簡化復雜的協調任務。
Zookeeper 的 核心特性
包括:
- 強一致性:所有客戶端都能讀取到最新的數據狀態
- 原子性:一次操作要么成功,要么失敗
- 順序性:所有更新按照順序執行
- 高可用性:通過集群部署實現故障容錯與快速恢復
Zookeeper 使用類 Unix 文件系統的層級數據模型,節點稱為 ZNode
。每個 ZNode 都可以存儲數據,并可具有子節點。常見節點類型:
- 持久節點(Persistent)
- 臨時節點(Ephemeral)
- 順序節點(Sequential)
這種結構為服務注冊、分布式鎖、選舉等提供了基礎。
二、部署前準備
Zookeeper 是一個典型的強一致性系統,采用的是 ZAB(Zookeeper Atomic Broadcast)協議,其核心思想是多數派寫成功即認為成功。因此:
- Zookeeper 集群必須部署在奇數臺服務器上(3、5、7…)
- 最小推薦部署為 3 臺節點,此時允許容忍 1 臺節點宕機仍可繼續提供服務
- 如果使用 2 臺節點,當 1 臺掛掉時,剩下的無法形成多數,整個集群將無法寫入
因此,3 節點集群在資源和高可用性之間提供了合理平衡,是生產環境中最常見的部署方式。
多數派投票原則:n = 2f + 1,f 是允許容忍的故障節點數量。3 臺機器允許 1 臺故障,5 臺允許 2 臺故障。
? 三臺服務器的配置與角色
節點名稱 | 主機名 | ip地址 | 說明 |
---|---|---|---|
master | master | 192.168.100.1 | 集群節點之一,參與選舉 |
slave1 | slave1 | 192.168.100.2 | 集群節點之一,參與選舉 |
slave2 | slave2 | 192.168.100.3 | 集群節點之一,參與選舉 |
? JDK 依賴環境
Zookeeper 是用 Java 編寫的,運行前請確保已安裝 JDK 1.8 或以上版本
三、部署Zookeeper集群
1. 下載并解壓安裝包
# 下載地址(以3.4.10版本為例)
https://archive.apache.org/dist/zookeeper/# 解壓移動
tar xf zookeeper-3.4.10.tar.gz
mv zookeeper-3.4.10 /usr/local/zookeeper
2. 配置zoo.cfg
cat > /usr/local/zookeeper/conf/zoo.cfg <<-EOF
tickTime=10000 # 心跳時間,ms
dataDir=/usr/local/zookeeper/data # 數據存儲路徑
clientPort=2181 # 端口號
initLimit=5 # Follower初始化連接Leader的超時時間限制
syncLimit=2 # Follower與Leader之間同步響應的最大延遲時間
server.1=master:2888:3888 # server.x 對應的是 myid 值
server.2=slave1:2888:3888
server.3=slave2:2888:3888
maxClientCnxns=1000 # 允許的最大連接數
maxSessionTimeout=300000 # 會話的最大超時時間,ms
EOF
3. 設置日志目錄
編輯日志配置文件,指定日志輸出目錄
mkdir -p /usr/local/zookeeper/logsvim /usr/local/zookeeper/conf/log4j.properties
# 修改如下變量:
# zookeeper.log.dir=/usr/local/zookeeper/logs
# zookeeper.tracelog.dir=/usr/local/zookeeper/logsvim /usr/local/zookeeper/bin/zkEnv.sh
# 設置 ZOO_LOG_DIR=/usr/local/zookeeper/logs
4. 集群編號
每臺節點的 myid 是其在 zoo.cfg 中的 server ID,并將目錄同步至其他節點
mkdir -p /usr/local/zookeeper/data
echo "3" > /usr/local/zookeeper/data/myid
scp -rp /usr/local/zookeeper root@slave2:/usr/local/ &>/dev/null
echo "2" > /usr/local/zookeeper/data/myid
scp -rp /usr/local/zookeeper root@slave1:/usr/local/ &>/dev/null
echo "1" > /usr/local/zookeeper/data/myid
5. 啟動zookeeper集群
# master
/usr/local/zookeeper/bin/zkServer.sh start
# slave1
ssh slave1 "/usr/local/zookeeper/bin/zkServer.sh start"
# slave2
ssh slave2 "/usr/local/zookeeper/bin/zkServer.sh start"
5. 驗證集群狀態
# 檢查端口是否監聽
netstat -tnlp | grep 2181
# 查看進程是否正常
ps -ef | grep QuorumPeerMain
# 查看集群狀態
/usr/local/zookeeper/bin/zkServer.sh status
總結
🚀 本文介紹了 Zookeeper 的核心概念與應用場景,并基于 3 臺服務器完成了 Zookeeper 集群的部署與配置。通過設置 zoo.cfg 配置文件、myid 標識、日志目錄和啟動腳本,我們搭建了一個基本的高可用協調服務,為后續大數據系統提供穩定的元數據和狀態支持。
?? 值得注意的是,Zookeeper 的 Leader 是通過選舉產生的,部署過程中不應人為指定具體節點為 Leader 或 Follower,所有節點都是平等參與選舉的角色。
📌 當前部署方式適用于 Hadoop、Kafka、HBase 等組件依賴的協調服務環境,是分布式系統架構的基礎支撐。
? 下一篇文章中,我們將繼續構建大數據系統核心組件 —— Hadoop 分布式文件系統(HDFS)與資源調度框架(YARN),并實現其與 Zookeeper 的集成與聯動,逐步完善整個大數據平臺的底座架構。