Zookeeper启动不成功,日志报java.net.BindException: Address already in use

最近集群在做新的迁移改动,所以需要开启很多集群。当在开启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

 

  • 5
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 6
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Halo 咯咯

有你的支持我会更加努力。

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值