step一、下載html
下載地址:http://zookeeper.apache.org/releases.htmljava
將下載的壓縮包放到用戶家目錄下(其餘目錄也能夠)apache
step二、解壓vim
- $tar –zxvf zookeeper-3.4.6.tar.gz
重命名api
- $mv zookeeper-3.4.6 zookeeper
step三、配置服務器
進入zookeeper/conf/目錄下,將改目錄下的zoo_sample.cfg配置文件拷貝4份,依次爲zoo.cfg zoo1.cfg zoo2.cfg zoo3.cfsession
使用vim編輯zoo1.cfg zoo2.cfg zoo3.cfg這三個配置文件dom
修改內容以下socket
配置說明oop
- tickTime:這個時間是做爲 Zookeeper 服務器之間或客戶端與服務器之間維持心跳的時間間隔,也就是每一個 tickTime 時間就會發送一個心跳。
- initLimit:這個配置項是用來配置 Zookeeper 接受客戶端(這裏所說的客戶端不是用戶鏈接 Zookeeper 服務器的客戶端,而是 Zookeeper 服務器集羣中鏈接到 Leader 的 Follower 服務器)初始化鏈接時最長能忍受多少個心跳時間間隔數。當已經超過 10個心跳的時間(也就是 tickTime)長度後 Zookeeper 服務器尚未收到客戶端的返回信息,那麼代表這個客戶端鏈接失敗。總的時間長度就是 10*2000=20 秒
- syncLimit:這個配置項標識 Leader 與 Follower 之間發送消息,請求和應答時間長度,最長不能超過多少個 tickTime 的時間長度,總的時間長度就是 5*2000=10秒
- dataDir:顧名思義就是 Zookeeper 保存數據的目錄,默認狀況下,Zookeeper 將寫數據的日誌文件也保存在這個目錄裏。
- clientPort:這個端口就是客戶端鏈接 Zookeeper 服務器的端口,Zookeeper 會監聽這個端口,接受客戶端的訪問請求。
- server.A=B:C:D:其中 A 是一個數字,表示這個是第幾號服務器;B 是這個服務器的 ip 地址;C 表示的是這個服務器與集羣中的 Leader 服務器交換信息的端口;D 表示的是萬一集羣中的 Leader 服務器掛了,須要一個端口來從新進行選舉,選出一個新的 Leader,而這個端口就是用來執行選舉時服務器相互通訊的端口。若是是僞集羣的配置方式,因爲 B 都是同樣,因此不一樣的 Zookeeper 實例通訊端口號不能同樣,因此要給它們分配不一樣的端口號。
使用vim修改zoo2.cfg的dataDir=/home/jianjian/zookeeper/server2/data,clientPort=2182,修改zoo3.cfg的dataDir=/home/jianjian/zookeeper/server3/data,clientPort=2183。dataDir目錄開始不存在,須要手動建立,並在各data文件下建立名爲myid的文件,文件內容對應服務器編號
- [jianjian@localhost zookeeper]$ echo 1 > server1/data/myid
- [jianjian@localhost zookeeper]$ echo 2 > server2/data/myid
- [jianjian@localhost zookeeper]$ echo 3 > server3/data/myid
step四、啓動
進入目錄/home/Hadoop/zookeeper/bin目錄,執行命令:
- $zkServer.sh start zoo1.cfg
啓動zoo1.cfg配置的服務,同理依次啓動zoo2.cfg和zoo3.cfg所配置的服務
step五、查看狀態
依次查看啓動的三臺服務,可見第二臺服務爲leader,第一臺和三臺爲follower(試驗好屢次都是第二臺是leader,只有一次是第三臺是leader,醉~)
附:
當zkServer.sh start和zkServer.sh status命令不接配置文件參數是,默認使用conf/zoo.cfg做爲參數
這是隻啓動一臺服務的狀況,可見Mode爲standalone,只有一臺服務的集羣...
step六、連通測試
測試server2(leader,其餘服務同理)是否連通
- [root@localhost bin]# ./zkCli.sh -server 127.0.0.1:2182
- Connecting to 127.0.0.1:2182
- 2015-08-12 20:55:23,658 [myid:] - INFO [main:Environment@100] - Client environment:zookeeper.version=3.4.6-1569965, built on 02/20/2014 09:09 GMT
- 2015-08-12 20:55:23,661 [myid:] - INFO [main:Environment@100] - Client environment:host.name=localhost.localdomain
- 2015-08-12 20:55:23,661 [myid:] - INFO [main:Environment@100] - Client environment:java.version=1.7.0_79
- 2015-08-12 20:55:23,662 [myid:] - INFO [main:Environment@100] - Client environment:java.vendor=Oracle Corporation
- 2015-08-12 20:55:23,662 [myid:] - INFO [main:Environment@100] - Client environment:java.home=/usr/java/jdk1.7.0_79/jre
- 2015-08-12 20:55:23,662 [myid:] - INFO [main:Environment@100] - Client environment:java.class.path=/home/jianjian/zookeeper/bin/../build/classes:/home/jianjian/zookeeper/bin/../build/lib/*.jar:/home/jianjian/zookeeper/bin/../lib/slf4j-log4j12-1.6.1.jar:/home/jianjian/zookeeper/bin/../lib/slf4j-api-1.6.1.jar:/home/jianjian/zookeeper/bin/../lib/netty-3.7.0.Final.jar:/home/jianjian/zookeeper/bin/../lib/log4j-1.2.16.jar:/home/jianjian/zookeeper/bin/../lib/jline-0.9.94.jar:/home/jianjian/zookeeper/bin/../zookeeper-3.4.6.jar:/home/jianjian/zookeeper/bin/../src/java/lib/*.jar:/home/jianjian/zookeeper/bin/../conf:
- 2015-08-12 20:55:23,663 [myid:] - INFO [main:Environment@100] - Client environment:java.library.path=/usr/java/packages/lib/i386:/lib:/usr/lib
- 2015-08-12 20:55:23,663 [myid:] - INFO [main:Environment@100] - Client environment:java.io.tmpdir=/tmp
- 2015-08-12 20:55:23,663 [myid:] - INFO [main:Environment@100] - Client environment:java.compiler=<NA>
- 2015-08-12 20:55:23,663 [myid:] - INFO [main:Environment@100] - Client environment:os.name=Linux
- 2015-08-12 20:55:23,663 [myid:] - INFO [main:Environment@100] - Client environment:os.arch=i386
- 2015-08-12 20:55:23,663 [myid:] - INFO [main:Environment@100] - Client environment:os.version=2.6.18-194.el5
- 2015-08-12 20:55:23,663 [myid:] - INFO [main:Environment@100] - Client environment:user.name=root
- 2015-08-12 20:55:23,663 [myid:] - INFO [main:Environment@100] - Client environment:user.home=/root
- 2015-08-12 20:55:23,664 [myid:] - INFO [main:Environment@100] - Client environment:user.dir=/home/jianjian/zookeeper/bin
- 2015-08-12 20:55:23,665 [myid:] - INFO [main:ZooKeeper@438] - Initiating client connection, connectString=127.0.0.1:2182 sessionTimeout=30000 watcher=org.apache.zookeeper.ZooKeeperMain$MyWatcher@154ea79
- 2015-08-12 20:55:23,699 [myid:] - INFO [main-SendThread(127.0.0.1:2182):ClientCnxn$SendThread@975] - Opening socket connection to server 127.0.0.1/127.0.0.1:2182. Will not attempt to authenticate using SASL (unknown error)
- 2015-08-12 20:55:23,703 [myid:] - INFO [main-SendThread(127.0.0.1:2182):ClientCnxn$SendThread@852] - Socket connection established to 127.0.0.1/127.0.0.1:2182, initiating session
- 2015-08-12 20:55:23,718 [myid:] - INFO [main-SendThread(127.0.0.1:2182):ClientCnxn$SendThread@1235] - Session establishment complete on server 127.0.0.1/127.0.0.1:2182, sessionid = 0x24f21e1b05b0000, negotiated timeout = 30000
- Welcome to ZooKeeper!
-
- WATCHER::
-
- WatchedEvent state:SyncConnected type:None path:null
- JLine support is enabled
- [zk: 127.0.0.1:2182(CONNECTED) 0]
出現以上信息表示連通成功。
附:
看到有些人配置僞集羣是將壓縮包壓縮後拷貝幾個副本,每一個副本表明一個zookeeper服務,我的以爲不必,只有拷貝配置文件並修改就行,一個配置文件表明一個zookeeper服務。