Zookeeper错误:无法在选举地址打开通道X.

我在3个不同的aws服务器上安装了zookeeper。 以下是所有服务器中的配置

tickTime=2000 initLimit=10 syncLimit=5 dataDir=/var/zookeeper clientPort=2181 server.1=xxxx:2888:3888 server.2=xxxx:2888:3888 server.3=xxxx:2888:3888 

所有这三个实例都在var/zookeeper上有一个myid文件,其中包含相应的id。 所有三台服务器都从aws控制台打开了所有端口。 但是当我运行zookeeper服务器时,我在所有实例中都收到以下错误。

 2015-06-19 12:09:22,989 [myid:1] - WARN [QuorumPeer[myid=1]/0:0:0:0:0:0:0:0:2181:QuorumCnxManager@382] - Cannot open channel to 2 at election address /xxxx:3888 java.net.ConnectException: Connection refused at java.net.PlainSocketImpl.socketConnect(Native Method) at java.net.AbstractPlainSocketImpl.doConnect(AbstractPlainSocketImpl.java:339) at java.net.AbstractPlainSocketImpl.connectToAddress(AbstractPlainSocketImpl.java:200) at java.net.AbstractPlainSocketImpl.connect(AbstractPlainSocketImpl.java:182) at java.net.SocksSocketImpl.connect(SocksSocketImpl.java:392) at java.net.Socket.connect(Socket.java:579) at org.apache.zookeeper.server.quorum.QuorumCnxManager.connectOne(QuorumCnxManager.java:368) at org.apache.zookeeper.server.quorum.QuorumCnxManager.connectAll(QuorumCnxManager.java:402) at org.apache.zookeeper.server.quorum.FastLeaderElection.lookForLeader(FastLeaderElection.java:840) at org.apache.zookeeper.server.quorum.QuorumPeer.run(QuorumPeer.java:762) 2015-06-19 12:09:23,170 [myid:1] - WARN [QuorumPeer[myid=1]/0:0:0:0:0:0:0:0:2181:QuorumCnxManager@382] - Cannot open channel to 3 at election address /xxxx:3888 java.net.ConnectException: Connection refused at java.net.PlainSocketImpl.socketConnect(Native Method) at java.net.AbstractPlainSocketImpl.doConnect(AbstractPlainSocketImpl.java:339) at java.net.AbstractPlainSocketImpl.connectToAddress(AbstractPlainSocketImpl.java:200) at java.net.AbstractPlainSocketImpl.connect(AbstractPlainSocketImpl.java:182) at java.net.SocksSocketImpl.connect(SocksSocketImpl.java:392) at java.net.Socket.connect(Socket.java:579) at org.apache.zookeeper.server.quorum.QuorumCnxManager.connectOne(QuorumCnxManager.java:368) at org.apache.zookeeper.server.quorum.QuorumCnxManager.connectAll(QuorumCnxManager.java:402) at org.apache.zookeeper.server.quorum.FastLeaderElection.lookForLeader(FastLeaderElection.java:840) at org.apache.zookeeper.server.quorum.QuorumPeer.run(QuorumPeer.java:762) 2015-06-19 12:09:23,170 [myid:1] - INFO [QuorumPeer[myid=1]/0:0:0:0:0:0:0:0:2181:FastLeaderElection@849] - Notification time out: 25600 

如何在每个节点中定义本地服务器的ip? 如果您已经提供了公共IP,则侦听器将无法连接到该端口。 您必须为当前节点指定0.0.0.0

 server.1=0.0.0.0:2888:3888 server.2=192.168.10.10:2888:3888 server.3=192.168.2.1:2888:3888 

此更改也必须在其他节点上执行。

我遇到了保存问题并解决了它。

确保myid是在zoo.cfg中使用您的配置进行保存。

请检查conf目录中的zoo.cfg文件,其中包含此类内容。

 server.1=zookeeper1:2888:3888 server.2=zookeeper2:2888:3888 server.3=zookeeper3:2888:3888 

并检查服务器dataDir目录中的myid。 例如:

让我们说在zoo.cfg上定义的dataDir'/home/admin/data'

然后在zookeeper1上,你必须有一个名为myid的文件,并且在这个文件中的值为1;在zookeeper2上,你必须有一个名为myid的文件,并且在这个文件上有值2; 在zookeeper3上,您必须有一个名为myid的文件,并且该文件的值为3。

如果没有像这样配置,服务器将侦听错误的ip:端口。

