使用 zkServer.sh start-foreground 启动可以看到报错信息,使用的时候还是用 zkServer.sh start 来启动服务。
1.第一次安装报错
安装包(apache-zookeeper-3.6.0.tar.gz)启动报错如下:
[root@aliyun conf]# zkServer.sh start-foregroundZooKeeper JMX enabled by defaultUsing config: /usr/local/zookeeper/bin/../conf/zoo.cfgError: Could not find or load main class org.apache.zookeeper.server.quorum.QuorumPeerMainCaused by: java.lang.ClassNotFoundException: org.apache.zookeeper.server.quorum.QuorumPeerMain
类直接找不到,最近我把JDK从8换成了11,想着会不会是因为JDK的原因,上网查询了一下才知道,不带-bin的安装包是源码包,需要编译才能使用,没文化多可怕。
2.第二次安装报错
这次使用了已编译的安装包(apache-zookeeper-3.6.0-bin.tar.gz)启动报错如下:
-06-25 14:08:20,222 [myid:] - ERROR [main:ZooKeeperServerMain@79] - Unable to start AdminServer, exiting abnormallyorg.apache.zookeeper.server.admin.AdminServer$AdminServerException: Problem starting AdminServer on address 0.0.0.0, port 8080 and command URL /commandsat 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
真是命运多舛,之前安装zookeeper时没有遇到问题,当时应该是(用了编译后的包且8080端口未被占用),之前真的是凭运气上车的 😃
3.问题解决
这个就很明白了,端口被占用,换端口就能解决问题:修改zoo.cfg文件,添加admin.serverPort=8088。再次启动,成功:
[root@aliyun ~]# jps17669 QuorumPeerMain
【Linux部署】第一次部署ZooKeeper启动两次报错问题解决 Could not find or load main class+Failed to bind to /0.0.0.0:8080