如何啓動ZooKeeper(上)

啓動ZooKeeper

ZooKeeper服務的啓動方式分爲三種,即單機模式、僞分佈式模式、分佈式模式,這裏針對三種模式均做逐一講解。

Tips

調試過程建議儘量使用分佈式模式,單機模式不推薦在生產環境下使用,僞分佈式模式實質上是在一個進程內派生多個線程模擬分佈式形態,由於操作系統的內部結構設計,容易造成一些問題,建議與其解決問題不如切換到分佈式模式。生產環境下建議一定採用分佈式模式,如果機器不夠,推薦採用虛擬機方式。

(1). Module1 單機模式

採用單機模式,意味着只有一臺機器或者一個節點,因此流程較爲簡單。首先,在conf目錄下面可以通過自己創建zoo.cfg文件的方式完成ZooKeeper的配置,如清單1-7所示,ZooKeeper服務會讀取該配置文件,具體的讀取代碼會在第四章介紹。

注意,ZooKeeper自帶了zoo_sample.cfg文件,這個是配置文件的模板文件,可以打開看看具體的內容,也可以作爲zoo.cfg的創建內容範例。


清單1-7 ZooKeeper配置文件

[root@localhost zookeeper-3.4.7]# cd conf

[root@localhost conf]# ls -rlt

total 12

-rw-rw-r--. 1 1000 1000  922 Nov 1022:32 zoo_sample.cfg

-rw-rw-r--. 1 1000 1000 2161 Nov 10 22:32 log4j.properties

-rw-rw-r--. 1 1000 1000  535 Nov 1022:32 configuration.xsl

[root@localhost conf]# cat zoo_sample.cfg

# The number of milliseconds of each tick

tickTime=2000

# The number of ticks that the initial

# synchronization phase can take

initLimit=10

# The number of ticks that can pass between

# sending a request and getting an acknowledgement

syncLimit=5

# the directory where the snapshot is stored.

# do not use /tmp for storage, /tmp here is just

# example sakes.

dataDir=/tmp/zookeeper

# the port at which the clients will connect

clientPort=2181

# the maximum number of client connections.

# increase this if you need to handle more clients

#maxClientCnxns=60

#

# Be sure to read the maintenance section of the

# administrator guide before turning on autopurge.

#

#http://zookeeper.apache.org/doc/current/zookeeperAdmin.html#sc_maintenance

#

# The number of snapshots to retain in dataDir

#autopurge.snapRetainCount=3

# Purge task interval in hours

# Set to "0" to disable auto purge feature

#autopurge.purgeInterval=1


上面是自帶的示例配置,與我們相關的三個配置項是tickTime、dataDir和clientPort。

tickTime:這個參數主要是用來針對ZooKeeper服務端和客戶端的會話控制,包括心跳控制,一般來說,會話超時時間是該值的兩倍,它的單位是毫秒,我們設置爲2000毫秒。


dataDir:這個目錄用來存放數據庫的鏡像和操作數據庫的日誌。注意,如果這個文件夾不存在,需要手動創建一個並賦予讀寫權限,我們設置爲/tmp/zookeeper,不用手動創建這個文件夾,系統運行後會自動創建或覆蓋。


clientPort:ZooKeeper服務端監聽客戶端的端口,默認是2181,這裏沿用默認設置。


接下來通過bin目錄下面的zkServer.sh腳本啓動ZooKeeper服務,如果不清楚具體參數,可以直接調用腳本查看輸出,如清單1-8所示。

Tips

ZooKeeper採用的是Bourne Shell。Shell基本上是一個命令解釋器,類似於DOS下的command。它接收用戶命令(如ls等),然後調用相應的應用程序。較爲通用的shell有標準的Bourne shell、C shell和Korn shell。

清單1-8 調用zkServer.sh腳本

[root@localhost bin]# ./zkServer.sh

ZooKeeper JMX enabled by default

