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


一,下載Zookeeper安裝包

官方網站下載穩定版安裝包后,解壓。

其中ZK_HOME 為:D:\Program Files\zookeeper-3.4.9

 

二,啟動Zookeeper Server

由於在Eclipse里面寫的程序是Client,需要連接到Zookeeper Server。因此,需要開啟Zookeeper Server。在Windows下,運行ZK_HOME/bin/zkServer.cmd 即可啟動Zookeeper Server

如何啟動報錯提示找不到zoo.cfg,這是因為官網提供的是 ZK_HOME/conf/zoo_sample.cfg,復制一份重命名即可。

在Windows環境下,需要注意的是配置 dataDir 參數的值。它默認是在 ZK_HOME/bin/目錄下。可以把它配置為其他目錄,比如:

表示將dataDir指定為其轉為目錄的父目錄下的 dataDir文件夾下(D:\Program Files\zookeeper-3.4.9\dataDir)

 

在cmd命令行啟動Zookeeper Server:  >zkServer.cmd

 

當有新的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分布式過程協同技術詳解》


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM