zookeeper多實例部署

    若是系統須要同時使用到兩個zk集羣,爲了方便本地調試,須要啓動多個zk實例,他們相互獨立,不是集羣關係。網上關於zk的配置和部署有不少文章,如何配置不是本文的重點。但我在本地部署多實例時遇到了一些小問題,這裏記錄一下如何解決的,也但願能幫助到有相似問題的同窗~java

    zk版本:3.5.1bash

    首先看一段代碼:this

public static final int DEFAULT_PORT = 8080;
    private static final String DEFAULT_ADDRESS = "0.0.0.0";
    public static final String DEFAULT_COMMAND_URL = "/commands";

    public JettyAdminServer() throws AdminServerException {
        this(System.getProperty("zookeeper.admin.serverAddress",
                DEFAULT_ADDRESS), Integer.getInteger(
                "zookeeper.admin.serverPort", DEFAULT_PORT), System
                .getProperty("zookeeper.admin.commandURL", DEFAULT_COMMAND_URL));
    }

    看到zk在localhost:port/commands啓動了一個服務。若是配置文件或啓動參數中沒有沒有配置這個端口,zk使用默認端口,即8080。很明顯不一樣實例的admin.serverPor不能相同。調試

    我選擇在zoo.cfg中添加配置項,沒有使用啓動參數的方法,由於這樣方便管理:code

admin.serverPort=8081

    接着,修改zoo.cfg的其餘配置項server

clientPort=2183
dataDir=指定data路徑
dataLogDir=指定dataLog路徑

    接着,若是第二個實例的包是拷貝過來的,先清空dataDir和dataLogDir下面全部文件。部署

    最後,分別啓動兩個zk實例。啓動以後分別啓動zkCli,發現默認鏈接的是2181端口的服務。所以修改第二個客戶端的啓動參數:get

./zkCli.sh -server localhost:2183

    部署完成。io

ps:爲了方便啓動、中止、查看狀態操做,在~/.bash_profile下建立別名:class

ZK_HOME1=****/zookeeper-3.5.1-alpha
ZK_HOME2=*****/zookeeper-3.5.1-alpha

export ZK_HOME1
export ZK_HOME2

alias zkCli1='$ZK_HOME1/bin/zkCli.sh'
alias zkStart1='$ZK_HOME1/bin/zkServer.sh start'
alias zkStop1='$ZK_HOME1/bin/zkServer.sh stop'
alias zkStatus1='$ZK_HOME1/bin/zkServer.sh status'

alias zkCli2='$ZK_HOME2/bin/zkCli.sh -server localhost:2183'
alias zkStart2='$ZK_HOME2/bin/zkServer.sh start'
alias zkStop2='$ZK_HOME2/bin/zkServer.sh stop'
alias zkStatus2='$ZK_HOME2/bin/zkServer.sh status'
相關文章
相關標籤/搜索