我试图在
documentation之后配置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
我还在/ 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]: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)
注意:我已经在每台机器上使用iptables打开了相应的端口.
例如 :
Chain 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
解决方法
确保这件事:
>您已在所有3台服务器上启动Zookeeper服务器
>通过运行echo ruok |,所有服务器都以非错误模式运行netcat ip.of.zk2 2181.如果没问题,服务器应该回复imok(仅供参考,这是一个list of all supported 4-letter commands)
> / home / zkuser / zookeeper_data / myid分别包含每个服务器的值1/2/3
>您可以从第一台服务器ping其他2台服务器
如果有兴趣,我创建了一个vagrant ansible脚本来创建一个3节点的虚拟Zookeeper集群,请参阅https://github.com/mkrcah/virtual-zookeeper-cluster