2014-11-04 42 views
3

我试图配置3个节点的合奏后documentation。所有这些都在Linux Ubuntu上。 在所有三个节点配置文件看起来是这样的:在$ ZOOKEEPER_HOME动物园管理员合奏不会出现

zoo.cfg/conf目录

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 

我也放在/home/zkuser/zookeeper_data/目录下相应的 “myid” 的文件。 这个myid文件包含1节点(ip.of.zk1),等等。

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

2014-11-04 00:23:49,120 [myid:3] - WARN [WorkerSender[myid=3]:[email protected]] - 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]:[email protected]] - 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) 

注意:我已经打开使用的每个机器的iptables相应的端口。 例如: 链INPUT(政策接受)

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  

谁能请告诉我,我已经错过了什么?

问候, JE

+0

你是如何解决这个问题的?我也面临同样的问题。 – ferhan 2015-02-09 07:55:25

回答

2

确保:

  • 您已经通过运行echo ruok | netcat ip.of.zk2 2181开始了动物园管理员服务器的所有3个服务器
  • 所有服务器在非纠错模式下运行。如果正常,服务器端应回应imok(仅供参考,这里有一个list of all supported 4-letter commands
  • /home/zkuser/zookeeper_data/myid包含的值1/2/3为每个服务器,分别为
  • ,你可以从第一台服务器ping其他的2台服务器

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

3

我有类似的问题。我对herehere的问题有一些提示。在我的情况下,命令netstat -plutn 的输出是表示我已经通过在服务器N改变zoo.cfg的一部分,解决了这个问题选端口3888的东西,包括127.0.0.1:3888,从类似

server.1=name.of.s1:2888.3888 
... 
server.n=localhost:2888:3888 
... 

server.1=name.of.s1:2888.3888 
... 
server.n=0.0.0.0:2888:3888 
... 

ZooKeeper重启后,netstat -plutn的输出包括:::3888

显然这是ZooKeeper正确公开选举端口所需要的,在这种情况下是3888.