我们在开发机器上设置了一个独立的zookeeper。除了这一台testdev机器之外,它适用于所有其他开发机器。
我在尝试通过testdev连接到zookeeper时反复出现此错误:
2012-11-09 14:06:53,909 - INFO [main-SendThread(zk01.dev.bunchball.net:2181):ClientCnxn$SendThread@947] - Socket connection established to zk01.dev.bunchball.net/192.168.8.58:2181, initiating session
2012-11-09 14:06:53,911 - INFO [main-SendThread(zk01.dev.bunchball.net:2181):ClientCnxn$SendThread@1183] - Unable to read additional data from server sessionid 0x0, likely server has closed socket, closing socket connection and attempting reconnect
2012-11-09 14:06:55,366 - INFO [main-SendThread(zk01.dev.bunchball.net:2181):ClientCnxn$SendThread@1058] - Opening socket connection to server zk01.dev.bunchball.net/192.168.8.58:2181
2012-11-09 14:06:55,368 - INFO [main-SendThread(zk01.dev.bunchball.net:2181):ClientCnxn$SendThread@947] - Socket connection established to zk01.dev.bunchball.net/192.168.8.58:2181, initiating session
2012-11-09 14:06:55,368 - INFO [main-SendThread(zk01.dev.bunchball.net:2181):ClientCnxn$SendThread@1183] - Unable to read additional data from server sessionid 0x0, likely server has closed socket, closing socket connection and attempting reconnect
2012-11-09 14:06:57,271 - INFO [main-SendThread(zk01.dev.bunchball.net:2181):ClientCnxn$SendThread@1058] - Opening socket connection to server zk01.dev.bunchball.net/192.168.8.58:2181
2012-11-09 14:06:57,274 - INFO [main-SendThread(zk01.dev.bunchball.net:2181):ClientCnxn$SendThread@947] - Socket connection established to zk01.dev.bunchball.net/192.168.8.58:2181, initiating session
2012-11-09 14:06:57,275 - INFO [main-SendThread(zk01.dev.bunchball.net:2181):ClientCnxn$SendThread@1183] - Unable to read additional data from server sessionid 0x0, likely server has closed socket, closing socket connection and attempting reconnect
我们尝试重新启动测试开发机器,并重新启动zookeeper主机但没有任何效果。我们完全混淆为什么它与其他机器完全一致,除了这个。可能是什么原因造成的?
答案 0 :(得分:14)
我和你有同样的情况,我刚刚解决了这个问题。
这就是你配置了直接导致的偶数动物园管理员的原因 这个问题,尝试将zookeeper节点的数量更改为奇数。
例如我的zookeeper集群的原始状态由4个节点组成,然后只删除其中一个节点,导致节点数为3 好吧,现在可以启动zookeeper集群了
下面是成功连接到zookeeper服务器的输出
2013-04-22 22:07:05,654 [myid:] - INFO [main:ZooKeeper@438] - Initiating client connection, connectString=localhost:2181 sessionTimeout=30000 watcher=org.apache.zookeeper.ZooKeeperMain$MyWatcher@1321ed6
Welcome to ZooKeeper!
2013-04-22 22:07:05,704 [myid:] - INFO [main-SendThread(localhost:2181):ClientCnxn$SendThread@966] - Opening socket connection to server localhost/127.0.0.1:2181. Will not attempt to authenticate using SASL (unknown error)
JLine support is enabled
2013-04-22 22:07:05,727 [myid:] - INFO [main-SendThread(localhost:2181):ClientCnxn$SendThread@849] - Socket connection established to localhost/127.0.0.1:2181, initiating session
[zk: localhost:2181(CONNECTING) 0] 2013-04-22 22:07:05,846 [myid:] - INFO [main-SendThread(localhost:2181):ClientCnxn$SendThread@1207] - Session establishment complete on server localhost/127.0.0.1:2181, sessionid = 0x13e3211c06e0000, negotiated timeout = 30000
答案 1 :(得分:9)
我遇到了同样的问题,发现它是由于zookeeper群集节点需要打开的端口才能相互通信。
server.1=xx.xx.xx.xx:2888:3888
server.2=xx.xx.xx.xx:2888:3888
server.3=xx.xx.xx.xx:2888:3888
一旦我允许这些端口通过aws安全组并重新启动。一切都对我很好
答案 2 :(得分:4)
我刚刚解决了这个问题。我正在使用centos 7.而麻烦制造者是防火墙。使用“systemctl stop firewalld”将每个服务器中的所有内容关闭都可以简单地解决问题。或者你可以使用像
这样的命令firewall-cmd --zone=public --add-port=2181/udp --add-port=2181/tcp --permanent" to configure all three ports ,include 2181,2888,3888 in each server.And then "firewall-cmd --reload
最后使用
zkServer.sh restart
重新启动服务器并解决问题。
答案 3 :(得分:3)
就我而言,我像这样配置zoo.cfg:
server.1=host-1:2888:3888
server.2=host-2:2888:3888
server.3=host-3:2888:3888
但是,在host-1中,我将host-1解析为/ etc / hosts中的127.0.0.1:
127.0.0.1 localhost host-1
这可能导致其他主机无法与之通信。将host-1解析为真正的ip解决了这个问题。
希望这可以提供帮助。
答案 4 :(得分:2)
当我尝试使用A记录指向Zookeeper IP将经纪人与Zookeeper集成连接时遇到相同的错误。问题出在我的动物园管理员身上。我的动物园管理员无法绑定到端口2181,因为我将A记录指向公共IP。这阻止了动物园管理员选择领导者并相互交流。将A记录指向私有IP,使动物园管理员可以选择一个领导者,并且集群变为活动状态。此后,当我尝试将我的一个经纪人连接到该集成系统时,它成功连接了。
答案 5 :(得分:1)
确保所有必需的服务正在运行
步骤1:检查hbase-master是否正在运行
sudo /etc/init.d/hbase-master status
如果没有,则启动它sudo /etc/init.d/hbase-master start
第2步:检查hbase-regionserver是否正在运行
sudo /etc/init.d/hbase-regionserver status
如果没有,则启动它sudo /etc/init.d/hbase-regionserver start
步骤3:检查zookeeper服务器是否正在运行
sudo /etc/init.d/zookeeper-server status
如果没有,则启动它sudo /etc/init.d/zookeeper-server start
或者只是连续运行这3个命令。
sudo /etc/init.d/hbase-master restart
sudo /etc/init.d/hbase-regionserver restart
sudo /etc/init.d/zookeeper-server restart
之后不要忘记检查状态
sudo /etc/init.d/hbase-master status
sudo /etc/init.d/hbase-regionserver status
sudo /etc/init.d/zookeeper-server status
您可能会发现zookeeper仍未运行: 然后你可以运行zookeeper
sudo /usr/lib/zookeeper/bin/zkServer.sh stop
sudo /usr/lib/zookeeper/bin/zkServer.sh start
之后再次检查状态并确保其正在运行
sudo /etc/init.d/zookeeper-server status
这应该有用。
答案 6 :(得分:1)
我能够从拥有2个节点的zookeeper和kafka开始。 我得到了错误,因为我已经使用./zkServer.sh而不是kafka包装器启动了zookeeper bin / zookeeper-server-start.sh config / zookeeper.properties
答案 7 :(得分:1)
我在我的机器中启动独立实例,遇到同样的问题。最后,我从ip“127.0.0.1”更改为“localhost”,问题就消失了。
答案 8 :(得分:1)
我也有这个问题,我发现我只需要重新启动zookeeper,然后重新启动tomcat,这样我的webapp很好地连接了
答案 9 :(得分:1)
我和你有同样的情况,我刚刚解决了这个问题。
我的conf/zoo.cfg
就像这样:
server.1=10.194.236.32:2888:3888
server.2=10.194.236.33:2888:3888
server.3=10.208.177.15:2888:3888
server.4=10.210.154.23:2888:3888
server.5=10.210.154.22:2888:3888
然后我设置data/myid
文件内容如下:
1 //at host 10.194.236.32
2 //at host 10.194.236.33
3 //at host 10.208.177.15
4 //at host 10.210.154.23
5 //at host 10.210.154.22
最后重启zookeeper
答案 10 :(得分:1)
我也有这个问题,事实证明我告诉zookeeper连接到错误的端口。您是否验证过zookeeper实际上是在开发机器上的端口2181上运行?
答案 11 :(得分:1)
如果打开的连接太多,就会发生这种情况。
尝试增加maxClientCnxns
设置。
maxClientCnxns (没有Java系统属性)
限制由IP地址标识的单个客户端可能对ZooKeeper集合的单个成员进行的并发连接数(在套接字级别)。这用于防止某些类别的DoS攻击,包括文件描述符耗尽。将此值设置为0或省略它会完全消除并发连接的限制。
您可以在配置文件中编辑设置。最有可能的是/etc/zookeeper/conf/zoo.cfg
。
在现代ZooKeeper版本中,默认值为60.您可以通过将maxClientCnxns=4096
行添加到配置文件的末尾来增加它。
答案 12 :(得分:1)
还要检查本地防火墙, 服务防火墙状态
如果它正在运行,只需停止它 服务防火墙停止
然后尝试一下。
答案 13 :(得分:1)
上周我也遇到了这个问题,现在已经设法解决了这个问题。我有了从@gukoff共享的响应中解决这个问题的想法。
我的要求和情况与目前共享的情况略有不同,但问题基本相同,所以我想在这个帖子上分享它。
我实际上是在尝试查询zookeeper仲裁(每30秒一次)以获取我的应用程序中的一些信息,并为此目的使用Curator Framework(LeaderLatch类中提供的方法)。所以,基本上我是在启动CuratorFramework客户端并将其提供给LeaderLatch对象。
只有在遇到此线程中提到的错误后 - 才意识到我没有关闭在我的应用程序中建立的zookeeper客户端连接。 maxClientCnxns
属性的值为60,一旦连接数(所有连接都是陈旧的连接)触及60,我的应用程序就开始抱怨此错误。
我通过以下方式了解了开放连接的数量:
检查zookeeper日志,其中有警告消息“来自{主机IP地址}的连接太多”
从运行我的应用程序的上述日志中提到的同一主机运行以下netstat
命令:
netstat -no | grep:2181 | wc -l </ p>
注意:2181端口是zookeeper的默认设置,作为grep中的参数提供,以匹配zookeeper连接。
为了解决这个问题,我手动清除了所有这些陈旧的连接,然后在我的应用程序中优雅地添加了关闭zookeeper客户端连接的代码。
我希望这有帮助!
答案 14 :(得分:0)
在/ etc / hosts文件中仅保留一个用于主机IP的条目,即可解决。
答案 15 :(得分:0)
如果ZooKeeper磁盘空间不足,则尽管ZooKeeper服务器已启动并正在运行,并且套接字已打开并接受连接,也会发生这种情况。如果从不清除旧的ZK快照和日志文件,则很容易发生这种情况:
ZooKeeper服务器创建快照和日志文件,但从不删除它们。数据和日志文件的保留策略是在ZooKeeper服务器外部实现的。服务器本身仅需要最新的完整模糊快照,其后的所有日志文件以及其前的最后一个日志文件。后一个要求是必需的,以包括在启动此快照之后发生的更新,但该更新当时已存在于现有的日志文件中。这是可能的,因为在ZooKeeper中,快照的快照和日志的翻转在某种程度上是独立进行的。有关设置保留策略和维护ZooKeeper存储的更多详细信息,请参阅本文档的维护部分。
可以运行一项维护作业来清理旧的快照和日志文件:请参阅https://zookeeper.apache.org/doc/r3.4.12/zookeeperAdmin.html#sc_maintenance。
答案 16 :(得分:0)
启动复制的zk时,我也遇到相同的错误,其中一个zkClient无法连接到本地主机:2181,我检查了apache-zookeeper-3.5.5-bin / logs目录下的日志文件,并发现了以下内容:
2019-08-20 11:30:39,763 [myid:5]-警告 [QuorumPeermyid = 5(安全=已禁用):QuorumCnxManager @ 677] -无法在选举地址/ xxxx:3888 java.net.SocketTimeoutException上打开3频道:连接超时 java.net.PlainSocketImpl.socketConnect(本机方法)位于 java.net.AbstractPlainSocketImpl.doConnect(AbstractPlainSocketImpl.java:350) 在 java.net.AbstractPlainSocketImpl.connectToAddress(AbstractPlainSocketImpl.java:206) 在 java.net.AbstractPlainSocketImpl.connect(AbstractPlainSocketImpl.java:188) 在java.net.SocksSocketImpl.connect(SocksSocketImpl.java:392)在 java.net.Socket.connect(Socket.java:589)在 org.apache.zookeeper.server.quorum.QuorumCnxManager.connectOne(QuorumCnxManager.java:648) 在 org.apache.zookeeper.server.quorum.QuorumCnxManager.connectOne(QuorumCnxManager.java:705) 在 org.apache.zookeeper.server.quorum.QuorumCnxManager.connectAll(QuorumCnxManager.java:733) 在 org.apache.zookeeper.server.quorum.FastLeaderElection.lookForLeader(FastLeaderElection.java:910) 在 org.apache.zookeeper.server.quorum.QuorumPeer.run(QuorumPeer.java:1247) 2019-08-20 11:30:44,768 [myid:5]-警告 [QuorumPeermyid = 5(安全=已禁用):QuorumCnxManager @ 677] -无法在选举地址/ xxxxxx:3888 java.net.SocketTimeoutException上打开4频道:连接超时 java.net.PlainSocketImpl.socketConnect(本机方法)位于 java.net.AbstractPlainSocketImpl.doConnect(AbstractPlainSocketImpl.java:350) 在 java.net.AbstractPlainSocketImpl.connectToAddress(AbstractPlainSocketImpl.java:206) 在 java.net.AbstractPlainSocketImpl.connect(AbstractPlainSocketImpl.java:188) 在java.net.SocksSocketImpl.connect(SocksSocketImpl.java:392)在 java.net.Socket.connect(Socket.java:589)在 org.apache.zookeeper.server.quorum.QuorumCnxManager.connectOne(QuorumCnxManager.java:648) 在 org.apache.zookeeper.server.quorum.QuorumCnxManager.connectOne(QuorumCnxManager.java:705) 在 org.apache.zookeeper.server.quorum.QuorumCnxManager.connectAll(QuorumCnxManager.java:733) 在 org.apache.zookeeper.server.quorum.FastLeaderElection.lookForLeader(FastLeaderElection.java:910) 在 org.apache.zookeeper.server.quorum.QuorumPeer.run(QuorumPeer.java:1247) 2019-08-20 11:30:44,769 [myid:5]-信息 [QuorumPeermyid = 5(安全=已禁用):FastLeaderElection @ 919] -通知超时:51200
这意味着该zk服务器无法连接到其他服务器,并且我发现此服务器ping其他服务器失败,并且从副本中删除此服务器后,问题已解决。
希望这会有所帮助。
答案 17 :(得分:0)
我遇到了同样的问题,我使用的是 Windows 10。在我的 zookeeper 属性文件中添加以下提到的行后,我的问题得到了解决。
tickTime=2000
initLimit=5
syncLimit=2
答案 18 :(得分:0)
无法从服务器sessionid 0x0中读取其他数据,可能是服务器已关闭套接字,关闭套接字连接并尝试重新连接(org.apache.zookeeper.ClientCnxn)
我只更改了zoo.cfg文件中的代理数,然后重新启动了zookeeper和kafka服务
答案 19 :(得分:0)
在2节点群集上进行设置时遇到相同的错误。我发现我混淆了myid文件的内容与server.id = HOST_IP:端口条目。
基本上,如果你有两个服务器(SERVER1和SERVER2),你已经创建了#34; myid&#34; dataDir for zookeeper中的文件如下所示
SERVER1 (myid)
1
SERVER2 (myid)
2
确保zoo.cfg文件中的条目对应于每个,即server.1应使用SERVER1主机名,而server.2应使用SERVER2主机名,后跟端口,如下所示
SERVER1 (zoo.cfg)
... (other config omitted)
server.1=SERVER1:2888:3888
server.2=SERVER2:2888:3888
SERVER2 (zoo.cfg)
... (other config omitted)
server.1=SERVER1:2888:3888
server.2=SERVER2:2888:3888
为了确保,我还删除了dataDir中的version- *文件夹,然后重新启动了Zookeeper以使其正常工作。
答案 20 :(得分:0)
我也遇到了同样的问题。就我而言,问题在于iptables规则。
要与zookeeper节点通信,2181端口必须接受传入请求,对于zookeeper节点2888,3888之间的内部通信,必须为传入请求打开端口。
iptables -t nat -I PREROUTING -p tcp -s 10.0.0.0/24 --dport 2181 -j DNAT --to-destination serverIp:2181
iptables -t nat -I PREROUTING -p udp -s 10.0.0.0/24 --dport 2181 -j DNAT --to-destination serverIp:2181
iptables -t nat -I PREROUTING -p tcp -s 10.0.0.0/24 --dport 2888 -j DNAT --to-destination serverIp:2888
iptables -t nat -I PREROUTING -p udp -s 10.0.0.0/24 --dport 2888 -j DNAT --to-destination serverIp:2888
iptables -t nat -I PREROUTING -p tcp -s 10.0.0.0/24 --dport 3888 -j DNAT --to-destination serverIp:3888
iptables -t nat -I PREROUTING -p udp -s 10.0.0.0/24 --dport 3888 -j DNAT --to-destination serverIp:3888
sudo service iptables save
答案 21 :(得分:0)
检查zookeeper日志(/ var / log / zookeeper)。它看起来像是建立了连接,这应该意味着它有一个记录。
我遇到了同样的情况,这是因为进程打开了连接并且无法关闭它们。这最终超出了每个主机的连接限制,我的日志充满了
2016-08-03 15:21:13,201 [myid:] - WARN [NIOServerCxn.Factory:0.0.0.0/0.0.0.0:2181:NIOServerCnxnFactory@188] - Too many connections from /172.31.38.64 - max is 50
假设zookeeper在通常的端口上,你可以用以下方法检查:
lsof -i -P | grep 2181
答案 22 :(得分:-1)
如果Zookeeper服务器未运行或不再运行(即启动后它崩溃),这是一个常见问题。
首先,检查您是否正在运行Zookeeper服务器。一种简单的检查方法是运行进程:
# ps -ef | grep zookeeper
(运行这几次以查看是否仍然存在相同的进程ID。它可能会继续使用新进程ID重新启动。或者,如果您的Linux发行版支持systemd,则可以使用'systemctl status zookeeper') p>
您应该看到该进程作为java进程运行:
# ps -ef | grep zookeeper
root 492 0 0 00:01 pts/1 00:00:00 java -Dzookeeper.log.dir=. -Dzookeeper.root.logger=INFO,CONSOLE -cp /root/zookeeper-3.5.0-alpha/bin/../build/classes:/root/zookeeper-3.5.0-alpha/bin/../build/lib/*.jar:/root/zookeeper-3.5.0-alpha/bin/../lib/slf4j-log4j12-1.7.5.jar:/root/zookeeper-3.5.0-alpha/bin/../lib/slf4j-api-1.7.5.jar:/root/zookeeper-3.5.0-alpha/bin/../lib/servlet-api-2.5-20081211.jar:/root/zookeeper-3.5.0-alpha/bin/../lib/netty-3.7.0.Final.jar:/root/zookeeper-3.5.0-alpha/bin/../lib/log4j-1.2.16.jar:/root/zookeeper-3.5.0-alpha/bin/../lib/jline-2.11.jar:/root/zookeeper-3.5.0-alpha/bin/../lib/jetty-util-6.1.26.jar:/root/zookeeper-3.5.0-alpha/bin/../lib/jetty-6.1.26.jar:/root/zookeeper-3.5.0-alpha/bin/../lib/javacc.jar:/root/zookeeper-3.5.0-alpha/bin/../lib/jackson-mapper-asl-1.9.11.jar:/root/zookeeper-3.5.0-alpha/bin/../lib/jackson-core-asl-1.9.11.jar:/root/zookeeper-3.5.0-alpha/bin/../lib/commons-cli-1.2.jar:/root/zookeeper-3.5.0-alpha/bin/../zookeeper-3.5.0-alpha.jar:/root/zookeeper-3.5.0-alpha/bin/../src/java/lib/*.jar:/root/zookeeper-3.5.0-alpha/bin/../conf: -Xmx1000m -Xmx1000m -Dcom.sun.management.jmxremote -Dcom.sun.management.jmxremote.local.only=false org.apache.zookeeper.server.quorum.QuorumPeerMain /root/zookeeper-3.5.0-alpha/bin/../conf/zoo.cfg
如果不存在,那么zookeeper日志文件中可能会出现一些问题。
要查找zookeeper日志文件,首先应确定其配置的日志记录位置。在我的情况下,我在我的根目录下安装了zookeeper(不建议你在那里安装):
[root@centos6_zookeeper conf]# pwd
/root/zookeeper-3.5.0-alpha/conf
您可以在此文件中找到日志设置:
[root@centos6_zookeeper conf]# grep "zookeeper.log" log4j.properties
zookeeper.log.dir=/var/log
zookeeper.log.file=zookeeper.log
zookeeper.log.threshold=INFO
zookeeper.log.maxfilesize=256MB
zookeeper.log.maxbackupindex=20
因此,Zookeeper配置为在/ var / log。
下登录然后通常有一个zookeeper.log和/或zookeeper.out文件,它应该表明你的启动错误。
答案 23 :(得分:-1)
刚才我解决了同样的问题并发布了blog。
简而言之,如果xx的zoo.cfg喜欢:
server.1=xx:2888:3888
server.2=yy:2888:3888
server.3=zz:2888:3888
然后xx的myid = 1必须