zookeeper環境搭建
zookeeper環境搭建
1.下載安裝包
下載安裝包
登錄zookeeper官網:https://zookeeper.apache.org/
可以從官網上下載,流程如下
地址:https://zookeeper.apache.org/releases.html#download
地址:https://www.apache.org/dyn/closer.cgi/zookeeper/
地址:https://mirrors.tuna.tsinghua.edu.cn/apache/zookeeper/
本人選擇3.4.14版本
地址:https://mirrors.tuna.tsinghua.edu.cn/apache/zookeeper/zookeeper-3.4.14/
在服務器上通過wget進行下載(路徑是/usr/local/zookeeper)
wget https://mirrors.tuna.tsinghua.edu.cn/apache/zookeeper/zookeeper-3.4.14/zookeeper-3.4.14.tar.gz
解壓壓縮包: tar -xzvf zookeeper-3.4.14.tar.gz
2.單機搭建
修改配置文件,在conf目錄下執行命令
cp zoo_sample.cfg zoo.cfg
啓動服務,在bin目錄下執行
./zkServer.sh start …/conf/zoo.cfg
查看進程,代表啓動成功(注意要先安裝JDK)
JDK安裝參考:https://blog.csdn.net/liujie379908/article/details/86515849
通過客戶端登錄
./zkCli.sh
連接成功後,顯示如下
到此爲止,單機版的zookeeper搭建成功了,可以愉快的玩耍了
3.集羣環境搭建
單板ip | client端口號 |
---|---|
10.31.20.171 | 2181 |
10.31.20.171 | 2182 |
10.31.20.171 | 2183 |
本文使用一塊單板來模擬集羣中的部署情況
新建三個目錄zoo1,zoo2,zoo3
在每個目錄中下載安裝包,解壓
3.1配置zoo1服務
在zoo1中conf目錄下執行命令
cp zoo_sample.cfg zoo1.cfg
配置zoo1.cfg文件
dataDir=/tmp/zookeeper-1
clientPort=2181
server.1=10.31.20.171:2888:3888
server.2=10.31.20.171:2889:3889
server.3=10.31.20.171:2890:3890
配置myid,在dataDir目錄下創建myid文件,配置sid爲1(與server.1對應)
3.2配置zoo2服務
在zoo2中conf目錄下執行命令
cp zoo_sample.cfg zoo2.cfg
配置zoo2.cfg文件
dataDir=/tmp/zookeeper-2
clientPort=2182
server.1=10.31.20.171:2888:3888
server.2=10.31.20.171:2889:3889
server.3=10.31.20.171:2890:3890
配置myid,在dataDir目錄下創建myid文件,配置sid爲2
3.3配置zoo3服務
在zoo3中conf目錄下執行命令
cp zoo_sample.cfg zoo3.cfg
配置zoo3.cfg文件
配置zoo2.cfg文件
dataDir=/tmp/zookeeper-3
clientPort=2183
server.1=10.31.20.171:2888:3888
server.2=10.31.20.171:2889:3889
server.3=10.31.20.171:2890:3890
配置myid,在dataDir目錄下創建myid文件,配置sid爲3
4.Cli客戶端測試
啓動服務
./zkServer.sh start ../conf/zoo1.cfg
./zkServer.sh start ../conf/zoo2.cfg
./zkServer.sh start ../conf/zoo3.cfg
查詢集羣中三個服務狀態
./zkServer.sh status …/conf/zoo1.cfg
zoo1服務爲follower,zoo2爲leader,zoo3爲follower
通過zkCli客戶端進行操作zk服務
./zkCli.sh -server 10.31.20.171:2182
在leader上創建或者刪除節點,會自動同步到從節點上
在從節點zoo1和zoo3上查看,/test-zk已經同步到從節點了
5.Java客戶端測試
測試代碼如下
public class App implements Watcher
{
private static final CountDownLatch countDownLatch = new CountDownLatch(1);
public static void main( String[] args )
{
try {
ZooKeeper zk = new ZooKeeper("10.31.20.171:2181,10.31.20.171:2182,10.31.20.171:2183",5000,new App());
System.out.println("ZooKeeper connect status:" + zk.getState());
countDownLatch.await();
String value1 = zk.create("/test-zk","0".getBytes(), ZooDefs.Ids.OPEN_ACL_UNSAFE, CreateMode.EPHEMERAL);
String value2 = zk.create("/test-zk","0".getBytes(), ZooDefs.Ids.OPEN_ACL_UNSAFE, CreateMode.EPHEMERAL_SEQUENTIAL);
System.out.println(value1);
System.out.println(value2);
System.out.println("main success");
System.in.read();
} catch (IOException e) {
e.printStackTrace();
} catch (InterruptedException e) {
e.printStackTrace();
} catch (KeeperException e) {
e.printStackTrace();
}
}
@Override
public void process(WatchedEvent watchedEvent) {
if (Event.KeeperState.SyncConnected == watchedEvent.getState()){
System.out.println("ZooKeeper connect status:" + watchedEvent.getState());
countDownLatch.countDown();
}
System.out.println("Receive watch event :"+ watchedEvent);
}
}