ZooKeeper集群搭建常见问题:Connection refused

本文讲述了在搭建ZooKeeper集群时遇到的Connection refused问题,深入分析了可能的原因,包括防火墙、配置文件错误、权限问题等,并分享了个人解决问题的过程和解决方案,强调了解决此类问题时应全面检查和分析日志。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1.前言
每一次搭建集群环境都像一次战斗,作战中任何一个细节的出错都会导致严重的后果,所以搭建中所需要做的配置如系统配置、网络配置(防火墙记得关)、用户权限、文件权限还有配置文件等等内容,都必须非常仔细,将失误扼杀在摇篮之中,避免因为粗心或者想要提高速度省下的一分钟,在后面付出几个小时的调试时间,因小失大实在不值,切记核对、核对再核对。

今天就来说说在搭建ZooKeeper集群遇到的一个常见的问题Connection refused,也就是网上很多朋友也会出现的问题,问题的表现也许是一样,但是导致问题的原因却不尽相同,所以要重视自己的log文件报的错误,在确认外部大环境没有的情况下,集中力量解决log中的错误。
2. 我的问题
下面是我在搭建集群时报的错:
这是表面上错误
2016-12-08 05:11:07,890 [myid:1] - WARN  [QuorumPeer[myid=1]/0:0:0:0:0:0:0:0:2181:QuorumCnxManager@382] - Cannot open channel to 5 at election address lzx15/192.168.80.175: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)
        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)

 这是实际上的错误

java.io.FileNotFoundException: /home/hadoop/data/zookeeper/zkdata/version-2/acceptedEpoch.tmp(Permissoin denied)

3. 其他人的解决方案:

主要为以下两点:

1)防火墙没关导致通讯失败,无法连接到其他节点上,我在反复检查之后确认防火墙已全部关闭,所以这个方法对我的问题无效

命令行:chkconfig iptables off (关闭防火墙)

    service iptables status(查看防火墙状态)

2)配置文件问题

  a. /zookeeper/conf/zoo.cfg文件配置问题

  例如dataDir格式不对,或者没有创建dataDir指定的文件等等,所以细心地检查你的配置文件,至于这个文件的内容请大家自行百度。

  b. dataDir指定的目录下创建myid文件,然后再文件写上你在zoo.cfg中该节点的对应server号,例如server.1,那么myid中就写1

4. 我的解决方案
  找到zookeeperlog文件zookeeper.out在哪里?正常的路径是 你的zookeper安装目录/zookeeper.out我在这个zookeeper.out只能找到那个表面的错误即Connection refused,所以一直找不到问题,最后我在无意中发现

[hadoop@Test hadoop]$ cd /home/hadoop
[hadoop@Test ~]$ ls
app  data  tools  zookeeper.out

  我在这个zookeeper.out中找到我问题的真实错误,/home/hadoop/data/zookeeper/zkdata/version-2/acceptedEpoch.tmp(Permissoin denied),所以我去查看了verison-2文件夹的权限,发现他居然是root用户的,我立刻把它转到hadoop用户下,然后再重新启动集群,三个节点启动成功。

 

5. 总结

  很多时候我们都会去针对遇到的表面问题来寻找解决思路,但是很多问题只是因为其他地方出了问题导致的,所以在你认为找到解决目前这个问题的方法后却仍然没有能解决问题的时候,想想会不会在前面某个地方出错,去别的地方找找答案,记住,钥匙一般不在锁里面。

