Zookeeper 无法监听 3888 端口

Posted

技术标签:

【中文标题】Zookeeper 无法监听 3888 端口【英文标题】:Zookeeper unable to listen on port 3888 【发布时间】:2015-03-12 11:18:42 【问题描述】:

我在 aws 上有 3 台服务器。每个带有 open jdk 7 和 zookeeper 3.4.6 的都有唯一的弹性 IP。 每个 conf/zoo.cfg 都有

clientPort=2181 server.1=server1:2888:3888 server.2=server2:2888:3888 server.3=server3:2888:3888

然后我用 ./zkServer.sh start 启动它(说 STARTED) zookeeper.out 说

2015-01-14 09:27:55,919 [myid:1] - INFO  [Thread-1:QuorumCnxManager$Listener@504] - My election bind port: /server1ipaddress:3888
2015-01-14 09:27:55,920 [myid:1] - ERROR [/server1ipaddress:3888:QuorumCnxManager$Listener@517] - Exception while listening
    java.net.BindException: Cannot assign requested address
            at java.net.PlainSocketImpl.socketBind(Native Method)
            at java.net.AbstractPlainSocketImpl.bind(AbstractPlainSocketImpl.java:376)
            at java.net.ServerSocket.bind(ServerSocket.java:376)
            at java.net.ServerSocket.bind(ServerSocket.java:330)
            at org.apache.zookeeper.server.quorum.QuorumCnxManager$Listener.run(QuorumCnxManager.java:507)

所以它无法打开端口。 我最终在 aws security 上打开了所有端口以排除这种情况。

使用 ruok 远程登录 2181 获取 imok。 telnet 到 2888 无法连接。连接被拒绝。 telnet 到 3888 无法连接。连接被拒绝。

netstat 显示没有任何东西阻塞 2888 和 3888

我什至在所有 3 个启动了 zookeeper 的服务器上都试过这个。 这是怎么回事?我如何打开这些端口以供使用。

【问题讨论】:

我想我解决了。我在 zoo.cfg 中使用内部 AWS IP 的服务器列表现在在 ./zkServer.sh 状态我在其他 2 上获得领导者和追随者 你是如何解决这个问题的?对我来说同样的问题 【参考方案1】:

您的问题已得到解答here。

简而言之:在每台 ZooKeeper 机器上,在您的 conf/zoo.cfg 上,您必须将当前服务器的 IP 设置为 0.0.0.0。 例如:如果您当前在 server1 上,则配置应包含以下几行:

server.1=0.0.0.0:2888:3888
server.2=server2:2888:3888
server.3=server3:2888:3888

这一步解决了我的问题。

【讨论】:

【参考方案2】:

基于zoo.cfg在所有节点上交叉验证myid。同样的问题发生在我身上,在查看 myid 模式在 2 个节点上发生了变化。

【讨论】:

以上是关于Zookeeper 无法监听 3888 端口的主要内容,如果未能解决你的问题,请参考以下文章

zookeeper运维

zookeeper 集群配置

Zookeeper的zoo.cfg的配置

Zookeeper 端口说明

zookeeper-端口说明

ZooKeeper多服务器设置示例