ZooKeeper-3.4.10分佈式安裝指南

目錄

目錄 1html

1. 前言 1java

2. 約定 1apache

3. 安裝步驟 2bash

3.1. 配置/etc/hosts 2服務器

3.2. 設置myid 2session

3.3. 修改conf/zoo.cfg 2app

3.4. 修改/bin/zkEnv.sh 3ssh

3.5. 修改conf/log4j.properties 3分佈式

3.6. 修改conf/java.env 3oop

3.7. 設置PATH 4

4. 啓動ZooKeeper集羣 4

5. 安裝驗證 4

6. 基本命令 5

7. 只啓一臺zookeeper會如何? 6

8. 如何擴容zookeeper 7

9. 四字命令 7

10. 相關文檔 8

11. 結束語 8

 

1. 前言

介紹ZooKeeper-3.4.6版本的分佈式安裝,力求細緻,提供精確的安裝指導。本文的安裝環境是64位的SuSE 10.1 Linux,也適用於ZooKeeper-3.4.8

ZooKeeper節點間不須要互登陸,所以不用配置免密碼登陸。

2. 約定

將ZooKeeper安裝在/data/hadoop/zookeeper目錄,其中/data/hadoop/zookeeper是指向/data/hadoop/zookeeper-3.4.6的軟連接。

ZooKeeper的數據目錄設置爲/data/hadoop/zookeeper/data

 

本文使用了3臺機器部署ZooKeeper集羣,IP和主機名對應關係以下:

IP

主機名

10.12.154.77

DEVNET-154-77

10.12.154.78

DEVNET-154-70

10.12.154.79

DEVNET-154-79

3. 安裝步驟

Zookeeper機器間不須要設置免密碼登陸,其它hadoop也能夠不設置,只要不使用hadoop-daemons.sh來啓動、中止進程,注意不是hadoop-daemon.sh,而是帶「s」的那個,帶「s」的會讀取hadoopsalves文件,遠程ssh啓動DataNode和備NameNode等。

3.1. 配置/etc/hosts

將3臺機器的IP和主機名映射關係,在3臺機器上都配置一下,亦即在3臺機器的/etc/hosts文件中,均增長如下內容(能夠先配置好一臺,而後經過scp等命令複製到其它機器上,注意主機名不能包含任何下劃線):

10.12.154.77    DEVNET-154-77

10.12.154.78    DEVNET-154-70

10.12.154.79    DEVNET-154-79

3.2. 設置myid

在dataDir指定的數據目錄(/data/hadoop/zookeeper/data)下,建立文件myid,文件內容爲一個正整數值,用來惟一標識當前機器,所以不一樣機器的數值不能相同,建議從1開始遞增標識,以方便記憶和管理。本文約定以下:

IP

標識數值(取值範圍爲1~255)

10.12.154.77

1

10.12.154.78

2

10.12.154.79

3

 

可使用echo命令直接寫進去,如:

echo 1 > myidecho 1 > /data/hadoop/zookeeper/data/myid

3.3. 修改conf/zoo.cfg

按下述內容,修改ZooKeeper配置文件(3臺機器都須要,能夠先配置好一臺,而後經過scp等命令複製到其它機器上):

tickTime=2000

dataDir=/data/hadoop/zookeeper/data

dataLogDir=/data/hadoop/zookeeper/datalog

clientPort=2181

initLimit=5

syncLimit=2

autopurge.snapRetainCount=10

autopurge.purgeInterval=1

server.1=DEVNET-154-77:2888:3888

server.2=DEVNET-154-78:2888:3888

server.3=DEVNET-154-79:2888:3888

 

server.N中的N值必須和myid保持相同。

以上內容的配置,參照了ZooKeeper的官方文檔:zookeeperStarted.htmlserver.X用來配置ZooKeeper集羣中的各節點,並建議X的值和myid保持一致。

端口2181用於監聽客戶端的鏈接,端口2888用於Leader監聽Follower的鏈接,而3888則用於Leader選舉。

dataDir用來指定快照文件存放目錄,dataLogDir用來指定事務日誌文件存放目錄。若是隻指定了dataDir,而沒指定dataLogDir,則事務日誌文件也存放於dataDir指定的目錄。

默認,autopurge的兩個參數是被註釋的。

「autopurge.purgeInterval」指定自動清理快照文件和事務日誌文件的時間,單位爲小時,默認爲0表示不自動清理,這個時候可使用腳本zkCleanup.sh手動清理。不清理的結果是佔用的磁盤空間愈來愈大。

