Zookeeper系列(一):它是幹什麼的

Zookeeper是一款開源的分佈式存儲系統。node

ZooKeeper主要是用來解決分佈式應用中常常遇到的一些數據管理問題,如:統一命名服務、狀態同步服務、集羣管理、分佈式應用配置項的管理等。git

Zookeeper分紅客戶端和服務端兩部分,服務端一般運行於集羣模式,統一爲客戶端提供分佈式數據一致性管理服務,集羣可提供水平擴展能力,以及避免單點故障。github

ZooKeeper讓分佈式進程可經過共享的、與標準文件系統相似的分層名字空間相互協調。名字空間由znode組成,znode是和文件目錄相似的樹形結構。有子節點,而且ZooKeeper爲znode提供了常駐內存服務,提升性能。apache

Zookeeper還提供了數據動態監測機制, 客戶端註冊監聽它關心的目錄節點,當znode發生變化(數據改變、被刪除、子目錄節點增長刪除)時,客戶端會觸發註冊事件。 服務器

ZooKeeper的實現很重視高性能、高可用性,以及嚴格的順序訪問。高性能意味着可將ZooKeeper用於大的分佈式系統。可靠性使之可避免單點失敗。嚴格的順序訪問使得客戶端能夠實現複雜的同步原語。分佈式

服務端一般有多臺服務器,這些服務器都經過QuorumPeer進程維持分佈式系統間的數據交換,選舉領導者(Leader)和追隨者(Follower),動態監控集羣,一旦發生節點故障則從新啓動選舉流程,選出新的Leader。每一個服務器維護相同的一份全局數據,經過QuorumPeer維持數據之間的同步,這樣提供高可靠性和橫向擴展性。性能

源碼地址:https://github.com/apache/zookeeperui

文件目錄結構,爲了方便解析整個ZooKeeper的源碼結構,這裏只是列出主要的目錄和文件:命令行

  • /:根目錄下主要是ZooKeeper客戶端相關的文件日誌

  • /cli:命令行方式的Java類

  • /server:ZooKeeperServer相關,爲ZooKeeper客戶端提供服務

  • /server/command:服務端命令

  • /server/admin:ZooKeeper服務端Web管理,基於Jetty實現

  • /server/persistence:事務日誌和快照的持久化

  • /server/quorum:集羣間狀態維護和切換,實現分佈式事務

客戶端提供的操做包括啓動、關閉、建立節點、設置節點數據、刪除節點、獲取節點、獲取節點數據等。這裏只是取其中的幾個命令作爲示例。

主要客戶端命令表:

  • ls:獲取子路徑列表

  • create:建立路徑和數據

  • delele:刪除路徑

  • get:獲取路徑的數據

  • set:設置路徑的數據

  • connect:鏈接服務端

  • close:關閉與服務端鏈接

  • quit:退出客戶端

  • setacl:設置znode路徑的Acl

  • getacl:獲取znode路徑的Acl

1)啓動客戶端

zkCli.sh

2)鏈接服務端

Connect 10.10.27.21

3)建立路徑節點

建立一個新的 znode ,使用 create /test 「hello」 。這個命令在根目錄下建立了一個新的 znode 節點「 test 」以及與它關聯的字符串:

4)獲取目錄

使用 ls 命令來查看當前 ZooKeeper 中所包含的內容,這裏顯示/目錄下有test、zookeeper兩個子節點。

 

5)獲取節點數據

運行 get 命令來確認第二步中所建立的 znode ,顯示znode的數據、建立時間等狀態信息。

示例數據:

6)設置節點數據

經過 set 命令來對 zk 所關聯的字符串進行設置,設置/test路徑的數據爲「welcome!」。

 

7)刪除節點

delete  /test

這篇就先了解一下zookeeper的應用場景和基本操做,還有Watch功能是監聽zookeeper目錄結構的變化的,發生變化時全部鏈接到zookeeper的客戶端都會實時收到事件,代表zookeeper的哪一個目錄內容發生了變化,變化先後的數據分別是什麼。經過watch功能,全部zookeeper客戶端實現了分佈式一致性存儲和及時更新。

相關文章
相關標籤/搜索