zookeeper在Windows下的使用及端口占用處理

最近因項目需要,用了zookeeper,但是網上找的一些資料不甚友好。顧記錄一番,供大家參考。

zookeeper3.5版,提供一下下載(百度網盤)。

鏈接:https://pan.baidu.com/s/15dZ8OWeujlhYIyZvP44U7Q

提取碼:7jq4

 

其他目錄結構不贅述,直接看bin目錄下的。.sh結尾的是Linux環境下的。.cmd 是Windows環境下的。

如下圖:

zkServer.cmd --啓動服務端

zkCli.cmd --啓動客戶端

 

20190701

 

 

常見問題

  1. 客戶端啓動一閃而過,沒有啓動

原因探索:

  • 一、編輯zkServer.cmd文件,在末尾添加pause 。這樣運行出錯就不會退出,會提示錯誤信息,方便找到原因。

20190702

 

例如原因如下:

沒有找到zoo.cfg,初步判定是配置的問題。

到zookeeper目錄中找conf\zoo.cfg ,沒有找到此文件,但找到zoo_sample.cfg ,這個是一些zookeeper服務器的參數配置樣板,zookeeper的配置可以參考這個文件。

 

解決方法

需要重要配置zoo.cfg 的路徑文件。 

編輯zkEnv.cmd 文件(該文件是環境配置,如文件夾目錄等。一般啓動出錯是在由於環境變量配置導致相關文件查找不到,只需要在其中配置相關變量即可),改變ZOOCFG 的值爲%ZOOCFGDIR%\zoo_sample.cfg 即可。

@echo off
REM Licensed to the Apache Software Foundation (ASF) under one or more
REM contributor license agreements.  See the NOTICE file distributed with
REM this work for additional information regarding copyright ownership.
REM The ASF licenses this file to You under the Apache License, Version 2.0
REM (the "License"); you may not use this file except in compliance with
REM the License.  You may obtain a copy of the License at
REM
REM     http://www.apache.org/licenses/LICENSE-2.0
REM
REM Unless required by applicable law or agreed to in writing, software
REM distributed under the License is distributed on an "AS IS" BASIS,
REM WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
REM See the License for the specific language governing permissions and
REM limitations under the License.
set ZOOCFGDIR=%~dp0%..\conf
set ZOO_LOG_DIR=%~dp0%..\logs
set ZOO_LOG4J_PROP=INFO,CONSOLE
REM for sanity sake assume Java 1.6
REM see: http://java.sun.com/javase/6/docs/technotes/tools/windows/java.html
REM add the zoocfg dir to classpath
set CLASSPATH=%ZOOCFGDIR%
REM make it work in the release
SET CLASSPATH=%~dp0..\*;%~dp0..\lib\*;%CLASSPATH%
REM make it work for developers
SET CLASSPATH=%~dp0..\build\classes;%~dp0..\build\lib\*;%CLASSPATH%
set ZOOCFG=%ZOOCFGDIR%\zoo_sample.cfg
@REM setup java environment variables
if not defined JAVA_HOME (
  echo Error: JAVA_HOME is not set.
  goto :eof
)
set JAVA_HOME=%JAVA_HOME:"=%
if not exist "%JAVA_HOME%"\bin\java.exe (
  echo Error: JAVA_HOME is incorrectly set.
  goto :eof
)
set JAVA="%JAVA_HOME%"\bin\java

 

 

2.如上處理後還是無法啓動

控制檯顯示:

ZooKeeper JMX enabled by default
Using config: /opt/zookeeper-3.5.4-beta/bin/../conf/zoo.cfg
Starting zookeeper ... STARTED

以爲啓動成功,然後連接時報錯,查看後臺進程,沒有Zookeeper進程。

2019-07-22 15:50:23,724 [myid:] - ERROR [main:ZooKeeperServerMain@79] - Unable to start AdminServer, exiting abnormally
org.apache.zookeeper.server.admin.AdminServer$AdminServerException: Problem starting AdminServer on address 0.0.0.0, port 8080 and command URL /commands
	at org.apache.zookeeper.server.admin.JettyAdminServer.start(JettyAdminServer.java:107)
	at org.apache.zookeeper.server.ZooKeeperServerMain.runFromConfig(ZooKeeperServerMain.java:138)
	at org.apache.zookeeper.server.ZooKeeperServerMain.initializeAndRun(ZooKeeperServerMain.java:106)
	at org.apache.zookeeper.server.ZooKeeperServerMain.main(ZooKeeperServerMain.java:64)
	at org.apache.zookeeper.server.quorum.QuorumPeerMain.initializeAndRun(QuorumPeerMain.java:128)
	at org.apache.zookeeper.server.quorum.QuorumPeerMain.main(QuorumPeerMain.java:82)
Caused by: java.io.IOException: Failed to bind to /0.0.0.0:8080
	at org.eclipse.jetty.server.ServerConnector.openAcceptChannel(ServerConnector.java:346)
	at org.eclipse.jetty.server.ServerConnector.open(ServerConnector.java:308)
	at org.eclipse.jetty.server.AbstractNetworkConnector.doStart(AbstractNetworkConnector.java:80)
	at org.eclipse.jetty.server.ServerConnector.doStart(ServerConnector.java:236)
	at org.eclipse.jetty.util.component.AbstractLifeCycle.start(AbstractLifeCycle.java:68)
	at org.eclipse.jetty.server.Server.doStart(Server.java:396)
	at org.eclipse.jetty.util.component.AbstractLifeCycle.start(AbstractLifeCycle.java:68)
	at org.apache.zookeeper.server.admin.JettyAdminServer.start(JettyAdminServer.java:103)
	... 5 more
Caused by: java.net.BindException: 地址已在使用
	at sun.nio.ch.Net.bind0(Native Method)
	at sun.nio.ch.Net.bind(Net.java:433)
	at sun.nio.ch.Net.bind(Net.java:425)
	at sun.nio.ch.ServerSocketChannelImpl.bind(ServerSocketChannelImpl.java:223)
	at sun.nio.ch.ServerSocketAdaptor.bind(ServerSocketAdaptor.java:74)
	at org.eclipse.jetty.server.ServerConnector.openAcceptChannel(ServerConnector.java:342)
	... 12 more

 

通過日誌可以看到,8080的端口已經被佔用。一種方法是去查看佔用該端口的服務,將其關閉。另一種就是將ZK的服務佔用端口更改(推薦)。方法如下:

去zoo_sample.cfg文件中修改端口號,修改成你喜歡的端口號即可。

如:admin.serverPort=8090

20190703

 

 

最後再重新啓動 zkServer.cmd 服務

20190704

至此,便成功啓動ZK服務了!

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