下面是一些ansible jinja2模板信息,用于在zoo.cfg中自动构建具有0.0.0.0主机名的集群

 {% for url in zookeeper_hosts_list %} {%- set url_host = url.split(':')[0] -%} {%- if url_host == ansible_fqdn or url_host in ansible_all_ipv4_addresses -%} server.{{loop.index0}}=0.0.0.0:2888:3888 {% else %} server.{{loop.index0}}={{url_host}}:2888:3888 {% endif %} {% endfor %} 

如果您自己的主机名解析为127.0.0.1(在我的情况下,主机名在/ etc / hosts中),zookeeper将无法在zoo.cfg文件中没有0.0.0.0的情况下启动,但如果您的主机名解析为实际机器的IP,您可以将它自己的主机名放在配置文件中。

这对我有用

 Step 1: Node 1: zoo.cfg server.1= 0.0.0.0:: server.2= :: . . . server.n= :: Node 2 : server.1= :: server.2= 0.0.0.0:: . . . server.n= :: Now in location defined by datadir on your zoo.cfg Node 1: echo 1 > /id Node 2: echo 2 > /id . . . Node n: echo n > /id 

这个帮助我成功地开始了动物饲养员,但是一旦我开始玩它就会知道更多。 希望这可以帮助。

在3节点动物园管理员合奏上有类似的问题。 解决方案是espeirasbora建议并重新启动。

所以这就是我所做的

zookeeper1,zookeeper2和zookeeper3

答:我的合奏中的问题 :: znodes无法启动

B.三台3台机器中的System SetUp :: 3 Znodes

C.错误::

在我的zookeper日志文件中,我可以看到以下错误

 2016-06-26 14:10:17,484 [myid:1] - WARN [SyncThread:1:FileTxnLog@334] - fsync-ing the write ahead log in SyncThread:1 took 1340ms which will adversely effect operation latency. See the ZooKeeper troubleshooting guide 2016-06-26 14:10:17,847 [myid:1] - WARN [RecvWorker:2:QuorumCnxManager$RecvWorker@810] - Connection broken for id 2, my id = 1, error = java.io.EOFException at java.io.DataInputStream.readInt(DataInputStream.java:392) at org.apache.zookeeper.server.quorum.QuorumCnxManager$RecvWorker.run(QuorumCnxManager.java:795) 2016-06-26 14:10:17,848 [myid:1] - WARN [RecvWorker:2:QuorumCnxManager$RecvWorker@813] - Interrupting SendWorker 2016-06-26 14:10:17,849 [myid:1] - WARN [SendWorker:2:QuorumCnxManager$SendWorker@727] - Interrupted while waiting for message on queue java.lang.InterruptedException at java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject.reportInterruptAfterWait(AbstractQueuedSynchronizer.java:2014) at java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject.awaitNanos(AbstractQueuedSynchronizer.java:2088) at java.util.concurrent.ArrayBlockingQueue.poll(ArrayBlockingQueue.java:418) at org.apache.zookeeper.server.quorum.QuorumCnxManager.pollSendQueue(QuorumCnxManager.java:879) at org.apache.zookeeper.server.quorum.QuorumCnxManager.access$500(QuorumCnxManager.java:65) at org.apache.zookeeper.server.quorum.QuorumCnxManager$SendWorker.run(QuorumCnxManager.java:715) 2016-06-26 14:10:17,851 [myid:1] - WARN [SendWorker:2:QuorumCnxManager$SendWorker@736] - Send worker leaving thread 2016-06-26 14:10:17,852 [myid:1] - WARN [QuorumPeer[myid=1]/0:0:0:0:0:0:0:0:2181:Follower@89] - Exception when following the leader java.io.EOFException at java.io.DataInputStream.readInt(DataInputStream.java:392) at org.apache.jute.BinaryInputArchive.readInt(BinaryInputArchive.java:63) at org.apache.zookeeper.server.quorum.QuorumPacket.deserialize(QuorumPacket.java:83) at org.apache.jute.BinaryInputArchive.readRecord(BinaryInputArchive.java:99) at org.apache.zookeeper.server.quorum.Learner.readPacket(Learner.java:153) at org.apache.zookeeper.server.quorum.Follower.followLeader(Follower.java:85) at org.apache.zookeeper.server.quorum.QuorumPeer.run(QuorumPeer.java:846) 2016-06-26 14:10:17,854 [myid:1] - INFO [QuorumPeer[myid=1]/0:0:0:0:0:0:0:0:2181:Follower@166] - shutdown called java.lang.Exception: shutdown Follower 

D.行动和决议::