「autopurge.snapRetainCount」用於指定保留快照文件和事務日誌文件的個數,默認爲3

3.4. 修改/bin/zkEnv.sh

設置環境變量ZOO_LOG_DIRzookeeper的日誌存放目錄,如:

export ZOO_LOG_DIR=/data/hadoop/zookeeper/log

可將這一行放在ZOOKEEPER_PREFIX以後。

 

再修改下ZOO_LOG4J_PROP,以讓日誌不是輸出到zookeeper.out,而是寫入到日誌文件,將:ZOO_LOG4J_PROP="INFO,CONSOLE",改爲:

ZOO_LOG4J_PROP="INFO,ROLLINGFILE"

3.5. 修改conf/log4j.properties

log4j.appender.ROLLINGFILE.MaxFileSize=100MB

log4j.appender.ROLLINGFILE.MaxBackupIndex=10

設置每一個日誌文件大小爲100M,滾動10個。

3.6. 修改conf/java.env

打開文件bin/zkEnv.sh,能夠看到它有引用conf/java.env。能夠在java.env中設置JAVA_HOME這個環境變量,如:export JAVA_HOME=/data/jdk

僅在/etc/profile等處設置JAVA_HOME,可能並無論用。若是無論用,查看log/zookeeper.out,能夠看到錯誤「nohup: failed to run command 'java': No such file or directory」。

3.7. 設置PATH

這步不是必須的,可是推薦將zookeeper/bin加入到環境變量PATH,這樣操做zookeeper會方便些,如:export PATH=/data/zookeeper/bin:$PATH

若是計劃設置,修改當前用戶的.profile.bashrc便可,而不是/etc/profile等。

4. 啓動ZooKeeper集羣

登陸全部ZooKeeper節點,使用bin目錄下的腳本zkServer.sh用來啓動ZooKeeper集羣,但須要帶一個start參數,如:

cd /data/hadoop/zookeeper/bin&&./zkServer.sh start

 

中止參數爲stop,重啓參數爲restart,如:./zkServer.sh restart

因爲啓動時,每一個節點都會試圖去鏈接其它節點,所以先啓動的剛開始會鏈接不上其它的,致使日誌中會包含錯誤信息,在未全啓動以前,這個屬正常現象。

5. 安裝驗證

腳本zkServer.sh不但能夠用來啓動ZooKeeper,還能夠用來查看狀態。使用方式爲帶一個status參數,如:

./zkServer.sh status

 

如遇到如下錯誤,請稍安勿躁,過會再試,多是由於還未徹底起來:

[hadoop@DEVNET-154-77 ~/zookeeper/bin]$ ./zkServer.sh status

JMX enabled by default

Using config: /data/hadoop/zookeeper/bin/../conf/zoo.cfg

Error contacting service. It is probably not running.

 

集羣成功啓動後,將有且只會有一個成爲leader,其它是follower

[hadoop@DEVNET-154-79 ~/zookeeper/bin]$ ./zkServer.sh status

JMX enabled by default

Using config: /data/hadoop/zookeeper/bin/../conf/zoo.cfg

Mode: leader

 

[hadoop@DEVNET-154-70 ~/zookeeper/bin]$ ./zkServer.sh status

JMX enabled by default

Using config: /data/hadoop/zookeeper/bin/../conf/zoo.cfg

Mode: follower

 

[hadoop@DEVNET-154-77 ~/zookeeper/bin]$ ./zkServer.sh status

JMX enabled by default

Using config: /data/hadoop/zookeeper/bin/../conf/zoo.cfg

Mode: follower

6. 基本命令

進入ZooKeeperbin目錄,執行zkCli.sh進入ZooKeeper的命令行操做界面。

./zkCli.sh -server 10.12.154.78:2181

 

參數「-server」中只含一個「-」,用以指定被鏈接的ZooKeeper節點,能夠爲Leader,也能夠爲Follower,「10.12.154.78」爲LeaderFollowerIP或主機名,「2181」爲ZooKeerp提供的客戶端服務端口。

 

進入ZooKeeper命令行操做界面後,輸入help而後回車,能夠看到ZooKeeper支持的命令列表:

[zk: DEVNET-154-79:2181(CONNECTED) 0] help

ZooKeeper -server host:port cmd args

        stat path [watch]

        set path data [version]

        ls path [watch]

        delquota [-n|-b] path

        ls2 path [watch]

        setAcl path acl

        setquota -n|-b val path

        history 

        redo cmdno

        printwatches on|off

        delete path [version]

        sync path

        listquota path

        rmr path

        get path [watch]

        create [-s] [-e] path data acl

        addauth scheme auth

        quit 

        getAcl path

        close 

        connect host:port

 

