背景
在部署Hadoop的HDFS集群时,需要部署zookeeper集群。在本地虚拟机上启动zookeeper出现以下两个问题。
问题
问题1
Error: Could not find or load main class org.apache.zookeeper.server.quorum.QuorumPeerMain
原因1
通过github下载的包zookeeper-release-3.4.6.tar.gz,需要去编译才能安装使用。
后从官网下载包apache-zookeeper-3.7.1-bin.tar.gz,直接解压即可使用。
问题2
在本地虚拟机上启动zookeeper
2022-12-27 09:50:16,837 [myid:1] - WARN [QuorumConnectionThread-[myid=1]-2:QuorumCnxManager@401] - Cannot open channel to 3 at election address node04/192.168.56.13:3888
java.net.ConnectException: Connection refused (Connection refused)
at java.net.PlainSocketImpl.socketConnect(Native Method)
at java.net.AbstractPlainSocketImpl.doConnect(AbstractPlainSocketImpl.java:476)
at java.net.AbstractPlainSocketImpl.connectToAddress(AbstractPlainSocketImpl.java:218)
at java.net.AbstractPlainSocketImpl.connect(AbstractPlainSocketImpl.java:200)
at java.net.SocksSocketImpl.connect(SocksSocketImpl.java:394)
at java.net.Socket.connect(Socket.java:606)
at org.apache.zookeeper.server.quorum.QuorumCnxManager.initiateConnection(QuorumCnxManager.java:384)
at org.apache.zookeeper.server.quorum.QuorumCnxManager$QuorumConnectionReqThread.run(QuorumCnxManager.java:458)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
at java.lang.Thread.run(Thread.java:750)
排查2
- 检查防火墙firewalld和selinux是否都已经关闭。
- telnet检查端口3888能否正常访问
yum install telnet
telnet 本机ip 3888 #正常连通
telnet 其他机器IP 3888 #连接拒绝。
解决2
需要在zoo.cfg中配置quorumListenOnAllIPs=true,重新启动,结果正常。
原因2
quorumListenOnAllIPs:
当设置为true时,ZooKeeper服务器将会在所有可用的IP地址上监听来自其对等点的连接请求,而不仅是配置文件的服务器列表中配置的地址。它会影响处理ZAB协议和Fast Leader Election协议的连接。默认值是false。这个和虚拟技术有关,用的是虚拟网卡,所以需要设置quorumListenOnAllIPs=true来监听说有的网卡。