Using config: /home/zhoumingyao/zookeeper/zookeeper-3.4.7/bin/../conf/zoo.cfg

Usage: ./zkServer.sh{start|start-foreground|stop|restart|status|upgrade|print-cmd}


輸出中可以看到有start等選項,具體每個選項的意義我們放在第四章解釋,這裏先啓動ZooKeeper服務,如清單1-9所示。

清單1-9 啓動ZooKeeper

[root@localhost bin]# ./zkServer.sh start

ZooKeeper JMX enabled by default

Using config:/home/zhoumingyao/zookeeper/zookeeper-3.4.7/bin/../conf/zoo.cfg

Starting zookeeper ... STARTED


ZooKeeper服務是否啓動成功,可以通過ps或者jps命令查看,如清單1-10所示。

清單1-10 查看ZooKeeper服務

[root@localhost bin]# jps

2737 QuorumPeerMain

2751 Jps

[root@localhost bin]# ps -ef | grep zookeeper | grep -v grep | awk '{print$2}'

2608


這裏我們看到的進程號爲2737的進程QuorumPeerMain代表了ZooKeeper服務。我們也可以通過ZooKeeper啓動腳本自帶的參數“Status”來查看ZooKeeper進程狀態,如清單1-11所示。

清單1-11 查看ZooKeeper進程狀態

[root@localhost bin]# ./zkServer.sh status

ZooKeeper JMX enabled by default

Using config:/home/zhoumingyao/zookeeper/zookeeper-3.4.7/bin/../conf/zoo.cfg

Mode: standalone


ZooKeeper服務運行以後我們可以通過命令行工具去訪問它,默認是Java命令行腳本。我們可以通過以下命令方式啓動ZooKeeper命令行Shell,運行輸出如清單1-12所示。

清單1-12 ZKCli運行輸出

[root@localhost bin]# ./zkCli.sh -server localhost:2181

Connecting to localhost:2181

2015-12-20 23:22:10,620 [myid:] - INFO [main:Environment@100] - Clientenvironment:zookeeper.version=3.4.7-1713338, built on 11/09/2015 04:32 GMT

2015-12-20 23:22:10,645 [myid:] - INFO [main:Environment@100] - Client environment:host.name=localhost

2015-12-20 23:22:10,645 [myid:] - INFO [main:Environment@100] - Client environment:java.version=1.8.0_51

2015-12-20 23:22:10,657 [myid:] - INFO [main:Environment@100] - Client environment:java.vendor=OracleCorporation

2015-12-20 23:22:10,658 [myid:] - INFO [main:Environment@100] - Clientenvironment:java.home=/usr/lib/jdk1.8.0_51/jre

