zookeeper 入門指南(譯)

zookeeper 入門指南

原文地址: http://zookeeper.apache.org/doc/r3.4.8/zookeeperStarted.html

使用zookeeper進行分佈式協調應用程序

本文介紹zookeeper快速入門. 本文主要爲那些希望嘗試zookeeper研發人員,介紹簡單的安裝, 少許驗證zookeeper狀態的指令, 和一些編程實例. 最後順便介紹少許的集羣的安裝部署和事務日誌的優化. 如果想要在商業環境上使用zookeeper, 可以查看zookeeper 管理員指導手冊.

準備工作

在管理員指導頁面查看 System Requirements

下載

如果想獲取具有分佈式特性zookeeper,建議從Apache下載一個最新穩定版版本

單機操作

將zookeeper安裝在一臺機器上非常簡單. zookeeper被打包在一個簡單的JAR文件中, 所以安裝需要創建一個配置文件.

下載了穩定版的zookeeper後, 解壓, 並進入解壓文件的根目錄中

由於啓動zookeeper 需要一個配置文件. 在這裏介紹一個實例: 創建conf/zoo.cfg:

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

這個文件可以叫任意名字, 爲了演示這裏命名爲conf/zoo.cfg. 將dataDir的值指定到一個空的文件夾中. 詳細字段含義如下:

  • tickTime
    單位是毫秒, 用於心跳,配置最小session超時時間.
  • dataDir
    dataDir用於存儲內存級數據庫的鏡像, 除非特別配置,否則事務日誌也將更新到數據庫中
  • clientPort
    監聽client連接的端口

現在已經創建了配置文件, 啓動zookeeper

bin/zkServer.sh start

zookeeper的日誌管理使用的是log4j – 更過的詳細配置可以再研發指導中日誌篇查看. 你可以在控制檯或者配置log4j配置來查看日誌信息.

啓動zookeeper單機模式已講到這裏. 由於沒有集羣, 所以如果zookeeper處理出現問題, 服務就會停止. 對於開發中單機版是夠用的, 但如果要運行集羣模式下面將會介紹.

存儲管理

如果要在生產環境上長期運行zookeeper, dataDir和logs 就比較進行管理. 詳細內容將在maintenace介紹.

zookeeper連接

連接zookeeper 需要幾個服務選項:

  • Java:
bin/zkCli.sh -server 127.0.0.1:2181
  • C: 通過make cli_mt 或者make cli_st編譯

    運行可以使用

LD_LIBRARY_PATH=. cli_mt 127.0.0.1:2181

或者是

LD_LIBRARY_PATH=. cli_st 127.0.0.1:2181

一旦連接上zookeeper , 可以看到類似這樣的信息:

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]

使用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]

接下來,創建一個新節點zk_test,並賦值內容爲my_data create /zk_test 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

我們可以通過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

最後我們使用delete 刪除一個節點


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

示例就到這裏,查看更多請查看Programmer’s Guide.

對於大多數開發,測試,和技術選項過成功使用單機版zookepper是非常方便的. 但是在生產環境中, 應該使用集羣模式. 集羣由一組相同的叫做quorum應用服務器組成; 在集羣模式下,所有的服務器都具有相同配置文件.

注: 在集羣模式下,三臺服務器是集羣的最少數量, zookeeper 強力建議使用奇數個服務器. 如果你只使用了兩天服務器, 如果一個發生故障,它們就無法形成一個大部分仲裁的形式. 兩臺服務器的形式要比一臺服務器更不穩定,因爲它們具有兩個單點故障.

在集羣模式下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使用它限制仲裁服務器連接leader的時間(5 * tickTime = 10秒).

syncLimit 是仲裁服務器與leader服務器斷開時間的大小(2 * tickTime = 4秒).

這兩個超時時間的單位都是tickTime

server.x列表構成了zookeeper的服務. 當服務器啓動時候,它通過數據目錄下的myid文件 知道自己是哪一個server. 文件中記錄有服務器的ASCII數值.

最後, 注意server名稱後面兩個數值端口:”2888”和”3888”. 每個服務器都使用前一個端口去連接其他服務器. 這樣一個連接是必須的, 只有這樣所有的服務器纔可以進行通信, 例如: 根據順序更新操作進行響應. 具體來說, 一個zookeeper服務器使用這個端口連接followers到leader. 當一個新的leader出現時候, follower將開啓TCP連接到leader,就使用這個端口. 由於默認leader選舉的時候也需要使用TCP,我們當前需要另外一個端口用於leader選舉. 這個端口就是後面的端口.

注意: 如果你想在單機上測試多服務器操作, 在每個server.x配置文件,指定服務器名稱爲唯一衝裁編號和leader選舉端口(例如: 2888:3888, 2889:3889, 2890:3890). 當然分隔dataDirs和區分clientPort是必須的.

要知道在單物理機上設置多個服務程序,這樣並不能做出冗餘. 如果發生機器宕機, 所有的zookeeper服務都將下線. 冗餘備份需要每個服務器都有自己的物理機.

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章