Zookeeper启动不成功,日志报java.net.BindException: Address already in use
最近集群在做新的迁移改动,所以需要开启很多集群。当在开启zookeeper时,有一个节点zookeeper并不能正常启动,使用命令:./zkServer.sh status查看了下状态,报错如下:JMX enabled by defaultUsing config: /usr/local/zookeeper/bin/../conf/zoo.cfgError contacting servic
最近集群在做新的迁移改动,所以需要开启很多集群。当在开启zookeeper时,有一个节点zookeeper并不能正常启动,使用命令:
./zkServer.sh status
查看了下状态,报错如下:
JMX enabled by default
Using config: /usr/local/zookeeper/bin/../conf/zoo.cfg
Error contacting service. It is probably not running.
用百度或Google进行搜索了一下,网上的共有三种解决方案:
1、打开zkServer.sh,找到
status)
STAT=`echo stat | nc localhost $(grep clientPort "$ZOOCFG" | sed -e 's/.*=//') 2> /dev/null| grep Mode`
在nc 和 localhost 之间加上 -q 1
如果已存在则去掉。
不过由于我的版本是3.4.6,所以在文件里并没有找到这一行。
2、调用sh zkServer.sh status 遇到这个问题。百度,google了后发现有人是修改sh脚本里的一个nc的参数来解决,可在3.4.6的sh文件里并没有找到nc的调用。配置文档里指定的log目录没有创建导致出错,手动增加目录后重启,问题解决。
注:目前我的日志没有问题。
3、创建数据目录,也就是在zoo.cfg配置文件里dataDir指定的那个目录下创建myid文件,并且指定id,改id为你zoo.cfg文件中server.1=localhost:2887:3887中的1.只要在myid头部写入1即可.
注:这种方法我试过了,但是还不行。
------------------------------
以上这三种方法都没能解决我的问题,所以我想通过去查看下日志,看能不能有解决思路。来到zookeeper的bin/目录下,
cd zookeeper/bin/
ll
-rwxr-xr-x 1 hadoop hadoop 238 1月 16 13:57 README.txt*
-rwxr-xr-x 1 hadoop hadoop 1937 1月 16 13:57 zkCleanup.sh*
-rwxr-xr-x 1 hadoop hadoop 1049 1月 16 13:57 zkCli.cmd*
-rwxr-xr-x 1 hadoop hadoop 1534 1月 16 13:57 zkCli.sh*
-rwxr-xr-x 1 hadoop hadoop 1333 1月 16 13:57 zkEnv.cmd*
-rwxr-xr-x 1 hadoop hadoop 2696 1 16 13:57 zkEnv.sh*
-rwxr-xr-x 1 hadoop hadoop 1084 1 16 13:57 zkServer.cmd*
-rwxr-xr-x 1 hadoop hadoop 5742 1 16 13:57 zkServer.sh*
-rw-r--r-- 1 hadoop hadoop 1113557756 1 16 14:28 zookeeper.out
cat zookeeper.out
里面的报错信息如下:
2018-01-16 13:59:03,971 [myid:] - INFO [main:QuorumPeerConfig@103] - Reading configuration from: /usr/local/zookeeper-3.4.6/bin/../conf/zoo.cfg
2018-01-16 13:59:03,974 [myid:] - INFO [main:QuorumPeerConfig@340] - Defaulting to majority quorums
2018-01-16 13:59:03,977 [myid:1] - INFO [main:DatadirCleanupManager@78] - autopurge.snapRetainCount set to 3
2018-01-16 13:59:03,977 [myid:1] - INFO [main:DatadirCleanupManager@79] - autopurge.purgeInterval set to 0
2018-01-16 13:59:03,977 [myid:1] - INFO [main:DatadirCleanupManager@101] - Purge task is not scheduled.
2018-01-16 13:59:03,985 [myid:1] - INFO [main:QuorumPeerMain@127] - Starting quorum peer
2018-01-16 13:59:03,994 [myid:1] - INFO [main:NIOServerCnxnFactory@94] - binding to port 0.0.0.0/0.0.0.0:2181
2018-01-16 13:59:03,995 [myid:1] - ERROR [main:QuorumPeerMain@89] - Unexpected exception, exiting abnormally
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 sun.nio.ch.ServerSocketAdaptor.bind(ServerSocketAdaptor.java:67)
at org.apache.zookeeper.server.NIOServerCnxnFactory.configure(NIOServerCnxnFactory.java:95)
at org.apache.zookeeper.server.quorum.QuorumPeerMain.runFromConfig(QuorumPeerMain.java:130)
at org.apache.zookeeper.server.quorum.QuorumPeerMain.initializeAndRun(QuorumPeerMain.java:111)
at org.apache.zookeeper.server.quorum.QuorumPeerMain.main(QuorumPeerMain.java:78)
原来是我的2181端口被占用的问题。用netstat查看下2181占用的情况
hadoop@hbase1:/usr/local/zookeeper-3.4.6/bin$ sudo netstat -atunlp | grep 2181
[sudo] password for hadoop:
tcp6 0 0 :::2181 :::* LISTEN 1401/java
注:我这里加上sudo 的原因是,因为有些端口占用普通用户是看不到的,加上之后可以显示所有的信息,这样对于问题排查还是很有帮助的。
发现是java这个程序占用了端口,而1401就是进程的PID,所以:
sudo kill -9 1401
最后重新启动了下zookeeper,OK,问题解决了。
欢迎关注我的公众号:Halo7lolo
更多推荐
所有评论(0)