以前自己的博客中轉載、翻譯或寫過(不過自己才疏學淺,寫的不好)一些 Zookeeper 方面的文章,但是都沒有涉及到 Zookeeper C API 的內容,今天的這篇博客是我農歷新年的第一篇技術博客,我想詳細講講 Zookeeper C API 的使用規則和示例,算是把以前的舊帳還上吧 :-)
Zookeeper 官方頁面上提供了一些編程指南 和 API 文檔,不過大部分都是 Java 示例,涉及 C API 的部分很少,只有在 ZooKeeper Programmer's Guide 中 ACL Permissions 一節講了 Zookeeper C API 中設置 ACL 應該注意的事項,正是由於缺少Zookeeper C API 相關的資料,大部分 Zookeeper C/C++ 開發者只能通過閱讀 Zookeeper C API 的源碼來了解 C API 的使用方法,本文希望在此方面給大家提供一些便利,減少 Zookeeper 新手使用 C API 的困難和恐懼,當然我自己也是一枚新手啦 :-)。
廢話不多說了,先從最基本的開始吧!
Zookeeper 偽分布式安裝
首先是 Zookeeper 的安裝,如果你沒有足夠的機器,建議在單機上通過偽分布式安裝方法來模擬 Zookeeper 集群,我在這里提供給大家一個簡單的安裝包來降低偽分布式 Zookeeper 的安裝難度,該安裝包可以模擬一個 5 Zookeeper 實例的集群。下載 zookeeper-3.4.0-pseudoclusters.tar.bz2,解壓至 /tmp/ 目錄(注意,安裝包里面 dataDir 和 dataLogDir 配置已經預設為 /tmp/ 目錄,如果你只是自己在 Zookeeper 上做一些小實驗,建議不要更改該配置,這樣在你做完了實驗以后刪除 /tmp/zookeeper/ 目錄即可),操作方法如下:
forhappy@haiping-ict:/tmp$ pwd /tmp forhappy@haiping-ict:/tmp$ tar xvf zookeeper-3.4.0-pseudoclusters.tar.bz2 forhappy@haiping-ict:/tmp$ cd zookeeper/ forhappy@haiping-ict:/tmp/zookeeper$ ls server001 server003 server005 stopZKCluster.sh server002 server004 startZKCluster.sh
然后在 /tmp/zookeeper 目錄下執行 startZKCluster.sh 啟動 Zookeeper 服務,或者執行 stopZKCluster.sh 停掉 Zookeeper 服務。
啟動 Zookeeper 服務:
forhappy@haiping-ict:/tmp/zookeeper$ ./startZKCluster.sh . starting zookeeper instance server001... JMX enabled by default Using config: /tmp/zookeeper/server001/zookeeper-3.4.0/bin/../conf/zoo.cfg Starting zookeeper ... STARTED starting zookeeper instance server002... JMX enabled by default Using config: /tmp/zookeeper/server002/zookeeper-3.4.0/bin/../conf/zoo.cfg Starting zookeeper ... STARTED starting zookeeper instance server003... JMX enabled by default Using config: /tmp/zookeeper/server003/zookeeper-3.4.0/bin/../conf/zoo.cfg Starting zookeeper ... STARTED starting zookeeper instance server004... JMX enabled by default Using config: /tmp/zookeeper/server004/zookeeper-3.4.0/bin/../conf/zoo.cfg Starting zookeeper ... STARTED starting zookeeper instance server005... JMX enabled by default Using config: /tmp/zookeeper/server005/zookeeper-3.4.0/bin/../conf/zoo.cfg Starting zookeeper ... STARTED
停掉 Zookeeper 服務:
forhappy@haiping-ict:/tmp/zookeeper$ ./stopZKCluster.sh . stopping zookeeper instance server001... JMX enabled by default Using config: /tmp/zookeeper/server001/zookeeper-3.4.0/bin/../conf/zoo.cfg Stopping zookeeper ... STOPPED stopping zookeeper instance server002... JMX enabled by default Using config: /tmp/zookeeper/server002/zookeeper-3.4.0/bin/../conf/zoo.cfg Stopping zookeeper ... STOPPED stopping zookeeper instance server003... JMX enabled by default Using config: /tmp/zookeeper/server003/zookeeper-3.4.0/bin/../conf/zoo.cfg Stopping zookeeper ... STOPPED stopping zookeeper instance server004... JMX enabled by default Using config: /tmp/zookeeper/server004/zookeeper-3.4.0/bin/../conf/zoo.cfg Stopping zookeeper ... STOPPED stopping zookeeper instance server005... JMX enabled by default Using config: /tmp/zookeeper/server005/zookeeper-3.4.0/bin/../conf/zoo.cfg Stopping zookeeper ... STOPPED
Zookeeper C API 安裝
Zookeeper C client 的實現在 src/c 目錄下,進入到該目錄安裝 Zookeeper C client,步驟如下:
$ ./configure $ make $ sudo make install
至此,基本的准備工作已經完成,你可以通過 Zookeeper 本身提供的 Shell 來操作 Zookeeper,操作方法如下,進入 /tmp/zookeeper/server001/zookeeper-3.4.0 目錄,執行bin/zkCli.sh -server 127.0.0.1:2181 進入 Zookeeper shell:
forhappy@haiping-ict:/tmp/zookeeper/server001/zookeeper-3.4.0$ bin/zkCli.sh -server 127.0.0.1:2181
[zk: 127.0.0.1:2181(CONNECTED) 2] help ZooKeeper -server host:port cmd args connect host:port get path [watch] ls path [watch] set path data [version] rmr path delquota [-n|-b] path quit printwatches on|off create [-s] [-e] path data acl stat path [watch] close ls2 path [watch] history listquota path setAcl path acl getAcl path sync path redo cmdno addauth scheme auth delete path [version] setquota -n|-b val path
在 shell 中你可以完成基本的操作,如創建、獲取、刪除、設置某一節點,設置節點 ACL等,可以 zookeeper shell 中通過 help 獲取相關命令的用法。
如果你按照上面的步驟完成了 Zookeeper 偽分布式的安裝,並且想繼續了解 Zookeeper C API 的使用方法,請繼續閱讀《Zookeeper C API 指南二(監視(Wathes), 基本常量和結構體介紹)》