linux之zookeeper-3.4.10安裝,命令行命令簡單使用及JAVA API的簡單實現

zookeeper-3.4.10在linux上安裝步驟

準備工作,將zookeeper-3.4.10文件上傳到服務器上
第一步,執行**tar -zxvf zookeeper-3.4.10.tar.gz -C /opt/module/**命令,將文件解壓到opt下的module目錄下(根據自己上傳的版本更改命令,module目錄需要提前創建好)
文件解壓縮
第二步,移動到module目錄下的ZK文件夾中

cd /opt/module/zookeeper-3.4.10/

進入文件夾
第三步,創建zkData文件夾,然後進入conf文件夾

mkdir zkData
cd conf/

創建文件夾
第四步,將zoo_sample.cfg文件重命名爲zoo.cfg

mv zoo_sample.cfg zoo.cfg

在這裏插入圖片描述
第五步,打開zoo.cfg文件,將dataDir的值改爲剛剛創建的zkData的路徑

vi zoo.cfg

打開zoo.cfg
在這裏插入圖片描述
然後在最後增加代碼(主機名改爲自己linux系統對應的主機名,需要注意與hosts文件中的主機名一致)

#######################cluster##########################
server.1=bigdata2:2888:3888
server.2=bigdata1:2888:3888
server.3=bigdata3:2888:3888

第六步,進入到zkData文件夾中,創建並打開myid文件
在這裏插入圖片描述
在這裏插入圖片描述
在這裏插入圖片描述
在裏面輸入數值,數值與之前在zoo.cfg文件中設定的一致
server.1=bigdata2:2888:3888
在這裏插入圖片描述
第七步,回退到model目錄中
在這裏插入圖片描述
第八步,將zookeeper複製到其他linux系統上
在這裏插入圖片描述

scp -r zookeeper-3.4.10/ bigdata1:`pwd`

pwd代表相對路徑,也可以使用下面的絕對路徑

scp -r zookeeper-3.4.10/ bigdata1:'/opt/module/'

運行後結果如下:
在這裏插入圖片描述
第九步,將bigdata1和bigdata3的myid進行修改
在這裏插入圖片描述
在這裏插入圖片描述
在這裏插入圖片描述
第十步,配置環境變量
在這裏插入圖片描述
在這裏插入圖片描述

export ZK_HOME=/opt/module/zookeeper-3.4.10
export PATH=$PATH:$ZK_HOME/bin

在這裏插入圖片描述
第十一步,檢驗安裝配置成功
輸入zkS然後按tab鍵,如果可以自動將其補全爲zkServer.就代表配置成功
在這裏插入圖片描述
在這裏插入圖片描述

命令行操作

1.啓動zookeeper(集羣,最少兩個)

啓動集羣

zkServer.sh start

查看當前節點的zk狀態

zkServer.sh status

在這裏插入圖片描述

2.啓動zk客戶端

進入到ZK目錄下

cd /opt/module/zookeeper-3.4.10/

執行zkCli命令

bin/zkCli.sh

在這裏插入圖片描述
在這裏插入圖片描述

常用命令:

help:顯示所有操作命令
help
create:普通創建(永久節點)-s 含有序列 -e 臨時(重啓或者超時消失)

create /app1 "hello app1"
create /app1/server101 "192.168.1.101"
//創建短暫節點,退出當前客戶端然後再重啓客戶端,該節點消失
create -e /app-emphemeral 8888
//創建帶序號的節點,Created /app2/aa0000000000
create -s /app2/aa 888

在這裏插入圖片描述
get path [watch]:獲得節點的值

get /app1
get /app1/server101

在這裏插入圖片描述
set:設置節點的具體值
在這裏插入圖片描述
ls path [watch]:使用 ls 命令來查看當前znode中所包含的內容

ls /
ls / watch

在這裏插入圖片描述
在這裏插入圖片描述
delete:刪除節點
rmr:遞歸刪除節點
在這裏插入圖片描述
提升學歷

正規學信網可查,考研,考編,考公務員
必備學歷,
週期兩年半,請爲自己的未來做好鋪墊
如有需要請私信聯繫
在這裏插入圖片描述

在這裏插入圖片描述在這裏插入圖片描述

JAVA API的簡單應用

pom.xml

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <groupId>Zookeeper</groupId>
    <artifactId>Zookeeper</artifactId>
    <version>1.0-SNAPSHOT</version>
    <dependencies>
        <dependency>
            <groupId>org.apache.zookeeper</groupId>
            <artifactId>zookeeper</artifactId>
            <version>3.4.10</version>
        </dependency>
        <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
            <version>4.12</version>
            <scope>test</scope>
        </dependency>
    </dependencies>
</project>

API 簡單應用

import org.apache.zookeeper.*;
import org.junit.Before;
import org.junit.Test;
import java.io.IOException;

public class Zookeeper {
    //鏈接ZooKeeper集羣
    private String connectString = "bigdata2:2181,bigdata1:2181";
    private int sessionTimeout = 2000;
    private ZooKeeper zkClient = null;
    /**
     *
     * @throws IOException
     */
    @Before
    public void init() throws IOException {
        //鏈接客戶端
        zkClient = new ZooKeeper(connectString, sessionTimeout, new Watcher() {
            @Override
            public void process(WatchedEvent watchedEvent) {
                System.out.println(watchedEvent.getType() + "--" + watchedEvent.getPath());
                try {
                    zkClient.getChildren("/",true);
                } catch (KeeperException e) {
                    e.printStackTrace();
                } catch (InterruptedException e) {
                    e.printStackTrace();
                }
            }
        });
    }
    /**
     * 參數的意思分別是:
     * 參數1-2:key-value
     * 參數3:權限
     * 參數4:類型(臨時|永久|序列化)
     * @throws KeeperException
     * @throws InterruptedException
     */
    @Test
    public void create() throws KeeperException, InterruptedException {
        //主節點,節點的內容,
        zkClient.create("/bigdataaaaaa",
                "bigdataaaaaaaaaa".getBytes(),
                ZooDefs.Ids.OPEN_ACL_UNSAFE,
                CreateMode.PERSISTENT);
    }
}

