ZooKeeper3.5.5 安裝與使用 中文文檔



2.1.2 Getting Started:一個教程風格的指南,供開發人員安裝、運行和編程到ZooKeeper。

這個文檔包含了一些信息,可以幫助您快速瞭解ZooKeeper。它主要針對希望嘗試它的開發人員,包含單個ZooKeeper服務器的簡單安裝說明、驗證它正在運行的幾個命令和一個簡單的編程示例。最後,爲了方便起見,有幾個部分涉及更復雜的安裝,例如運行復制部署和優化事務日誌。但是,有關商業部署的完整說明,請參閱ZooKeeper Administrator’s Guide。

2.1.2.1 先決條件

See System Requirements in the Admin guide.

2.1.2.2 下載

要獲得ZooKeeper發行版,請從Apache下載鏡像之一下載最近的穩定版本。

2.1.2.3 獨立式操作

在獨立模式下設置ZooKeeper服務器非常簡單。服務器包含在一個JAR文件中,所以安裝包括創建一個配置。

一旦你下載了一個穩定的ZooKeeper發行版,把它和cd解壓到根目錄

要啓動ZooKeeper,需要一個配置文件。這是一個例子,創建它在conf/zoo.cfg:

tickTime=2000
dataDir=/var/lib/zookeeper
clientPort=2181

這個文件可以被任何東西調用,但是爲了便於討論,將其命名爲conf/zoo.cfg。更改dataDir的值,以指定一個現有目錄(以空目錄開始)。下面是每個字段的含義:

  • tickTime : ZooKeeper使用的以毫秒爲單位的基本時間單位。它用於心跳,最小會話超時將是 tickTime的兩倍。
  • dataDir : 存儲內存中數據庫快照的位置,以及更新到數據庫的事務日誌(除非另有指定)。
  • clientPort : 監聽客戶機連接的端口。
    現在你已經創建了配置文件,你可以啓動ZooKeeper:
bin/zkServer.sh start

ZooKeeper使用log4j記錄消息——程序員指南的日誌部分提供了更多詳細信息。您將看到日誌消息到達控制檯(缺省)和/或日誌文件,這取決於log4j配置。這裏概述的步驟以獨立模式運行ZooKeeper。沒有複製,所以如果ZooKeeper進程失敗,服務將會關閉。對於大多數開發情況,這是可以的,但是要以複製模式運行ZooKeeper,請參見Running Replicated ZooKeeper.

2.1.2.4 Managing ZooKeeper Storage

對於長期運行的生產系統,ZooKeeper存儲必須由外部管理(dataDir和logs)。有關更多細節,請參閱有關維護的部分。

2.1.2.5 Connecting to ZooKeeper
$ bin/zkCli.sh -server 127.0.0.1:2181

這允許您執行簡單的類似文件的操作。
一旦連接起來,您應該會看到如下內容:

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,獲得可以從客戶端執行的命令列表,如下所示:

[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

從這裏開始,您可以嘗試一些簡單的命令來了解這個簡單的命令行界面。首先,像在ls中一樣,從發出list命令開始,生成:

[zkshell: 8] ls /
[zookeeper]

接下來,通過運行create /zk_test my_data創建一個新的znode。這將創建一個新的znode並將字符串my_data與該節點關聯。您應該看到:

[zkshell: 9] create /zk_test my_data
Created /zk_test

發出另一個ls /命令查看目錄是什麼樣子的:

[zkshell: 11] ls /
[zookeeper, zk_test]

注意,現在已經創建了zk_test目錄。
接下來,運行get命令驗證數據是否與znode關聯,如下所示:

[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

我們可以通過發出set命令來改變與zk_test相關的數據,如下:

[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

(注意,我們在設置數據之後做了一個get,它確實改變了。
最後,我們通過發出命令來delete一個節點:

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

就這些了。要了解更多信息,請繼續閱讀本文的其餘部分,並參閱Programmer’s Guide.

2.1.2.6 Programming to ZooKeeper

ZooKeeper有Java綁定和C綁定。它們在功能上是等價的。C綁定有兩種變體:單線程和多線程。這些區別只在於消息傳遞循環是如何完成的。有關更多信息,請參閱 Programming Examples in the ZooKeeper Programmer’s Guide ,瞭解使用不同api的示例代碼。

2.1.2.7 Running Replicated ZooKeeper

在獨立模式(standalone mode )下運行ZooKeeper便於評估、開發和測試。但是在生產中,應該以複製模式(replicated mode)運行ZooKeeper。同一應用程序中的複製服務器組稱爲quorum(集羣),在複製模式下,集羣中的所有服務器都具有相同配置文件的副本。

Note:對於複製模式,至少需要三個服務器,強烈建議使用奇數個服務器。如果您只有兩臺服務器,那麼您將處於這樣一種情況:如果其中一臺服務器發生故障,則沒有足夠的機器來形成多數集羣。兩臺服務器本質上比一臺服務器更不穩定,因爲有兩個單點故障。

複製模式所需的conf/zoo.cfg文件類似於獨立模式中使用的文件,但有一些不同。舉個例子:

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用來限制仲裁中的ZooKeeper服務器必須連接到leader的時間長度。條目syncLimit限制了服務器與領導者之間的過時程度。

對於這兩個超時,您可以使用tickTime指定時間單位。在本例中,initLimit的超時爲5個滴答,每滴答爲2000毫秒,即10秒。

表單服務器的條目。列出構成ZooKeeper服務的服務器。當服務器啓動時,它通過在數據目錄中查找文件myid來知道它是哪個服務器。該文件包含ASCII格式的服務器號。

最後,注意每個服務器名稱後面的兩個端口號:“2888”和“3888”。對等點使用前一個端口連接到其他對等點。這樣的連接是必要的,以便對等方能夠通信,例如,就更新的順序達成一致。更具體地說,ZooKeeper服務器使用這個端口將追隨者連接到領導者。當新的leader出現時,follower使用這個端口打開到leader的TCP連接。因爲默認的領導人選舉也使用TCP,所以我們目前需要另一個端口來進行領導人選舉。這是服務器條目中的第二個端口。

Note:如果您想要在一臺機器上測試多個服務器,請爲每臺服務器指定servername作爲localhost,並使用惟一的quorum & leader選擇端口(如上面示例中的2888:3888、2889:3889、2890:3890)。服務器配置文件中的X。當然,單獨的_dataDir_s和不同的_clientPort_s也是必要的(在上面的複製示例中,運行在一個本地主機上,仍然有三個配置文件)。

請注意,在一臺機器上設置多個服務器不會產生任何冗餘。如果發生了導致機器死亡的事情,所有zookeeper服務器都將離線。完全冗餘要求每個服務器都有自己的機器。它必須是一個完全獨立的物理服務器。同一物理主機上的多個虛擬機仍然容易受到該主機完全故障的影響。

2.1.2.8 其它優化

還有一些其他配置參數可以極大地提高性能:

  • 爲了獲得較低的更新延遲,有一個專用的事務日誌目錄是很重要的。默認情況下,事務日誌與數據快照和myid文件放在同一個目錄中。dataLogDir參數表示用於事務日誌的另一個目錄。
  • [tbd: what is the other config param?]
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章