zookeeper集羣安裝與配置

    一、解壓zookeeperjava

    二、在$ZOOKEEPER_HOME/conf下建立zoo.cfg文件(參考配置文件:zoo_sample.cfg),內容爲:node

# CS通訊心跳時間,Zookeeper 服務器之間或客戶端與服務器之間維持心跳的時間間隔,也就是每一個 tickTime 時間就會發送一個心跳。tickTime以毫秒爲單位
tickTime=2000

# LF初始化通訊時限,集羣中的follower服務器(F)與leader服務器(L)之間初始鏈接時能容忍的最多心跳數(tickTime的數量)
initLimit=10

# LF同步通訊時限,集羣中的follower服務器與leader服務器之間請求和應答之間能容忍的最多心跳數(tickTime的數量)。
syncLimit=5

#數據文件目錄,Zookeeper保存數據的目錄,默認狀況下,Zookeeper將寫數據的日誌文件也保存在這個目錄裏。
dataDir=/root/app/zookeeper/data

#客戶端鏈接端口,客戶端鏈接 Zookeeper 服務器的端口,Zookeeper 會監聽這個端口,接受客戶端的訪問請求。
clientPort=2181

#服務器名稱與地址:集羣信息(服務器編號,服務器地址,LF通訊端口,選舉端口)
#這個配置項的書寫格式比較特殊,規則以下:
#server.N=YYY:A:B 
server.1=hadoop.master:2888:3888
server.2=hadoop.slave:2888:3888
#端口
#2181:用於客戶端的鏈接
#2888:follower與leader通訊
#3888:leader選舉端口

    三、根據zoo.cfg在dataDir配置的路徑下建立myid文件,且輸入server.N的N內容(例如:當前機器是server.1,那麼在    myid中輸入1)apache

    四、複製配置完畢的zookeepr到其餘節點服務器

scp -r $ZOOKEEPER_HOME root@hostname:/home

    五、複製完畢以後記得修改myidapp

    六、在各個節點上分別啓動腳本:ide

$ZOOKEEPER_HOME/bin/zkServer.sh start

    七、檢查命令oop

7.一、#zkServer.sh status
//若是出現Error contacting service. It is probably not running.錯誤,是由於節點只啓動了一個,沒法啓動集羣模式
7.二、#echo ruok | nc localhost 2181
//若是命令成功會返回imok(I'm ok)

    八、zk客戶端日誌

$ZOOKEEPER_HOME/bin/zkCli.sh -server hostname:2181
//啓動一個zk客戶端
//最終要記住一個help命令便可掌握其餘命令的用法
(操做以前須要瞭解相似文件系統的znode,
    簡單描述:zk中全部節點都是znode節點,znode節點不只能夠做爲目錄還能夠存儲數據.)
CREATE 建立znode
SET 設置znode的數據
GET 查詢znode
RMR 刪除znode
...等等自行查詢

    九、Java客戶端code

    相關代碼:server

import org.apache.zookeeper.CreateMode;
import org.apache.zookeeper.WatchedEvent;
import org.apache.zookeeper.Watcher;
import org.apache.zookeeper.ZooDefs.Ids;
import org.apache.zookeeper.ZooKeeper;
public class ZKClient {
    // 鏈接地址
    private final static String CONN = "192.168.1.200:2181";
    // client與zk超時時間(unit:ms)
    private final static int SESSION_TIMEOUT = 5000;

    public static void main(String[] args) throws Exception {

        //一、持久節點:建立的節點成功時,節點便會持久化在zk上
        //二、臨時節點:建立節點過程當中一旦發生有意或無心的客戶端超時或者關閉,節點都被刪除
        ZooKeeper zk = new ZooKeeper(CONN, SESSION_TIMEOUT, new Watcher() {
            @Override
            public void process(WatchedEvent event) {
                //接收zk各個時間通知
                System.out.println("------------------------");
                System.out.println("Path:"+event.getPath());
                System.out.println("type:"+event.getType());
                System.out.println("state"+event.getState());
                System.out.println("wrapper:"+event.getWrapper());
                System.out.println("------------------------");
            }
        });
        String path = "/hello";
        byte[] data = "testhello!".getBytes();
        zk.create(path,data, Ids.OPEN_ACL_UNSAFE, CreateMode.PERSISTENT);
        zk.close();
    }
}
相關文章
相關標籤/搜索