ZooKeeper with Docker

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 - 集群健康信息
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

友情鏈接更多精彩內(nèi)容