《裝機模擬器》1.15版本更新 大量新裝機部件上線
1. 概念
zookeeper主要是檔案系統和通知機制
檔案系統主要是用來儲存資料
通知機制主要是伺服器或者客戶端進行通知,並且監督
基於觀察者模式設計的分散式服務管理框架,開源的分散式框架
特點
一個leader,多個follower的叢集
叢集只要有半數以上包括半數就可正常服務,一般安裝奇數臺伺服器
全域性資料一致,每個伺服器都儲存同樣的資料,實時更新
更新的請求順序保持順序(來自同一個伺服器)
資料更新的原子性,資料要麼成功要麼失敗
資料實時更新性很快
主要的叢集步驟為
服務端啟動時去註冊資訊(建立都是臨時節點)
獲取到當前線上伺服器列表,並且註冊監聽
伺服器節點下線
伺服器節點上下線事件通知
process(){重新再去獲取伺服器列表,並註冊監聽}
資料結構
與 Unix 檔案系統很類似,可看成樹形結構,每個節點稱做一個 ZNode。每一個 ZNode 預設能夠儲存 1MB 的資料。也就是隻能儲存小資料
應用場景
統一命名服務(域名服務)
統一配置管理(一個叢集中的所有配置都一致,且也要實時更新同步)
將配置資訊寫入ZooKeeper上的一個Znode,各個客戶端伺服器監聽這個Znode。一旦Znode中的資料被修改,ZooKeeper將通知各個客戶端伺服器
統一叢集管理(掌握實時狀態)
將節點資訊寫入ZooKeeper上的一個ZNode。監聽ZNode獲取實時狀態變化
伺服器節點動態上下線
軟負載均衡(根據每個節點的訪問數,讓訪問數最少的伺服器處理最新的資料需求)
2. 安裝
bin目錄 框架啟動停止,客戶端和服務端的
conf 配置檔案資訊
docs文件
lib 配置文件的依賴
2.1 配置檔案解讀
配置檔案的5大引數
tickTime = 2000傳送時間
initLimit = 10初始化通訊的時間,最多不能超過的時間,超過的話,通訊失敗
syncLimit = 5建立好連線後,下次的通訊時間如果超過,通訊失敗
dataDir儲存zookeeper的資料,預設是temp會被系統定期清除clientPort = 2181客戶端的連線埠,一般不需要修改
3. zookeeper叢集操作
3.1 叢集安裝
3.1.1 叢集安裝
比如三個節點部署zookeeper
那麼需要3臺伺服器
在每臺伺服器中解壓zookeeper壓縮包並修改其配置檔案等
區別在於下面
要在建立儲存zookeeper的資料資料夾中
新建一個myid檔案(和原始碼的myid對應上)相當於伺服器的唯一編號
具體編號是多少,對應該伺服器是哪一臺伺服器編號
之後將其終端執行xsync /opt/apache-zookeeper-3.5.7-bin
,主要功能是同步髮腳本
在conf的配置檔案zoo.cfg末尾新增如下配置
標識伺服器的編號
server.2=hadoop102:2888:3888
server.3=hadoop103:2888:3888
server.4=hadoop104:2888:3888
當前主要配置編號的引數是server.A=B:C:D
A標識第幾臺伺服器
B標識伺服器地址
C標識伺服器 Follower 與叢集中的 Leader 伺服器交換資訊的埠
D主要是選舉,如果Leader 伺服器掛了。這個埠就是用來執行選舉時伺服器相互通訊的埠,通過這個埠進行重新選舉leader
配置檔案以及伺服器編號設定好後即可啟動
3.1.2 選舉機制
以下主要是面試的重點
區分好第一次啟動與非第一次啟動的步驟
epoch在沒有leader的時候,主要是邏輯時鐘(與數位電路中的邏輯時鐘相同)
非第一次啟動,在沒有leader的時候
其判斷依據是:epoch任職期>事務id>伺服器sid
3.1.3 叢集啟動停止指令碼
如果伺服器太多,需要一臺一臺啟動和關閉會比較麻煩
指令碼檔案大致如下:
建立一個字尾名為sh的檔案
#!/bin/bash
case $1 in
"start"){
for i in hadoop102 hadoop103 hadoop104
do
echo ---------- zookeeper $i 啟動 ------------
ssh $i "/opt/module/zookeeper-3.5.7/bin/zkServer.sh
start"
done
};;
"stop"){
for i in hadoop102 hadoop103 hadoop104
do
echo ---------- zookeeper $i 停止 ------------
ssh $i "/opt/module/zookeeper-3.5.7/bin/zkServer.sh
stop"
done
};;
"status"){
for i in hadoop102 hadoop103 hadoop104
do
echo ---------- zookeeper $i 狀態 ------------
ssh $i "/opt/module/zookeeper-3.5.7/bin/zkServer.sh
status"
done
};;
esac
修改該檔案的許可權
通過chmod 777 zk.sh
之後在一個伺服器中執行./zk.sh start就可啟動指令碼檔案,其他命令也如此
檢視其程序號
可以通過jpsall 就可檢視所有伺服器的程序
3.2 客戶端命令
3.2.1 常用命令
命令 功能
help 顯示所有操作命令
ls path 使用 ls 命令來檢視當前 znode 的子節點 [可監聽] ,-w 監聽子節點變化,-s 附加次級資訊
create 普通建立
-s 含有序列
-e 臨時(重啟或者超時消失)
get path 獲得節點的值 [可監聽] ,-w 監聽節點內容變化
-s 附加次級資訊
set 設定節點的具體值
stat 檢視節點狀態
delete 刪除節點
deleteall 遞迴刪除節點
通過ls /
檢視當前znode包含的資訊
[zk: localhost:2181(CONNECTED) 0] ls /
[zookeeper]
檢視當前資料節點詳細資訊ls -s /
名稱 表述
czxid 建立節點的事務 zxid,每次修改 ZooKeeper 狀態都會產生一個 ZooKeeper 事務 ID。事務 ID 是 ZooKeeper 中所有修改總的次序。每次修改都有唯一的 zxid,如果 zxid1 小於 zxid2,那麼 zxid1 在 zxid2 之前發生。
ctime znode 被建立的毫秒數(從 1970 年開始)
mzxid znode 最後更新的事務 zxid
mtime znode 最後修改的毫秒數(從 1970 年開始)
pZxid znode 最後更新的子節點 zxid
cversion znode 子節點變化號,znode 子節點修改次數
dataversion znode 資料變化號
aclVersion znode 訪問控制列表的變化號
ephemeralOwner 如果是臨時節點,這個是 znode 擁有者的 session id。如果不是臨時節點則是 0
dataLength znode 的資料長度
numChildren znode 子節點數量