<think>好的,用户之前问了关于ClickHouse集群创建数据库卡住的问题,现在又转向了ZooKeeper和Kafka的端口问题。我需要弄清楚他们为什么突然切换话题。可能是在解决分布式系统的问题时,涉及到多个组件之间的连接,比如之前提到的ZooKeeper状态影响了ClickHouse的DDL操作,现在他们可能需要配置Kafka连接ZooKeeper集群,或者Kafka本身需要和ZooKeeper协同工作。 用户的问题是关于安装ZooKeeper集群需要哪些端口,以及Kafka连接时使用哪个端口。我需要先确认ZooKeeper的默认端口有哪些,每个端口的作用是什么。常见的端口有2181、2888、3888。其中2181是客户端连接的端口,而2888和3888用于集群内部通信和Leader选举。Kafka作为客户端连接ZooKeeper时,应该使用2181端口。 接下来要考虑用户可能的场景。他们可能在搭建一个包含Kafka和ZooKeeper的分布式系统环境,比如实时数据处理管道,或者日志收集系统。用户可能对ZooKeeper的配置不熟悉,特别是在设置集群时,需要开放哪些端口,以及在Kafka配置中正确指定ZooKeeper的连接信息。 需要确保回答清晰,区分ZooKeeper自身需要的端口和Kafka连接时使用的端口。同时提醒用户注意防火墙设置,确保这些端口在集群节点之间是开放的。可能还需要提到Kafka的配置文件中如何指定ZooKeeper的连接字符串,比如zookeeper.connect参数使用host:2181的形式。 另外,用户可能对ZooKeeper和Kafka的关系不太清楚,需要简单解释Kafka依赖ZooKeeper来管理元数据、Broker信息和消费者偏移量等。这有助于他们理解为什么Kafka需要连接ZooKeeper,以及正确配置的重要性。 还要考虑用户可能的错误配置,比如错误地使用2888或3888端口来连接Kafka,导致连接失败。这时候强调Kafka作为客户端应该使用2181端口,而其他端口是ZooKeeper内部使用的。同时提醒多节点配置时,每个ZooKeeper节点的客户端端口都需要被Kafka访问到,可能需要逗号分隔的列表。 最后,确保回答结构清晰,分点说明ZooKeeper的端口及其用途,然后说明Kafka连接时的配置方法,并给出示例和注意事项。这样用户能够一步步按照指导进行配置,避免常见的陷阱。</think>--- ### **ZooKeeper 集群的核心端口及 Kafka 连接方式** 在搭建 ZooKeeper 集群和配置 Kafka 连接时,需重点关注以下端口: --- #### **1. ZooKeeper 集群的必需端口** ZooKeeper 集群运行依赖 **3 个核心端口**,需在所有节点开放: | 端口 | 用途 | 是否需集群互通 | |--------|-------------------------------------|----------------| | **2181** | **客户端连接端口**(Kafka、ClickHouse 等外部服务通过此端口访问 ZooKeeper) | 否 | | **2888** | **集群内部通信端口**(Follower 与 Leader 数据同步) | 是 | | **3888** | **Leader 选举端口**(节点间选举 Leader 时使用) | 是 | - **关键配置**(`zoo.cfg` 文件中): ```properties # 客户端访问端口 clientPort=2181 # 集群节点通信配置(格式:server.{id}=节点IP:2888:3888) server.1=zk-node1:2888:3888 server.2=zk-node2:2888:3888 server.3=zk-node3:2888:3888 ``` --- #### **2. Kafka 连接 ZooKeeper 的端口** Kafka 作为客户端,通过 **ZooKeeper 的 2181 端口** 进行连接,用于: - 管理 Broker 元数据(Topic、Partition 信息) - 存储消费者组偏移量(Consumer Offset) - 协调控制器(Controller)选举 - **Kafka 配置文件示例**(`server.properties`): ```properties # 单节点 ZooKeeper 连接 zookeeper.connect=zk-node1:2181 # 多节点 ZooKeeper 集群连接(逗号分隔) zookeeper.connect=zk-node1:2181,zk-node2:2181,zk-node3:2181 ``` --- ### **完整配置流程** 1. **ZooKeeper 集群配置**: - 确保每个节点的 `zoo.cfg` 中定义集群成员(`server.1`, `server.2` 等)。 - 开放防火墙规则: ```bash # 客户端访问(Kafka 使用) sudo ufw allow 2181/tcp # 集群内部通信 sudo ufw allow 2888/tcp sudo ufw allow 3888/tcp ``` 2. **Kafka 配置**: - 在 `zookeeper.connect` 中指定所有 ZooKeeper 节点的 **2181 端口**。 - 启动 Kafka 前验证 ZooKeeper 连通性: ```bash # 测试 ZooKeeper 是否可访问 telnet zk-node1 2181 ``` --- ### **常见问题排查** 1. **Kafka 报错 `Connection refused`**: - 检查 ZooKeeper 是否已启动:`netstat -tuln | grep 2181` - 确认 Kafka 的 `zookeeper.connect` 配置为 **2181 端口**(而非 2888/3888)。 2. **ZooKeeper 集群选举失败**: - 检查 3888 端口是否开放,且节点间可互通。 - 查看 ZooKeeper 日志(默认路径 `/var/log/zookeeper/`)。 --- ### **总结** - **ZooKeeper 集群端口**:2181(客户端)、2888(数据同步)、3888(选举)。 - **Kafka 连接端口**:仅需通过 **2181 端口** 访问 ZooKeeper- **防火墙规则**:确保 ZooKeeper 集群节点间开放 2888 和 3888,客户端访问开放 2181。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值