一,下載Zookeeper安裝包html
從官方網站下載穩定版安裝包後,解壓。java
其中ZK_HOME 爲:D:\Program Files\zookeeper-3.4.9apache
二,啓動Zookeeper Server服務器
因爲在Eclipse裏面寫的程序是Client,須要鏈接到Zookeeper Server。所以,須要開啓Zookeeper Server。在Windows下,運行ZK_HOME/bin/zkServer.cmd 便可啓動Zookeeper Serversession
如何啓動報錯提示找不到zoo.cfg,這是由於官網提供的是 ZK_HOME/conf/zoo_sample.cfg,複製一份重命名便可。eclipse
在Windows環境下,須要注意的是配置 dataDir 參數的值。它默認是在 ZK_HOME/bin/目錄下。能夠把它配置爲其餘目錄,好比:socket
表示將dataDir指定爲其轉爲目錄的父目錄下的 dataDir文件夾下(D:\Program Files\zookeeper-3.4.9\dataDir)分佈式
在cmd命令行啓動Zookeeper Server: >zkServer.cmdide
當有新的Client鏈接到Server後,就該cmd窗口就會輸出一些新的內容,以下:測試
三,Eclipse開發環境配置
新建一個Maven工程,添加:
<groupId>org.apache.zookeeper</groupId> <artifactId>zookeeper</artifactId> <version>3.4.9</version>
新建一個Class,源代碼以下:
import java.io.IOException; import org.apache.zookeeper.WatchedEvent; import org.apache.zookeeper.Watcher; import org.apache.zookeeper.ZooKeeper; public class Master implements Watcher{ ZooKeeper zk; String hostPort; public Master(String hostPort) { this.hostPort = hostPort; } void startZK() throws IOException{ zk = new ZooKeeper(hostPort, 15000, this); } @Override public void process(WatchedEvent event) { System.out.println(event); } public static void main(String[] args) throws Exception{ String add = "localhost:2181"; Master m = new Master(add); m.startZK(); Thread.sleep(60000); } }
Master.java的功能只是簡單地創建一個Zookeeper 會話。
運行這個類,Eclipse控制檯輸出:
2016-10-20 20:59:06,068 [myid:] - INFO [main:Environment@100] - Client environment:user.dir=E:\workspace\eclipse-workspace\zookeeper 2016-10-20 20:59:06,068 [myid:] - INFO [main:ZooKeeper@438] - Initiating client connection, connectString=localhost:2181 sessionTimeout=15000 watcher=zookeeper.Master@62f6fb59 2016-10-20 20:59:06,114 [myid:] - INFO [main-SendThread(0:0:0:0:0:0:0:1:2181):ClientCnxn$SendThread@1032] - Opening socket connection to server 0:0:0:0:0:0:0:1/0:0:0:0:0:0:0:1:2181. Will not attempt to authenticate using SASL (unknown error) 2016-10-20 20:59:06,114 [myid:] - INFO [main-SendThread(0:0:0:0:0:0:0:1:2181):ClientCnxn$SendThread@876] - Socket connection established to 0:0:0:0:0:0:0:1/0:0:0:0:0:0:0:1:2181, initiating session 2016-10-20 20:59:06,177 [myid:] - INFO [main-SendThread(0:0:0:0:0:0:0:1:2181):ClientCnxn$SendThread@1299] - Session establishment complete on server 0:0:0:0:0:0:0:1/0:0:0:0:0:0:0:1:2181, sessionid = 0x157e226a4790000, negotiated timeout = 15000 WatchedEvent state:SyncConnected type:None path:null
代表,測試鏈接成功。
若是運行時報錯:
log4j:WARN Please initialize the log4j system properly.
log4j:WARN See http://logging.apache.org/log4j/1.2/faq.html#noconfig for more info.
代表你的配置文件沒有添加到classpath下。只須要將ZK_HOME/conf/log4j.properties 放到工程的src目錄下便可。
四,在單機中模擬Zookeeper集羣
Zookeeper只須要添加若干配置文件,就能夠在一臺電腦上運行多個Zookeeper服務端,從而模擬Zookeeper集羣。它是經過在一臺電腦上運行多個進程,每一個進程單獨表明一個Zookeeper服務器,從而組成Zookeeper集羣的。
具體配置以下:
Zookeeper默認的配置文件是zoo_sample.cfg ,將該配置文件複製三份:
cp zoo_sample.cfg zoo.cfg zoo1.cfg zoo2.cfg
而後修改如下幾個參數:①dataDir ②clientPort ③添加 server.n=ip:仲裁通訊端口號:Leader選舉端口號
好比,這三個配置文件中的相應參數分別以下:
zoo.cfg
dataDir=/home/xxx/dataDir
clientPort=2181
server.1=127.0.0.1:2222:2223
server.2=127.0.0.1:3333:3334
server.3=127.0.0.1:4444:4445
zoo2.cfg
dataDir=/home/xxx/dataDir2
clientPort=2182
server.1=127.0.0.1:2222:2223
server.2=127.0.0.1:3333:3334
server.3=127.0.0.1:4444:4445
zoo3.cfg
dataDir=/home/xxx/dataDir3
clientPort=2183
server.1=127.0.0.1:2222:2223
server.2=127.0.0.1:3333:3334
server.3=127.0.0.1:4444:4445
另外,在dataDir指定的目錄下,建立一個myid文本文件,用來標識Zookeeper服務器的ID信息。
echo 1 > $dataDir/myid
echo 2 > $dataDir2/myid
echo 3 > $dataDir3/myid
使用相應的配置文件來啓動Zookeeper服務。以下圖,一共啓動了三個Zookeeper服務,從而在單機上模擬一個三節點集羣。
參考:《Zookeeper分佈式過程協同技術詳解》