在每个znode上。 我修改了配置文件$ ZOOKEEPER_HOME / conf / zoo.cfg,将机器IP设置为“0.0.0.0”,同时保持其他2个znode的IP地址。 湾 重新启动了znode c。 检查状态d.Voila,我很好

见下文

————————————————-

在Zookeeper1上

 #Before modification [zookeeper1]$ tail -3 $ZOOKEEPER_HOME/conf/zoo.cfg server.1=zookeeper1:2888:3888 server.2=zookeeper2:2888:3888 server.3=zookeeper3:2888:3888 #After modification [zookeeper1]$ tail -3 $ZOOKEEPER_HOME/conf/zoo.cfg server.1=0.0.0.0:2888:3888 server.2=zookeeper2:2888:3888 server.3=zookeeper3:2888:3888 #Start the Zookeper (Stop and STart or restart ) [zookeeper1]$ $ZOOKEEPER_HOME/bin/zkServer.sh start ZooKeeper JMX enabled by default ZooKeeper remote JMX Port set to 52128 ZooKeeper remote JMX authenticate set to false ZooKeeper remote JMX ssl set to false ZooKeeper remote JMX log4j set to true Using config: /opt/zookeeper-3.4.8/bin/../conf/zoo.cfg Mode: follower [zookeeper1]$ $ZOOKEEPER_HOME/bin/zkServer.sh status ZooKeeper JMX enabled by default ZooKeeper remote JMX Port set to 52128 ZooKeeper remote JMX authenticate set to false ZooKeeper remote JMX ssl set to false ZooKeeper remote JMX log4j set to true Using config: /opt/zookeeper-3.4.8/bin/../conf/zoo.cfg Mode: follower 

————————————————– ——-

在Zookeeper2上

 #Before modification [zookeeper2]$ tail -3 $ZOOKEEPER_HOME/conf/zoo.cfg server.1=zookeeper1:2888:3888 server.2=zookeeper2:2888:3888 server.3=zookeeper3:2888:3888 #After modification [zookeeper2]$ tail -3 $ZOOKEEPER_HOME/conf/zoo.cfg server.1=zookeeper1:2888:3888 server.2=0.0.0.0:2888:3888 server.3=zookeeper3:2888:3888 #Start the Zookeper (Stop and STart or restart ) [zookeeper2]$ $ZOOKEEPER_HOME/bin/zkServer.sh start ZooKeeper JMX enabled by default ZooKeeper remote JMX Port set to 52128 ZooKeeper remote JMX authenticate set to false ZooKeeper remote JMX ssl set to false ZooKeeper remote JMX log4j set to true Using config: /opt/zookeeper-3.4.8/bin/../conf/zoo.cfg Mode: follower [zookeeper2]$ $ZOOKEEPER_HOME/bin/zkServer.sh status ZooKeeper JMX enabled by default ZooKeeper remote JMX Port set to 52128 ZooKeeper remote JMX authenticate set to false ZooKeeper remote JMX ssl set to false ZooKeeper remote JMX log4j set to true Using config: /opt/zookeeper-3.4.8/bin/../conf/zoo.cfg Mode: follower 

————————————————– ——-

在Zookeeper3上

 #Before modification [zookeeper3]$ tail -3 $ZOOKEEPER_HOME/conf/zoo.cfg server.1=zookeeper1:2888:3888 server.2=zookeeper2:2888:3888 server.3=zookeeper3:2888:3888 #After modification [zookeeper3]$ tail -3 $ZOOKEEPER_HOME/conf/zoo.cfg server.1=zookeeper1:2888:3888 server.2=zookeeper2:2888:3888 server.3=0.0.0.0:2888:3888 #Start the Zookeper (Stop and STart or restart ) [zookeeper3]$ $ZOOKEEPER_HOME/bin/zkServer.sh start ZooKeeper JMX enabled by default ZooKeeper remote JMX Port set to 52128 ZooKeeper remote JMX authenticate set to false ZooKeeper remote JMX ssl set to false ZooKeeper remote JMX log4j set to true Using config: /opt/zookeeper-3.4.8/bin/../conf/zoo.cfg Mode: follower [zookeeper3]$ $ZOOKEEPER_HOME/bin/zkServer.sh status ZooKeeper JMX enabled by default ZooKeeper remote JMX Port set to 52128 ZooKeeper remote JMX authenticate set to false ZooKeeper remote JMX ssl set to false ZooKeeper remote JMX log4j set to true Using config: /opt/zookeeper-3.4.8/bin/../conf/zoo.cfg Mode: follower 

在我的案例中,问题是,我必须启动所有三个zookeeper服务器,然后才能使用./zkCli.sh连接到zookeeper服务器