Zookeeper合奏不出现

jav*_*thu 5 ubuntu-12.04 apache-zookeeper

我正在尝试按照文档配置3个节点的集合。所有这些都在Linux Ubuntu上。在所有三个节点上,配置文件如下所示:

$ ZOOKEEPER_HOME / conf下的zoo.cfg

tickTime=2000
dataDir=/home/zkuser/zookeeper_data
clientPort=2181
initLimit=5
syncLimit=2
server.1=ip.of.zk1:2888:3888
server.2=ip.of.zk2:2888:3888
server.3=ip.of.zk3:2888:3888
Run Code Online (Sandbox Code Playgroud)

我还将相应的“ myid”文件放在/home/zkuser/zookeeper_data/目录下。此myid文件包含位于节点(ip.of.zk1)上的1,依此类推。

当我使用bin / zkServer.sh启动zk服务器时,启动时不会在控制台上显示任何异常。但是,当我打开bin目录下的zookeeper.out文件时,看到以下错误。

2014-11-04 00:23:49,120 [myid:3] - WARN  [WorkerSender[myid=3]:QuorumCnxManager@382] - Cannot open channel to 1 at election address /ip.of.zk1:3888
java.net.NoRouteToHostException: No route to host
    at java.net.PlainSocketImpl.socketConnect(Native Method)
    at java.net.AbstractPlainSocketImpl.doConnect(AbstractPlainSocketImpl.java:327)
    at java.net.AbstractPlainSocketImpl.connectToAddress(AbstractPlainSocketImpl.java:193)
    at java.net.AbstractPlainSocketImpl.connect(AbstractPlainSocketImpl.java:180)
    at java.net.SocksSocketImpl.connect(SocksSocketImpl.java:385)
    at java.net.Socket.connect(Socket.java:546)
    at org.apache.zookeeper.server.quorum.QuorumCnxManager.connectOne(QuorumCnxManager.java:368)
    at org.apache.zookeeper.server.quorum.QuorumCnxManager.toSend(QuorumCnxManager.java:341)
    at org.apache.zookeeper.server.quorum.FastLeaderElection$Messenger$WorkerSender.process(FastLeaderElection.java:449)
    at org.apache.zookeeper.server.quorum.FastLeaderElection$Messenger$WorkerSender.run(FastLeaderElection.java:430)
    at java.lang.Thread.run(Thread.java:701)
2014-11-04 00:23:49,123 [myid:3] - WARN  [WorkerSender[myid=3]:QuorumCnxManager@382] - Cannot open channel to 2 at election address /ip.of.zk2:3888
java.net.ConnectException: Connection refused
    at java.net.PlainSocketImpl.socketConnect(Native Method)
    at java.net.AbstractPlainSocketImpl.doConnect(AbstractPlainSocketImpl.java:327)
    at java.net.AbstractPlainSocketImpl.connectToAddress(AbstractPlainSocketImpl.java:193)
    at java.net.AbstractPlainSocketImpl.connect(AbstractPlainSocketImpl.java:180)
    at java.net.SocksSocketImpl.connect(SocksSocketImpl.java:385)
    at java.net.Socket.connect(Socket.java:546)
    at org.apache.zookeeper.server.quorum.QuorumCnxManager.connectOne(QuorumCnxManager.java:368)
    at org.apache.zookeeper.server.quorum.QuorumCnxManager.toSend(QuorumCnxManager.java:341)
    at org.apache.zookeeper.server.quorum.FastLeaderElection$Messenger$WorkerSender.process(FastLeaderElection.java:449)
    at org.apache.zookeeper.server.quorum.FastLeaderElection$Messenger$WorkerSender.run(FastLeaderElection.java:430)
    at java.lang.Thread.run(Thread.java:701)
Run Code Online (Sandbox Code Playgroud)

注意:我已经在每台机器上使用iptables打开了适当的端口。例如:连锁输入(接受政策)

target     prot opt source               destination         
ACCEPT     all  --  IP.of.ZK1       anywhere            
ACCEPT     all  --  IP.of.ZK2       anywhere            
ACCEPT     all  --  IP.of.ZK3       anywhere            

Chain FORWARD (policy ACCEPT)
target     prot opt source               destination         

Chain OUTPUT (policy ACCEPT)
target     prot opt source               destination    
Run Code Online (Sandbox Code Playgroud)

谁能告诉我我一直在想什么吗?

问候,JE

Mar*_*cah 3

确保这件事:

  • 您已在所有 3 台服务器上启动 Zookeeper 服务器
  • 所有服务器通过运行echo ruok | netcat ip.of.zk2 2181. 如果正常,服务器应该响应imok(仅供参考,这里是所有受支持的 4 字母命令的列表
  • /home/zkuser/zookeeper_data/myid每个服务器分别包含值 1/2/3
  • 您可以从第一台服务器 ping 其他 2 台服务器

如果有兴趣,我创建了一个 vagrant+ansible 脚本来创建 3 节点虚拟 Zookeeper 集群,请参阅https://github.com/mkrcah/virtual-zookeeper-cluster