zookeeper关闭默认管理端口admin.serverPort=8080

zookeeper关闭默认管理端口admin.serverPort=8080

问题

使用netstat -tunlp命令发现,除了zookeeper占用的2181端口以外还有一个随机端口和8080端口启用了。

原因

1、zookeeper启动后默认会开一个端口用来支持jmx调用,所以导致开启了非预期的随机端口。
2、zookeeper 中有个内嵌的管理控制台是通过jetty启动,会占用8080 端口。

方法1

(在使用zookeeper 3.6之后的版本,开启服务器,zk会自动占用8080端口,而后端服务器大部分都需要使用8080端口,因此需要zk的配置文件即可。)

在zk conf目录里面,修改zoo.cfg,在其中加上:

# admin.serverPort 默认占8080端口
admin.serverPort=自己定一个端口
重启zk服务器,即可。

方法2

如果不用admin端口,在启动脚本加上"-Dzookeeper.admin.enableServer=false"

重启即可

Linux脚本

【修改前】的启动脚本apache-zookeeper-3.8.4-bin/bin/zkServer.sh

nohup "$JAVA" $ZOO_DATADIR_AUTOCREATE "-Dzookeeper.log.dir=${ZOO_LOG_DIR}" \
"-Dzookeeper.log.file=${ZOO_LOG_FILE}" "-Dzookeeper.admin.enableServer=false" \
-XX:+HeapDumpOnOutOfMemoryError -XX:OnOutOfMemoryError='kill -9 %p' \
-cp "$CLASSPATH" $JVMFLAGS $ZOOMAIN "$ZOOCFG" > "$_ZOO_DAEMON_OUT" 2>&1 < /dev/null &

【修改后】的启动脚本apache-zookeeper-3.8.4-bin/bin/zkServer.sh

nohup "$JAVA" $ZOO_DATADIR_AUTOCREATE "-Dzookeeper.log.dir=${ZOO_LOG_DIR}" \
"-Dzookeeper.log.file=${ZOO_LOG_FILE}" "-Dzookeeper.admin.enableServer=false" \
"-Dzookeeper.admin.enableServer=false" \
-XX:+HeapDumpOnOutOfMemoryError -XX:OnOutOfMemoryError='kill -9 %p' \
-cp "$CLASSPATH" $JVMFLAGS $ZOOMAIN "$ZOOCFG" > "$_ZOO_DAEMON_OUT" 2>&1 < /dev/null &

Windows脚本

【修改前】的启动脚本apache-zookeeper-3.8.4-bin/bin/zkServer.cmd

call %JAVA% "-Dzookeeper.log.dir=%ZOO_LOG_DIR%" "-Dzookeeper.log.file=%ZOO_LOG_FILE%" "-XX:+HeapDumpOnOutOfMemoryError" "-XX:OnOutOfMemoryError=cmd /c taskkill /pid %%%%p /t /f" -cp "%CLASSPATH%" %ZOOMAIN% "%ZOOCFG%" %*

【修改后】的启动脚本apache-zookeeper-3.8.4-bin/bin/zkServer.cmd

call %JAVA% "-Dzookeeper.log.dir=%ZOO_LOG_DIR%" "-Dzookeeper.log.file=%ZOO_LOG_FILE%" "-XX:+HeapDumpOnOutOfMemoryError" "-Dzookeeper.admin.enableServer=false" "-XX:OnOutOfMemoryError=cmd /c taskkill /pid %%%%p /t /f" -cp "%CLASSPATH%" %ZOOMAIN% "%ZOOCFG%" %*