2015-12-20 23:22:10,658 [myid:] - INFO [main:Environment@100] - Client environment:java.class.path=/home/zhoumingyao/zookeeper/zookeeper-3.4.7/bin/../build/classes:/home/zhoumingyao/zookeeper/zookeeper-3.4.7/bin/../build/lib/*.jar:/home/zhoumingyao/zookeeper/zookeeper-3.4.7/bin/../lib/slf4j-log4j12-1.6.1.jar:/home/zhoumingyao/zookeeper/zookeeper-3.4.7/bin/../lib/slf4j-api-1.6.1.jar:/home/zhoumingyao/zookeeper/zookeeper-3.4.7/bin/../lib/netty-3.7.0.Final.jar:/home/zhoumingyao/zookeeper/zookeeper-3.4.7/bin/../lib/log4j-1.2.16.jar:/home/zhoumingyao/zookeeper/zookeeper-3.4.7/bin/../lib/jline-0.9.94.jar:/home/zhoumingyao/zookeeper/zookeeper-3.4.7/bin/../zookeeper-3.4.7.jar:/home/zhoumingyao/zookeeper/zookeeper-3.4.7/bin/../src/java/lib/*.jar:/home/zhoumingyao/zookeeper/zookeeper-3.4.7/bin/../conf:

2015-12-20 23:22:10,660 [myid:] - INFO [main:Environment@100] - Clientenvironment:java.library.path=/usr/java/packages/lib/i386:/lib:/usr/lib

2015-12-20 23:22:10,665 [myid:] - INFO [main:Environment@100] - Client environment:java.io.tmpdir=/tmp

2015-12-20 23:22:10,665 [myid:] - INFO [main:Environment@100] - Client environment:java.compiler=<NA>

2015-12-20 23:22:10,666 [myid:] - INFO [main:Environment@100] - Client environment:os.name=Linux

2015-12-20 23:22:10,666 [myid:] - INFO [main:Environment@100] - Client environment:os.arch=i386

2015-12-20 23:22:10,667 [myid:] - INFO [main:Environment@100] - Clientenvironment:os.version=2.6.32-504.el6.i686

2015-12-20 23:22:10,668 [myid:] - INFO [main:Environment@100] - Client environment:user.name=root

2015-12-20 23:22:10,668 [myid:] - INFO [main:Environment@100] - Client environment:user.home=/root

2015-12-20 23:22:10,668 [myid:] - INFO [main:Environment@100] - Clientenvironment:user.dir=/home/zhoumingyao/zookeeper/zookeeper-3.4.7/bin

2015-12-20 23:22:10,693 [myid:] - INFO [main:ZooKeeper@438] - Initiating client connection,connectString=localhost:2181 sessionTimeout=30000watcher=org.apache.zookeeper.ZooKeeperMain$MyWatcher@b07fd3

Welcome to ZooKeeper!

2015-12-20 23:22:10,953 [myid:] - INFO [main-SendThread(localhost:2181):ClientCnxn$SendThread@1032] - Openingsocket connection to server localhost/0:0:0:0:0:0:0:1:2181. Will not attempt toauthenticate using SASL (unknown error)

JLine support is enabled

2015-12-20 23:22:11,342 [myid:] - INFO [main-SendThread(localhost:2181):ClientCnxn$SendThread@876] - Socketconnection established to localhost/0:0:0:0:0:0:0:1:2181, initiating session

2015-12-20 23:22:11,672 [myid:] - INFO [main-SendThread(localhost:2181):ClientCnxn$SendThread@1299] - Sessionestablishment complete on server localhost/0:0:0:0:0:0:0:1:2181, sessionid =0x151c241c15b0000, negotiated timeout = 30000

WATCHER::

WatchedEvent state:SyncConnected type:None path:null

[zk: localhost:2181(CONNECTED) 0]


光標停留在[zk:localhost:2181(CONNECTED) 0]這一行,我們可以通過help請求來查看所有的支持命令,如清單1-13所示。

清單1-13 ZKCli help命令

[zk: localhost: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 dataacl

        addauth scheme auth

        quit

        getAcl path

        close

        connect host:port


關於ZKCli命令我們會在後續章節詳細解釋,這裏只做一個簡單的演示,我們可以使用類似於Linux的ls命令打印ZooKeeper內部ZNode列表,如清單1-14所示。

清單1-14 打印ZNode列表

[zk: localhost:2181(CONNECTED) 1] ls /

[zookeeper]


上面示例返回一個字符串zookeeper,這是一個ZooKeeper的ZNode(ZooKeeper術語),我們可以通過腳本創建一個ZNode,如清單1-15所示。

清單1-15 創建一個ZNode

[zk: localhost:2181(CONNECTED) 3] create /HelloWorld ""

Created /HelloWorld

[zk: localhost:2181(CONNECTED) 4] ls /

[zookeeper, HelloWorld]


歡迎關注麥克叔叔每晚十點說,感興趣的朋友可以關注公衆號,我們一起交流、學習。

發佈了428 篇原創文章 · 獲贊 197 · 訪問量 82萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章