分佈式秒殺

pom.xml

        <!-- zookeeper所需依賴 -->
        <dependency>
            <groupId>org.apache.curator</groupId>
            <artifactId>curator-framework</artifactId>
            <version>4.0.0</version>
        </dependency>
        <dependency>
            <groupId>org.apache.curator</groupId>
            <artifactId>curator-recipes</artifactId>
            <version>4.0.0</version>
        </dependency>
        <dependency>
            <groupId>org.apache.curator</groupId>
            <artifactId>curator-client</artifactId>
            <version>4.0.0</version>
        </dependency>
        <dependency>
            <groupId>com.google.guava</groupId>
            <artifactId>guava</artifactId>
            <version>16.0.1</version>
        </dependency>
import org.apache.curator.RetryPolicy;
import org.apache.curator.framework.CuratorFramework;
import org.apache.curator.framework.CuratorFrameworkFactory;
import org.apache.curator.framework.recipes.locks.InterProcessMutex;
import org.apache.curator.retry.ExponentialBackoffRetry;

public class TestDistributedLock {

    //定義共享資源
    private static int count = 10;

    private static void printCountNumber() {
        System.out.println("***********" + Thread.currentThread().getName() + "**********");
        System.out.println("當前值:" + count);
        count--;

        //睡2秒
        try {
            Thread.sleep(500);
        } catch (InterruptedException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
        System.out.println("***********" + Thread.currentThread().getName() + "**********");
    }


    public static void main(String[] args) {
        //定義客戶端重試的策略
        RetryPolicy policy = new ExponentialBackoffRetry(1000,  //每次等待的時間
                10); //最大重試的次數

        //定義ZK的一個客戶端
        CuratorFramework client = CuratorFrameworkFactory.builder()
                .connectString("bigdata111:2181")
                .retryPolicy(policy)
                .build();

        //在ZK生成鎖  ---> 就是ZK的目錄
        client.start();
        final InterProcessMutex lock = new InterProcessMutex(client, "/mylock");

        // 啓動10個線程去訪問共享資源
        for (int i = 0; i < 10; i++) {
            new Thread(new Runnable() {

                public void run() {
                    try {
                        //請求得到鎖
                        lock.acquire();
                        //訪問共享資源
                        printCountNumber();
                    } catch (Exception ex) {
                        ex.printStackTrace();
                    } finally {
                        //釋放鎖
                        try {
                            lock.release();
                        } catch (Exception e) {
                            e.printStackTrace();
                        }
                    }
                }
            }).start();
        }
    }
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章