我在aws上有3台服务器。每个开放的jdk 7和zookeeper 3.4.6都有独特的弹性ip。 每个conf / zoo.cfg都有
然后我用./zkServer.sh start启动它(说起始处) 和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安全的所有端口以排除这种情况。
netstat显示没有阻止2888和3888
我甚至尝试过使用zookeeper启动的所有3台服务器。 这是怎么回事?我如何让这些端口打开使用。
答案 0 :(得分:0)
您的问题得到解答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
这一步解决了我的问题。
答案 1 :(得分:0)
基于zoo.cfg在所有节点上交叉验证myid。同样的问题发生在我身上,我发现其中 2 个节点上的 myid 模式发生了变化。