Apache ZooKeeper Getting Started Guide 翻譯


ZooKeeper 開始嚮導
  • 開始用zookeeper協調分佈式程序
    • 單例操做
    • 管理zookeeper存儲
    • 鏈接zookeeper
    • 執行zookeeper
    • 以複製模式執行zookeeper
    • 其餘優化
Getting Started:經過zookeeper協調分佈式程序
這份文檔包括了讓你高速開始使用zookeeper的幫助信息。

文章主要是針對0基礎想嘗試使用zookeeper的開發人員,當中包括了一些簡單的樣例。僅用一臺zookeeperserver,一些命令確認server正在執行,一個簡單的程序樣例。html

文章最後,爲了方便,也有一些內容考慮到一些相對複雜些的樣例。列如,以複製模式部署,優化事務。node

但是假設想運用到商業項目中。請參閱 ZooKeeper Administrator's Guide.shell


單例操做
以單例模式啓動zookeeperserver是簡單的。zookeeper服務包括一個jar文件和一些配置。
啓動zookeeper你首先需要一份配置文件,在下載的文件文件夾conf/zoo.cfg:
tickTime=2000 dataDir=/var/lib/zookeeper clientPort=2181
你可以任意命名這個文件的名字,但是爲了描寫敘述的清楚咱們就叫它 conf/zoo.cfg. 假如已經存在dataDir文件夾請改變dataDir的值。如下是對每一個字段意義的介紹
tickTime
zookeeper用到的時間單位是毫秒。

這個時間比如是zookeeper的心跳時間,是最小會話單元的超時時間範圍是這個時間的2倍。apache

dataDir
這個文件夾是存儲內存中數據快照的位置,除非你特別說明,更新數據事物的log也在這個位置。
clientPort
client鏈接監聽port。你需要建立一個配置文件。啓動ZooKeeper:bin/zkServer.sh start
ZooKeeper 的日誌記錄是經過log4j — 不少其它關於日誌的解說請看log4j官網。這裏介紹的啓動zookeeper是以單例模式。

假如進程執行失敗,zookeeper服務就會掛掉。單例模式啓動對於開發環境來講是最好的。假設想已複製模式啓動請看Running Replicated ZooKeeper.app

Managing ZooKeeper Storage
對於長時間執行在生產環境的zookeeper服務,存儲必須被額外的管理(dataDir and logs),關於這些請看maintenance
Connecting to ZooKeeper
假設zookeeper已經執行,你就可以經過如下幾種選擇進行鏈接
  • Java: Use
     bin/zkCli.sh -server 127.0.0.1:2181 
    This lets you perform simple, file-like operations.
  • C: compile cli_mt (multi-threaded) or cli_st (single-threaded) by running make cli_mt or make cli_st in the src/c subdirectory in the ZooKeeper sources. See the README contained within src/c for full details.tcp

    You can run the program from src/c using:分佈式

     LD_LIBRARY_PATH=. cli_mt 127.0.0.1:2181 

    oride

     LD_LIBRARY_PATH=. cli_st 127.0.0.1:2181 

    This will give you a simple shell to execute file system like operations on ZooKeeper.oop

Once you have connected, you should see something like:post

 Connecting to localhost:2181 log4j:WARN No appenders could be found for logger (org.apache.zookeeper.ZooKeeper). log4j:WARN Please initialize the log4j system properly. Welcome to ZooKeeper! JLine support is enabled [zkshell: 0] 

假設在shell中執行。你可以子啊鏈接後鍵入  help ,這將返回client可以執行的命令列表
例如如下:
 [zkshell: 0] help ZooKeeper host:port cmd args get path [watch] ls path [watch] set path data [version] delquota [-n|-b] path quit printwatches on|off create path data acl stat path [watch] listquota path history setAcl path acl getAcl path sync path redo cmdno addauth scheme auth delete path [version] deleteall path setquota -n|-b val path 

你可以嘗試一些簡單的命令來了解這個簡單的命令行 . First, start by issuing the list command, as in  ls , yielding:
[zkshell: 8] ls /[zookeeper]
接下來。建立一個咋弄的經過執行 create /zk_test my_data .這個會建立一個新的anode和與這個anode關聯的字符串數據」my_data」 ,你可以看到如下的執行結果:
 [zkshell: 9] create /zk_test my_data Created /zk_test 

