1. ZooKeeper 基礎(chǔ)
1.1 典型應(yīng)用
- 集中化配置管理
- DNS服務(wù),如微服務(wù)的注冊(cè)發(fā)現(xiàn)
- 組成員管理
- 分布式鎖
ZooKeeper適用于存儲(chǔ)和協(xié)同相關(guān)的關(guān)鍵數(shù)據(jù),不適用于大數(shù)據(jù)量的存儲(chǔ)。
1.2 使用Zookeeper服務(wù)
典型的C/S架構(gòu):

ZooKeeper應(yīng)用架構(gòu)
1.3 數(shù)據(jù)模型
ZooKeeper的數(shù)據(jù)模型是 層次模型,稱之為 Data tree,類似于文件系統(tǒng)的樹形結(jié)構(gòu)。
- 每個(gè)結(jié)點(diǎn)(
znode)都可以保存數(shù)據(jù) - 每個(gè)節(jié)點(diǎn)都有版本
version,版本從開始計(jì)數(shù) -
znode支持全量的寫入和讀取 -
znode分類:- 持久性 - 客戶端不主動(dòng)刪除,不會(huì)消失
- 臨時(shí)性 - 客戶端沒在規(guī)定時(shí)間內(nèi)給ZooKeeper發(fā)消息,就會(huì)被自動(dòng)清除
- 順序性 - znode名字后綴是一個(gè)單調(diào)遞增整數(shù),可和上述兩者組合使用

ZooKeeper數(shù)據(jù)模型
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
常用配置項(xiàng):
- ZOO_TICK_TIME - 服務(wù)器之間的心跳時(shí)間間隔,默認(rèn)
2000 - ZOO_INIT_LIMIT - 允許
follower在多少個(gè)tickTime內(nèi)連接到leader,默認(rèn)5 - ZOO_SYNC_LIMIT - Leader 與 Follower 之間發(fā)送消息,請(qǐng)求和應(yīng)答時(shí)間長(zhǎng)度限制,默認(rèn)
2 - ZOO_MY_ID - 服務(wù)器標(biāo)識(shí),1~255之間
- ZOO_SERVERS - server.id=<address1>:<port1>:<port2>[:role];[<client port address>:]<client port>
- 客戶端接口,默認(rèn)為
2181 - 管理端接口,默認(rèn)為
8080,http://localhost:8080/commands/stat.
3. 客戶端常用命令 - 支持TAB補(bǔ)齊
3.1 創(chuàng)建節(jié)點(diǎn) - 默認(rèn)創(chuàng)建持久節(jié)點(diǎn)
# 持久節(jié)點(diǎn)語法
create /path data
# 示例
create /FirstZnode “Myfirstzookeeper-app”
create /FirstZonde/c1 "test"
# 臨時(shí)節(jié)點(diǎn)語法
create -e /path data
#示例
create -e /SecondZnode “Ephemeral-data”
3.2 獲取數(shù)據(jù)
# 語法
get /path
# 示例
get /FirstZnode
3.3 監(jiān)控?cái)?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é)點(diǎn)狀態(tài)
# 語法
stat /path
# 示例
stat /FirstZnode
3.7 刪除節(jié)點(diǎn)
# 語法
rmr /path
# 示例
rmr /FirstZnode
4. 管理端四個(gè)字母的指令
如果配置了web管理端口(默認(rèn)8080端口),則可以通過瀏覽器和四字命令來查看服務(wù)器狀態(tài)。
在瀏覽器里打開:http://localhost:8080/commands/cons,結(jié)果如下:

管理端預(yù)覽
常用四字指令:
- conf - 配置信息
- cons - 所有客戶端連接信息
- crst - 重置所有客戶端連接的統(tǒng)計(jì)信息
- ruok - 測(cè)試服務(wù)器是否正常工作
- envi - 服務(wù)器環(huán)境詳情
- stat - 服務(wù)器和連接的信息
- wchs - 監(jiān)視器信息
- mntr - 集群健康信息