Zookeeper實戰—Zookeeper單機環境搭建&命令使用

zookeeper介紹

Zookeeper作爲一個協調管理者被用在分佈式系統中。當設計一個分佈式系統時,一般需要設計和開發一些協調服務:

  • 名稱服務— 名稱服務是將一個名稱映射到與該名稱有關聯的一些信息的服務。電話目錄是將人的名字映射到其電話號碼的一個名稱服務。同樣,DNS 服務也是一個名稱服務,它將一個域名映射到一個 IP 地址。在分佈式系統中,您可能想跟蹤哪些服務器或服務在運行,並通過名稱查看其狀態。ZooKeeper 暴露了一個簡單的接口來完成此工作。也可以將名稱服務擴展到組成員服務,這樣就可以獲得與正在查找其名稱的實體有關聯的組的信息。
  • 鎖定— 爲了允許在分佈式系統中對共享資源進行有序的訪問,可能需要實現分佈式互斥(distributed mutexes)。ZooKeeper 提供一種簡單的方式來實現它們。
  • 同步— 與互斥同時出現的是同步訪問共享資源的需求。無論是實現一個生產者-消費者隊列,還是實現一個障礙,ZooKeeper 都提供一個簡單的接口來實現該操作。
  • 配置管理— 您可以使用 ZooKeeper 集中存儲和管理分佈式系統的配置。這意味着,所有新加入的節點都將在加入系統後就可以立即使用來自 ZooKeeper 的最新集中式配置。這還允許您通過其中一個 ZooKeeper 客戶端更改集中式配置,集中地更改分佈式系統的狀態。
  • 領導者選舉— 分佈式系統可能必須處理節點停機的問題,您可能想實現一個自動故障轉移策略。ZooKeeper 通過領導者選舉對此提供現成的支持。

單機安裝

下載zookeeper

下載zookeeper,這裏使用的是3.4.9

配置環境變量

ZK_HOME=/Users/lidongmeng/software/zookeeper-3.4.9
PATH=$PATH:$ZK_HOME/bin

修改配置文件

複製conf/zoo_sample.cfgconf/zoo.cfg中,並添加dataDir配置,如下所示,指定自己的存儲目錄:

dataDir=/Users/lidongmeng/software/zookeeper-3.4.9/data

啓動&常用命令使用

server

server 啓動

zkServer {start|start-foreground|stop|restart|status|upgrade|print-cmd}

$: zkServer start
ZooKeeper JMX enabled by default
Using config: /usr/local/etc/zookeeper/zoo.cfg
Starting zookeeper ... STARTED

查看server 狀態

$: zkServer status
ZooKeeper JMX enabled by default
Using config: /usr/local/etc/zookeeper/zoo.cfg
Mode: standalone

Client

cli啓動

$: zkCli
Connecting to localhost:2181
Welcome to ZooKeeper!
JLine support is enabled

WATCHER::

WatchedEvent state:SyncConnected type:None path:null
[zk: localhost:2181(CONNECTED) 0]

create : 創建新的node

create [-s] [-e] path data acl

-s或者-e是指定節點特性:順序或者臨時節點,默認是持久節點

[zk: localhost:2181(CONNECTED) 21] create /zk-book 123
Created /zk-book

ls: 查看當前 ZooKeeper 中所包含的內容

ls path [watch]

path 是指定的數據節點的節點路徑

[zk: localhost:2181(CONNECTED) 0] ls /
[zk-book, zookeeper]
[zk: localhost:2181(CONNECTED) 1] ls /zk-book
[]

get: 查看當前 ZooKeeper指定節點的內容和屬性信息

get path [watch]

[zk: localhost:2181(CONNECTED) 2] get /zk-book
123
cZxid = 0x21c
ctime = Tue Feb 25 18:23:05 CST 2020
mZxid = 0x21c
mtime = Tue Feb 25 18:23:05 CST 2020
pZxid = 0x21c
cversion = 0
dataVersion = 0
aclVersion = 0
ephemeralOwner = 0x0
dataLength = 3
numChildren = 0

set: 更新指定節點的內容

set path data [version]

[zk: localhost:2181(CONNECTED) 3] set /zk-book 1000
cZxid = 0x21c
ctime = Tue Feb 25 18:23:05 CST 2020
mZxid = 0x21f
mtime = Wed Feb 26 08:40:45 CST 2020
pZxid = 0x21c
cversion = 0
dataVersion = 1
aclVersion = 0
ephemeralOwner = 0x0
dataLength = 4
numChildren = 0
[zk: localhost:2181(CONNECTED) 4] get /zk-book
1000
cZxid = 0x21c
ctime = Tue Feb 25 18:23:05 CST 2020
mZxid = 0x21f
mtime = Wed Feb 26 08:40:45 CST 2020
pZxid = 0x21c
cversion = 0
dataVersion = 1
aclVersion = 0
ephemeralOwner = 0x0
dataLength = 4
numChildren = 0

delete: 刪除 ZooKeeper 中的指定節點

delete path [version]

無法刪除一個包含子節點的node

[zk: localhost:2181(CONNECTED) 5] delete /zk-book
[zk: localhost:2181(CONNECTED) 6] ls /
[zookeeper]
[zk: localhost:2181(CONNECTED) 7]

參考

  1. https://www.ibm.com/developerworks/cn/data/library/bd-zookeeper/index.html
  2. https://blog.csdn.net/dongdong9223/article/details/81349965
  3. 從Paxos到zookeeper分佈式一致性原理與實踐
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章