經過執行  ls / 命令會看到展示當前的文件夾狀況 :
 [zkshell: 11] ls / [zookeeper, zk_test] 

注意。這個zk_test文件夾已經被建立。

你可以確認下和這個節點關聯的數據經過執行get命令。例如如下:

 [zkshell: 12] get /zk_test my_data cZxid = 5 ctime = Fri Jun 05 13:57:06 PDT 2009 mZxid = 5 mtime = Fri Jun 05 13:57:06 PDT 2009 pZxid = 5 cversion = 0 dataVersion = 0 aclVersion = 0 ephemeralOwner = 0 dataLength = 7 numChildren = 0 

咱們也可以改變和zk_test關聯的數據經過 set 命令,例如如下:
 [zkshell: 14] set /zk_test junk cZxid = 5 ctime = Fri Jun 05 13:57:06 PDT 2009 mZxid = 6 mtime = Fri Jun 05 14:01:52 PDT 2009 pZxid = 5 cversion = 0 dataVersion = 1 aclVersion = 0 ephemeralOwner = 0 dataLength = 4 numChildren = 0 [zkshell: 15] get /zk_test junk cZxid = 5 ctime = Fri Jun 05 13:57:06 PDT 2009 mZxid = 6 mtime = Fri Jun 05 14:01:52 PDT 2009 pZxid = 5 cversion = 0 dataVersion = 1 aclVersion = 0 ephemeralOwner = 0 dataLength = 4 numChildren = 0 

(注意咱們在設置zk_test的數據後又執行了 get   命令,數據的確改變了)。

最後經過 delete  刪除zk_test這個節點:

 [zkshell: 16] delete /zk_test [zkshell: 17] ls / [zookeeper] [zkshell: 18] 

獲取不少其餘其餘內容。請看Programmer's Guide

Programming to ZooKeeper

ZooKeeper has a Java bindings and C bindings. They are functionally equivalent. The C bindings exist in two variants: single threaded and multi-threaded. These differ only in how the messaging loop is done. For more information, see the Programming Examples in the ZooKeeper Programmer's Guide for sample code using of the different APIs.

複製模式執行zookeeper
執行zookeeper以單例模式對於評估測試開發是很是方便。但是在正式環境你應該以複製模式執行。每個zookeeperserver都有一份相同的配置文件。

這個文件和上面介紹單例模式使用的配置文件和相似。僅僅是有一點小小的不一樣,例如如下:

 tickTime=2000 dataDir=/var/lib/zookeeper clientPort=2181 initLimit=5 syncLimit=2 server.1=zoo1:2888:3888 server.2=zoo2:2888:3888 server.3=zoo3:2888:3888 

這個新的屬性, initLimit是用來定義zookeeper鏈接到leader的超時時間,屬性 syncLimit  限制一個leader過期時間。對於這兩種超時時間,你也可以指定用 tickTime的時間單位計量。好比。initLimit是5 ticks,每個tick是2000毫秒,也就是10秒。
屬性 server.X  列出了zookeeper服務的組成。

當server啓動的時候,經過尋找在數據文件夾的myid文件知道是哪臺server。這個文件含有以ASCII編碼的server編號。

最後,注意在每個server名後的兩個port號: " 2888" and "3888.經過這些port可以彼此鏈接。好比,一個彼此鏈接是必的當按順序更新數據時。

尤爲在zookeeperserver依次鏈接到leader時候。當一個新的leader誕生時,小弟們會經過這個port號利用tcp協議鏈接到leader。因爲默認leader也用tcp協議。咱們必須要求另一個port用於選舉leader。就是屬性server的第二個port號。


注意
假如你想在一臺機器上進行多個zookeeper服務測試。需要指出惟一的集羣名localhost和那些leader選舉port ( 好比2888:3888, 2889:3889, 2890:3890 )。隔離各個dataDir文件夾和不一樣的port號也是必須的。

(在這個複製模式執行的樣例裏,每個執行在單一的機器都有一個配置文件)


其餘優化
有其餘的配置參數可以提升性能:There are a couple of other configuration parameters that can greatly increase performance:
爲了下降等待和高速更新,它是重要的有個事物log文件夾。默認事物log文件是和數據快照和myid文件放在一塊兒。屬性 dataLogDir可以指名別的地方

 
Last Published: 08/07/2014 04:18:26
Copyright © 2008-2013  The Apache Software Foundation.
相關文章
相關標籤/搜索