问题症状

在华为云服务器上用Ambari 搭Hadoop集群。各个组件启动时候都报连接zookeeper 超时。但是Ambari 里显示zookeeper 状态是正常的。jps各节点也能看到QuorumPeerMain进程。查看zookeeper 日志发现服务间连接3888端口被拒绝。日志如下:

2021-03-10 18:07:56,631 - WARN  [QuorumPeer[myid=1]/0:0:0:0:0:0:0:0:2181:QuorumCnxManager@584] - Cannot open channel to 2 at election address worker2.hadoop.hdp/192.168.1.88:3888
java.net.ConnectException: Connection refused (Connection refused)
	at java.net.PlainSocketImpl.socketConnect(Native Method)
	at java.net.AbstractPlainSocketImpl.doConnect(AbstractPlainSocketImpl.java:350)
	at java.net.AbstractPlainSocketImpl.connectToAddress(AbstractPlainSocketImpl.java:206)
	at java.net.AbstractPlainSocketImpl.connect(AbstractPlainSocketImpl.java:188)
	at java.net.SocksSocketImpl.connect(SocksSocketImpl.java:392)
	at java.net.Socket.connect(Socket.java:589)
	at org.apache.zookeeper.server.quorum.QuorumCnxManager.connectOne(QuorumCnxManager.java:562)
	at org.apache.zookeeper.server.quorum.QuorumCnxManager.connectAll(QuorumCnxManager.java:605)
	at org.apache.zookeeper.server.quorum.FastLeaderElection.lookForLeader(FastLeaderElection.java:843)
	at org.apache.zookeeper.server.quorum.QuorumPeer.run(QuorumPeer.java:876)

问题定位

常见的情况检查了一遍,防火墙firewalls,selinux也都关闭了。各zookeeper的服务的3888端口也正常监听。
网上查了各种情况,一顿操作折腾半天依然不行。
后来一想会不会是zookeeper本身配置了什么,拒绝了外部连接。验证

yum install telnet
telnet 本机ip 3888 #正常连通
telnet 其他机器IP 3888 #连接拒绝。

换其他服务的端口。我整了个nginx,开了8000端口,试了试可以正常连接。到这里基本可以确定是zookeeper 配置的问题。

问题解决

查资料找到,如果是在云服务器上部署的,需要配置quorumListenOnAllIPs=true,用以监听所有网卡,这个和云服务器的一些虚拟技术有关,否则的话会抛异常。
因为用的Ambari 搭建的集群,在Ambari 后台给zoo.cfg增加配置quorumListenOnAllIPs=true。
在这里插入图片描述
重启zookeeper 集群,check 问题解决。

Logo

权威|前沿|技术|干货|国内首个API全生命周期开发者社区

更多推荐