ls」有點像HDFS中的「ls」,隨便測試下:

[zk: DEVNET-154-79:2181(CONNECTED) 1] ls /

[zookeeper, hbase]

 

再測試下:

[zk: DEVNET-154-79:2181(CONNECTED) 2] ls /hbase

[replication, meta-region-server, rs, splitWAL, backup-masters, table-lock, region-in-transition, online-snapshot, master, running, recovering-regions, draining, namespace, hbaseid, table]

 

再測試一下:

[zk: DEVNET-154-79:2181(CONNECTED) 4] ls /hbase/backup-masters

[VM-40-171-sles10-64,60000,1398162436871]

 

測試建立一個目錄:

[zk: DEVNET-154-79:2181(CONNECTED) 2] create /test test

Created /test

 

[zk: DEVNET-154-79:2181(CONNECTED) 2] ls /

[zookeeper, test]

 

上面能夠看到有HBase,是由於基於它部署了一套HBase,若未基於它安裝HBase,則不會有這個條目。

7. 只啓一臺zookeeper會如何?

若是隻啓動一臺,執行zkServer.sh status查看狀態時,報以下錯誤:

$ zkServer.sh status

ZooKeeper JMX enabled by default

Using config: /data/zookeeper/bin/../conf/zoo.cfg

Error contacting service. It is probably not running.

 

若是再啓一臺zookeeper,會發現一個成了leader,另外一個成了follower(經測試兩臺zookeeper即能正常工做):

$ zkServer.sh status

ZooKeeper JMX enabled by default

Using config: /data/zookeeper/bin/../conf/zoo.cfg

Mode: follower

 

$ zkServer.sh status

ZooKeeper JMX enabled by default

Using config: /data/zookeeper/bin/../conf/zoo.cfg

Mode: leader

8. 如何擴容zookeeper

只須要將已有的zookeeper打包複製到新的機器上,而後修改myid文件並設置好,而後啓動zookeeper便可。

9. 四字命令

用戶在客戶端能夠經過telnetncZooKeeper提交相應的命令。ZooKeeper經常使用四字命令見下表:

命令

說明

conf

輸出相關服務配置的詳細信息

cons

列出全部鏈接到服務器的客戶端的徹底的鏈接、會話的詳細信息,包括接受、發送的包數量、會話ID、操做延遲、最後的操做執行等等信息

dump

列出未經處理的會話和臨時節點

envi

輸出關於服務環境的詳細信息

reqs

列出未經處理的請求

ruok

測試服務是否處於正確狀態。若是確實如此,那麼服務返回「imok」,不然不作任何相應

stat

輸出關於性能和鏈接的客戶端的列表

wchs

列出服務器watch的詳細信息

wchc

經過session列出服務器 watch 的詳細信息,它的輸出是一個與watch相關的會話的列表

wchp

經過路徑列出服務器 watch 的詳細信息,它輸出一個與 session 相關的路徑

 

使用示例:

$ echo ruok|nc 127.0.0.1 2181

$ telnet 127.0.0.1 2181  

Trying 127.0.0.1...

Connected to 127.0.0.1.

Escape character is '^]'.

stat

Zookeeper version: 3.4.8--1, built on 02/06/2016 03:18 GMT

Clients:

  /127.0.0.1:34711[0](queued=0,recved=1,sent=0)

  /10.43.36.23:43303[1](queued=0,recved=225666,sent=225666)

 

Latency min/avg/max: 0/0/19

Received: 313930

Sent: 313929

Connections: 2

Outstanding: 0

Zxid: 0x60000cfe4

Mode: follower

Node count: 183

Connection closed by foreign host.

10. 相關文檔

HBase-0.98.0分佈式安裝指南》

Hive 0.12.0安裝指南》

ZooKeeper-3.4.6分佈式安裝指南》

Hadoop 2.3.0源碼反向工程》

《在Linux上編譯Hadoop-2.4.0

Accumulo-1.5.1安裝指南》

Drill 1.0.0安裝指南》

Shark 0.9.1安裝指南》

 

更多,敬請關注技術博客:http://aquester.cublog.cn

11. 結束語

至此,ZooKeeper分佈式安裝大告成功!更多細節,請瀏覽官方文檔:http://zookeeper.apache.org/doc/trunk/zookeeperStarted.html

相關文章
相關標籤/搜索