zookeeper Eclipse 開發環境搭建及簡單示例

一,下載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分佈式過程協同技術詳解》

相關文章
相關標籤/搜索