Zookeeper入門(翻譯自Zookeeper官方網站Release 3.4.11版本)

目錄總覽

1、入門:使用ZooKeeper協調分佈式應用程序

本文檔將帶您一塊兒快速入門ZooKeeper。它主要針對但願嘗試的開發人員,包含單個ZooKeeper服務器的簡單安裝說明,一些命令來驗證它正在運行,以及一個簡單的編程示例。最後,爲了方便起見,有一些關於更復雜安裝的部分,例如運行復制部署,以及優化事務日誌。 可是,有關商業部署的完整說明,請參閱ZooKeeper管理員指南html

1.一、先決條件

參閱管理指南中的系統要求。node

1.二、ZooKeeper下載

要得到ZooKeeper發行版,請從Apache下載鏡像中的一個下載最新的穩定版本。程序員

1.三、Standalone Operation

在獨立模式下設置ZooKeeper服務器很是簡單。ZooKeeper服務器包含在單個JAR文件中,所以安裝由建立一個配置文件組成。一旦你下載了一個穩定的ZooKeeper版本解壓縮並cdroot目錄。shell

要啓動ZooKeeper,你須要一個配置文件。這裏是一個示例,在conf/zoo.cfg中建立它:數據庫

tickTime=2000
dataDir=/var/lib/zookeeper
clientPort=2181
複製代碼

這個文件能夠是任何文件(仍是說能夠任意命名?原文:This file can be called anything),可是爲了這個討論,把它叫作conf/zoo.cfg。更改dataDir的值以指定一個現有的(空開始)目錄。 如下是每一個字段的含義:apache

tickTime

ZooKeeper使用的基本時間單位(以毫秒爲單位)。它用於作心跳,最小會話超時時間將是tickTime的兩倍。編程

dataDir

存儲內存數據庫快照的位置,以及除非另外指定,不然更新數據庫的事務日誌也是這個目錄。windows

clientPort

監聽客戶端鏈接的端口。bash

如今您已經建立了配置文件,您能夠啓動ZooKeeper服務器

bin/zkServer.sh start

在windows中採用zkServer.cmd開啓服務器。

ZooKeeper日誌消息輸出採用log4j,程序員指南的日誌部分提供了更多詳細信息。您將看到日誌消息輸出到控制檯(默認)或一個日誌文件中,這取決於你對log4j配置。

以上描述的步驟是以獨立模式運行ZooKeeper,沒有複製。因此若是ZooKeeper進程失敗,服務將會關閉。這在大多數開發狀況下均可以,可是要以複製模式運行ZooKeeper,請參閱複製模式運行ZooKeeper

1.四、管理Zookeeper存儲

對於長時間運行的生產系統,ZooKeeper存儲必須由外部進行管理(dataDir和日誌)。 有關更多詳細信息,請參閱維護部分

1.五、鏈接到ZooKeeper

$ bin/zkCli.sh -server 127.0.0.1:2181

windows下采用zkCli.cmd -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
        createpath data acl
        stat path [watch]
        listquota path
        history
        setAcl path acl
        getAcl path
        sync path
        redo cmdno
        addauth scheme auth
        delete path [version]
        setquota -n|-b val path
複製代碼

到這裏,你能夠嘗試一些簡單的命令來感覺這個簡單的命令行界面。首先,經過輸入列表命令ls

[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
複製代碼

請注意,咱們在設置數據以後作了一個調整,確實發生了變化。

最後,咱們經過發出如下命令來刪除節點:

[zkshell: 16] delete /zk_test
[zkshell: 17] ls /
[zookeeper]
[zkshell: 18]
複製代碼

如今就是這樣。 要了解更多信息,請繼續閱讀本文檔的其他部分,並參閱「程序員指南」。

1.六、Zookeeper編程

ZooKeeper有一個Java綁定和C綁定。 它們在功能上是等同的。 C綁定存在兩種變體:單線程和多線程。 這些僅在消息傳遞循環完成方面有所不一樣。 有關更多信息,請參閱ZooKeeper程序員指南中的編程示例,瞭解使用不一樣API的示例代碼。

1.七、複製模式運行Zookeeper

以獨立模式運行ZooKeeper可方便進行評估,開發和測試。但在生產中,您應該以複製模式運行ZooKeeper。 在同一個應用程序中複製的服務器組稱爲quorum(衝裁)(這個地方可能不太對,後續改進),在複製模式下,quorum(衝裁)中的全部服務器都具備相同配置文件的副本。

對於複製模式,至少須要三臺服務器,強烈建議您有一個奇數的服務器。 若是你只有兩臺服務器,那麼你處於這樣一種狀況,那就是若是其中一臺服務器出現故障,那麼沒有足夠的機器來造成多數的quorums(衝裁)(這個地方可能不太對,後續改進)。兩臺服務器本質上不如一臺服務器穩定,由於有兩個單點故障。

複製模式所需的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用來限制quorum(衝裁)中的ZooKeeper服務器必須鏈接到leader的時間長度。條目syncLimit限制了服務器能夠從leader處過時多久。

有了這兩個超時,您可使用tickTime指定時間單位。 在這個例子中,initLimit的超時值是2000個千分之一刻度或10秒鐘的5個刻度。


OK!官方入門就翻譯完成了!雖然翻譯的質量不是特別滴好,但我以爲翻譯的過程是很是享受且學的最多的。若有翻譯不對的地方,請您在評論區發表評論告訴小編,麼麼噠!小編在校大四學生、年後實習工做咯!小編微信號:lifvalue,加我請備註掘金,你們一塊兒交流學習!

相關文章
相關標籤/搜索