zookeeper在單機上僞集羣測試時,出現Unable to start AdminServer, exiting abnormally

zookeeper在單機上僞集羣測試時,出現Unable to start AdminServer, exiting abnormally

出現該問題的原因大家都知道因爲啓動完一個zookeeper server後,默認的zkServer.cmd中,沒有將對應的不啓動AdminServer屏蔽。

AdminServerFactory.java中代碼如下

 public static AdminServer createAdminServer() {
        if (!"false".equals(System.getProperty("zookeeper.admin.enableServer"))) {
            try {
                Class<?> jettyAdminServerC = Class.forName("org.apache.zookeeper.server.admin.JettyAdminServer");
                Object adminServer = jettyAdminServerC.getConstructor().newInstance();
                return (AdminServer) adminServer;


            } catch (ClassNotFoundException e) {
                LOG.warn("Unable to start JettyAdminServer", e);
            } catch (InstantiationException e) {
                LOG.warn("Unable to start JettyAdminServer", e);
            } catch (IllegalAccessException e) {
                LOG.warn("Unable to start JettyAdminServer", e);
            } catch (InvocationTargetException e) {
                LOG.warn("Unable to start JettyAdminServer", e);
            } catch (NoSuchMethodException e) {
                LOG.warn("Unable to start JettyAdminServer", e);
            } catch (NoClassDefFoundError e) {
                LOG.warn("Unable to load jetty, not starting JettyAdminServer", e);
            }
        }
        return new DummyAdminServer();
    }

因爲第一個啓動的Zookeeper server已經把8080端口給佔用了

根據創建JettyAdminServer中代碼如下:

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

所以可以在zkServer.cmd中的最後一個call參數中,增加"-Dzookeeper.admin.enableServer=false"


或者

"-Dzookeeper.admin.serverPort=你的端口號"  

更改端口號後再進行啓動,這樣在單機環境下配置集羣測試就OK了



發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章