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

擁抱心中的夢想發表於2017-12-20

目錄總覽

一、入門:使用ZooKeeper協調分散式應用程式

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

1.1、先決條件

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

1.2、ZooKeeper下載

要獲得ZooKeeper發行版,請從Apache下載映象中的一個下載最新的穩定版本。

1.3、Standalone Operation

在獨立模式下設定ZooKeeper伺服器非常簡單。ZooKeeper伺服器包含在單個JAR檔案中,因此安裝由建立一個配置檔案組成。一旦你下載了一個穩定的ZooKeeper版本解壓縮並cdroot目錄。

要啟動ZooKeeper,你需要一個配置檔案。這裡是一個示例,在conf/zoo.cfg中建立它:

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

這個檔案可以是任何檔案(還是說可以任意命名?原文:This file can be called anything),但是為了這個討論,把它叫做conf/zoo.cfg。更改dataDir的值以指定一個現有的(空開始)目錄。 以下是每個欄位的含義:

tickTime

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

dataDir

儲存記憶體資料庫快照的位置,以及除非另外指定,否則更新資料庫的事務日誌也是這個目錄。

clientPort

監聽客戶端連線的埠。

現在您已經建立了配置檔案,您可以啟動ZooKeeper

bin/zkServer.sh start

在windows中採用zkServer.cmd開啟伺服器。

ZooKeeper日誌訊息輸出採用log4j,程式設計師指南的日誌部分提供了更多詳細資訊。您將看到日誌訊息輸出到控制檯(預設)或一個日誌檔案中,這取決於你對log4j配置。

以上描述的步驟是以獨立模式執行ZooKeeper,沒有複製。所以如果ZooKeeper程式失敗,服務將會關閉。這在大多數開發情況下都可以,但是要以複製模式執行ZooKeeper,請參閱複製模式執行ZooKeeper

1.4、管理Zookeeper儲存

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

1.5、連線到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.6、Zookeeper程式設計

ZooKeeper有一個Java繫結和C繫結。 它們在功能上是等同的。 C繫結存在兩種變體:單執行緒和多執行緒。 這些僅在訊息傳遞迴圈完成方面有所不同。 有關更多資訊,請參閱ZooKeeper程式設計師指南中的程式設計示例,瞭解使用不同API的示例程式碼。

1.7、複製模式執行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,加我請備註掘金,大家一起交流學習!

相關文章