1. ZooKeeper 基礎(chǔ)
1.1 典型應(yīng)用
- 集中化配置管理
- DNS服務(wù),如微服務(wù)的注冊發(fā)現(xiàn)
- 組成員管理
- 分布式鎖
ZooKeeper適用于存儲和協(xié)同相關(guān)的關(guān)鍵數(shù)據(jù)窃植,不適用于大數(shù)據(jù)量的存儲巷怜。
1.2 使用Zookeeper服務(wù)
典型的C/S架構(gòu):
1.3 數(shù)據(jù)模型
ZooKeeper的數(shù)據(jù)模型是 層次模型
丛版,稱之為 Data tree
,類似于文件系統(tǒng)的樹形結(jié)構(gòu)胖替。
- 每個結(jié)點(
znode
)都可以保存數(shù)據(jù) - 每個節(jié)點都有版本
version
豫缨,版本從開始計數(shù) -
znode
支持全量的寫入和讀取 -
znode
分類:- 持久性 - 客戶端不主動刪除,不會消失
- 臨時性 - 客戶端沒在規(guī)定時間內(nèi)給ZooKeeper發(fā)消息燃箭,就會被自動清除
- 順序性 - znode名字后綴是一個單調(diào)遞增整數(shù)舍败,可和上述兩者組合使用
2. ZooKeeper in Docker
參考:https://hub.docker.com/_/zookeeper
standalone
模式:
# Start a Zookeeper server instance
docker run --name some-zookeeper --restart always -d zookeeper
# Connect to Zookeeper from the Zookeeper command line client
docker run -it --rm --link some-zookeeper:zookeeper zookeeper zkCli.sh -server zookeeper
replicated
模式(docker-compose):
version: "3.3"
services:
zoo1:
image: zookeeper:3.5
restart: always
hostname: zoo1
ports:
- 2181:2181
- 28080:8080
environment:
ZOO_MY_ID: 1
ZOO_SERVERS: server.1=0.0.0.0:2888:3888;2181 server.2=zoo2:2888:3888;2181 server.3=zoo3:2888:3888;2181
volumes:
- ./zookeeper/data/z1/data:/data
- ./zookeeper/data/z1/datalog:/datalog
zoo2:
image: zookeeper:3.5
restart: always
hostname: zoo2
ports:
- 2182:2181
environment:
ZOO_MY_ID: 2
ZOO_SERVERS: server.1=zoo1:2888:3888;2181 server.2=0.0.0.0:2888:3888;2181 server.3=zoo3:2888:3888;2181
volumes:
- ./zookeeper/data/z2/data:/data
- ./zookeeper/data/z2/datalog:/datalog
zoo3:
image: zookeeper:3.5
restart: always
hostname: zoo3
ports:
- 2183:2181
environment:
ZOO_MY_ID: 3
ZOO_SERVERS: server.1=zoo1:2888:3888;2181 server.2=zoo2:2888:3888;2181 server.3=0.0.0.0:2888:3888;2181
volumes:
- ./zookeeper/data/z3/data:/data
- ./zookeeper/data/z3/datalog:/datalog
常用配置項:
- ZOO_TICK_TIME - 服務(wù)器之間的心跳時間間隔,默認
2000
- ZOO_INIT_LIMIT - 允許
follower
在多少個tickTime
內(nèi)連接到leader
厕诡,默認5
- ZOO_SYNC_LIMIT - Leader 與 Follower 之間發(fā)送消息灵嫌,請求和應(yīng)答時間長度限制葛作,默認
2
- ZOO_MY_ID - 服務(wù)器標識猖凛,1~255之間
- ZOO_SERVERS - server.id=<address1>:<port1>:<port2>[:role];[<client port address>:]<client port>
- 客戶端接口形病,默認為
2181
- 管理端接口霞幅,默認為
8080
,http://localhost:8080/commands/stat.
3. 客戶端常用命令 - 支持TAB補齊
3.1 創(chuàng)建節(jié)點 - 默認創(chuàng)建持久節(jié)點
# 持久節(jié)點語法
create /path data
# 示例
create /FirstZnode “Myfirstzookeeper-app”
create /FirstZonde/c1 "test"
# 臨時節(jié)點語法
create -e /path data
#示例
create -e /SecondZnode “Ephemeral-data”
3.2 獲取數(shù)據(jù)
# 語法
get /path
# 示例
get /FirstZnode
3.3 監(jiān)控數(shù)據(jù)變化
# 語法
get -w /path
# 示例
get -w /FirstZnode
3.4 設(shè)置數(shù)據(jù)
# 語法
set /path data
# 示例
set /SecondZnode Data-updated
3.5 查看目錄
# 語法
ls /path
# 示例
ls /
ls -R / #列出所有目錄
ls /FirstZnode
3.6 查看節(jié)點狀態(tài)
# 語法
stat /path
# 示例
stat /FirstZnode
3.7 刪除節(jié)點
# 語法
rmr /path
# 示例
rmr /FirstZnode
4. 管理端四個字母的指令
如果配置了web管理端口(默認8080端口)途乃,則可以通過瀏覽器和四字命令來查看服務(wù)器狀態(tài)耍共。
在瀏覽器里打開:http://localhost:8080/commands/cons
猎塞,結(jié)果如下:
常用四字指令:
- conf - 配置信息
- cons - 所有客戶端連接信息
- crst - 重置所有客戶端連接的統(tǒng)計信息
- ruok - 測試服務(wù)器是否正常工作
- envi - 服務(wù)器環(huán)境詳情
- stat - 服務(wù)器和連接的信息
- wchs - 監(jiān)視器信息
- mntr - 集群健康信息