ZooKeeper僞分佈式集羣安裝

獲取ZooKeeper安裝包

    下載地址:http://apache.dataguru.cn/zookeeperjava

    選擇一個穩定版本進行下載,我這裏下載的是zookeeper-3.4.6版本。node

ZooKeeper僞分佈式集羣安裝

    僞分佈式集羣:在一臺Server中,啓動多個ZooKeeper的實例。web

上傳並解壓安裝包

cd /usr
rz -by
tar xf zookeeper-3.4.6.tar.gz

建立實例配置文件

cd zookeeper-3.4.6/conf
cp zoo_sample.cfg zoo1.cfg
cp zoo_sample.cfg zoo2.cfg
cp zoo_sample.cfg zoo3.cfg

修改配置文件

    實例1的配置:
shell

vi zoo1.cfg

tickTime=2000
initLimit=10
syncLimit=5
dataDir=/tmp/zookeeper/d_1
clientPort=2181
dataLogDir=/usr/zookeeper-3.4.6/logs_1
server.1=localhost:2887:3887
server.2=localhost:2888:3888
server.3=localhost:2889:3889

     實例2的配置:
數據庫

vi zoo2.cfg

tickTime=2000
initLimit=10
syncLimit=5
dataDir=/tmp/zookeeper/d_2
clientPort=2182
dataLogDir=/usr/zookeeper-3.4.6/logs_2
server.1=localhost:2887:3887
server.2=localhost:2888:3888
server.3=localhost:2889:3889

     實例3的配置:
apache

vi zoo3.cfg

tickTime=2000
initLimit=10
syncLimit=5
dataDir=/tmp/zookeeper/d_3
clientPort=2183
dataLogDir=/usr/zookeeper-3.4.6/logs_3
server.1=localhost:2887:3887
server.2=localhost:2888:3888
server.3=localhost:2889:3889

準備啓動環境

mkdir /tmp/zookeeper/d_1
mkdir /tmp/zookeeper/d_2
mkdir /tmp/zookeeper/d_3

mkdir /usr/zookeeper-3.4.6/logs_1
mkdir /usr/zookeeper-3.4.6/logs_2
mkdir /usr/zookeeper-3.4.6/logs_3

echo "1" > /tmp/zookeeper/d_1/myid
echo "2" > /tmp/zookeeper/d_2/myid
echo "3" > /tmp/zookeeper/d_3/myid

啓動集羣

/usr/zookeeper-3.4.6/bin/zkServer.sh start zoo1.cfg
/usr/zookeeper-3.4.6/bin/zkServer.sh start zoo2.cfg
/usr/zookeeper-3.4.6/bin/zkServer.sh start zoo3.cfg

查看是否啓動成功

jps

#看到相似下面的進程就表示3個實例均啓動成功
13419 QuorumPeerMain
13460 QuorumPeerMain
13561 Jps
13392 QuorumPeerMain

#若是未成功啓動,能夠到zookeeper.out文件中查看啓動失敗的日誌信息。

查看節點狀態

[root@localhost ~]# /usr/zookeeper-3.4.6/bin/zkServer.sh status zoo1.cfg
JMX enabled by default
Using config: /usr/zookeeper-3.4.6/bin/../conf/zoo1.cfg
Mode: follower
[root@localhost ~]# /usr/zookeeper-3.4.6/bin/zkServer.sh status zoo2.cfg
JMX enabled by default
Using config: /usr/zookeeper-3.4.6/bin/../conf/zoo2.cfg
Mode: leader
[root@localhost ~]# /usr/zookeeper-3.4.6/bin/zkServer.sh status zoo3.cfg
JMX enabled by default
Using config: /usr/zookeeper-3.4.6/bin/../conf/zoo3.cfg
Mode: follower

#發現實例2爲leader,實例1和實例3均爲follower

    至此,一個ZK的僞分佈式集羣搭建完畢。api

Java客戶端測試

    須要引入zookeeper-3.4.6.jar和slf4j-api-1.61.jar這兩個jar包。
session

package com.cjw.demo;

import org.apache.zookeeper.CreateMode;
import org.apache.zookeeper.WatchedEvent;
import org.apache.zookeeper.Watcher;
import org.apache.zookeeper.ZooKeeper;
import org.apache.zookeeper.ZooDefs.Ids;

public class ZooKeeperClient {

    public static void main(String[] args) throws Exception {
        
        Watcher watcher = new Watcher() {

            @Override
            public void process(WatchedEvent event) {
                System.out.println(event.toString());
            }
            
        };
        
        ZooKeeper zk = new ZooKeeper("192.168.157.22:2181", 3000, watcher);
        System.out.println("====建立節點");
        zk.create("/cjw", "znode1".getBytes(), Ids.OPEN_ACL_UNSAFE, CreateMode.PERSISTENT);
        System.out.println("====查看節點是否安裝成功");
        System.out.println(new String(zk.getData("/cjw", false, null)));
        System.out.println("====修改節點的數據");
        zk.setData("/cjw", "cjw2015".getBytes(), -1);
        System.out.println("====查看修改的節點是否成功");
        System.out.println(new String(zk.getData("/cjw", false, null)));
        System.out.println("====刪除節點");
        zk.delete("/cjw", -1);
        System.out.println("====查看節點是否被刪除");
        System.out.println("節點狀態:" + zk.exists("/cjw", false));
        
        zk.close();
    }
}

    運行結果:分佈式

====建立節點
WatchedEvent state:SyncConnected type:None path:null
====查看節點是否安裝成功
znode1
====修改節點的數據
====查看修改的節點是否成功
cjw2015
====刪除節點
====查看節點是否被刪除
節點狀態:null

配置文件說明

initLimit: follower鏈接並同步到leader的初始化鏈接時間,它是經過tickTime的倍數表示。當初始化鏈接
    時間超過設置的時間時,則鏈接失敗。

syncLimit: follower和leader之間發送消息時請求和應答的時間長度,若是follower在設置的時間範圍內
    不能和leader通訊,那麼該follower將被丟棄,它也是按tickTime的倍數進行配置的。

tickTime: 定義心跳的時間間隔,
    注:zk的client和server之間也有和web開發相似的session的概念,而zk裏最小的session過時時間
    就是tickTime的兩倍

dataDir: 存儲在內存中數據庫快照功能。

clientPort: 監聽客戶端鏈接的端口號

dataLogDir: zk運行的相關日誌寫入目錄,設定了配置,那麼dataLog裏日誌的目錄將無效,專門的日誌存放
    路徑,對zk的性能和穩定性有好處。
相關文章
相關標籤/搜索