以下几种情况:
1. 下载的版本问题(>= 3.5.5)
版本:3.6.1
,实际上只要 >= 3.5.5
版本都会出现这种问题。
问题原因:下载了错误的版本文件。因为Zookeeper
从3.5.5
后开始拆分为两个版本,,而且他们的结构还很类似。
- 标准版本(Apache ZooKeeper x.y.z ),下载的文件名为:
apache-zookeeper-x.y.z-bin.tar.gz
- 另一个是源码版本(Apache ZooKeeper x.y.z Source Release),下载的文件名为:
apache-zookeeper-x.y.z.tar.gz
官方说明:
所以下载 Zookeeper 的时候要注意,下载第一个。
2. 端口冲突问题(>=3.5.0)
在3.5.5版本
及以上,Zookeeper
提供了一个内嵌的Jetty
容器来运行 AdminServer
,默认占用的是 8080
端口,AdminServer
主要是来查看 Zookeeper
的一些状态,如果机器上有其他程序(比如:Tomcat
)占用了 8080
端口,也会导致 Starting zookeeper … FAILED TO START
的问题。
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:176) at org.apache.zookeeper.server.ZooKeeperServerMain.runFromConfig(ZooKeeperServerMain.java:153) at org.apache.zookeeper.server.ZooKeeperServerMain.initializeAndRun(ZooKeeperServerMain.java:112) at org.apache.zookeeper.server.ZooKeeperServerMain.main(ZooKeeperServerMain.java:67) at org.apache.zookeeper.server.quorum.QuorumPeerMain.initializeAndRun(QuorumPeerMain.java:140) at org.apache.zookeeper.server.quorum.QuorumPeerMain.main(QuorumPeerMain.java:90) Caused by: java.io.IOException: Failed to bind to /0.0.0.0:8080 //不能绑定8080端口 at org.eclipse.jetty.server.ServerConnector.openAcceptChannel(ServerConnector.java:346) at org.eclipse.jetty.server.ServerConnector.open(ServerConnector.java:307) at org.eclipse.jetty.server.AbstractNetworkConnector.doStart(AbstractNetworkConnector.java:80) at org.eclipse.jetty.server.ServerConnector.doStart(ServerConnector.java:231) at org.eclipse.jetty.util.component.AbstractLifeCycle.start(AbstractLifeCycle.java:72) at org.eclipse.jetty.server.Server.doStart(Server.java:385) at org.eclipse.jetty.util.component.AbstractLifeCycle.start(AbstractLifeCycle.java:72) at org.apache.zookeeper.server.admin.JettyAdminServer.start(JettyAdminServer.java:167) ... 5 more Caused by: java.net.BindException: Address already in use //地址正在被使用 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 Unable to start AdminServer, exiting abnormally 2020-07-17 21:07:30,759 [myid:] - INFO [main:ZKAuditProvider@42] - ZooKeeper audit is disabled. 2020-07-17 21:07:30,760 [myid:] - ERROR [main:ServiceUtils@42] - Exiting JVM with code 4
可以通过以下几种方式去解决:
1. 如果不需要 AdminServer
,可以直接禁用:打开 zoo.cfg
配置文件,直接添加以下语句即可。
# 禁用 AdminServer 服务
admin.enableServer=false
2. 如果想使用 AdminServer
, 那么可以直接在 zoo.cfg
配置文件中修改端口号即可,比如让其绑定 9000
。
# admin port
admin.serverPort=9000