【已解决-最全分析】zookeeper启动后,zkServer.sh status报错:Error contacting service. It is probably not running

本文详细记录了一次ZooKeeper集群无法启动的问题排查过程,包括配置错误、防火墙设置、端口监听、节点间通信等多个方面,最终通过逐个节点启动并修正配置解决了问题。

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

[root@master zookeeper-3.4.5]# bin/zkServer.sh status
JMX enabled by default
Using config: /usr/local/src/zookeeper-3.4.5/bin/../conf/zoo.cfg
Error contacting service. It is probably not running.

一直运行的好好,突然就这样了~~

尝试解决:

我之前conf/zoo.cfg是这样的:主从3个节点

server.1=master:2888:3888
server.2=slave1:2888:3888
server.3=slave2:2888:3888

1、按照网友的改成:主从节点都改,其中主机名:心跳端口、数据端口,改成有区别的,还是不行

server.1=master:2878:3878
server.2=slave1:2888:3888
server.3=slave2:2898:3898

查看zookeeper.out

WARN  [QuorumPeer[myid=1]/0:0:0:0:0:0:0:0:2181:QuorumCnxManager@368] - Cannot open channel to 2 at election address slave1/192.168.172.11:3888
java.net.ConnectException: Connection refused (Connection refused)
...
2019-07-29 03:35:22,807 [myid:1] - WARN  [QuorumPeer[myid=1]/0:0:0:0:0:0:0:0:2181:QuorumCnxManager@368] - Cannot open channel to 3 at election address slave2/192.168.172.12:3898
java.net.ConnectException: Connection refused (Connection refused)
...

依然报这个错。


2、按网友说的:zoo.cfgzoo_sample.cfg,不能两个文件同时存在。 删除后者。依然报错!

说明与此无关。


3、再次检查:节点的防火墙是否关闭
3个节点都是关闭状态

[root@slave2 conf]# firewall-cmd --state
not running

[root@slave2 conf]# getenforce 
Disabled

4、查看是否打开相应端口(2888,3888等节点对应端口)

查看监听(Listen)的端口

netstat -lntp | grep xxx

5、本机用节点 用 0.0.0.0 IP代替主机名,三个节点都是,改成下方这种方式:
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
依然不行!!说明跟这个也无关系。

[root@master bin]# sh zkServer.sh  status
JMX enabled by default
Using config: /usr/local/src/zookeeper-3.4.5/bin/../conf/zoo.cfg
Error contacting service. It is probably not running.

6、检查myid是否对应, 发现是对应的。


7、检查环境配置文件是否有JAVA、ZOOKEEPER配置,是否正确:/etc/profile

JAVA_HOME=/usr/local/src/jdk1.8.0_172
JAVA_BIN=/usr/local/src/jdk1.8.0_172/bin

ZOOKEEPER_HOME=/usr/local/src/zookeeper-3.4.5
PATH=$PATH:$ZOOKEEPER_HOME/bin

发现OK!

网友说要新增:/etc/environment

[root@master zookeeper-3.4.5]# vim /etc/environment
JAVA_HOME=/usr/local/src/jdk1.8.0_172
JAVA_BIN=/usr/local/src/jdk1.8.0_172/bin

ZOOKEEPER_HOME=/usr/local/src/zookeeper-3.4.5
PATH=$PATH:$ZOOKEEPER_HOME/bin 

发现并非如此,于是删除这个/etc/environment


8、检查/etc/hosts、各个节点相互ssh发现都是OK的。

网友说/etc/hosts不能如下这些,于是删除

127.0.0.1   localhost localhost.localdomain localhost4 localhost4.localdomain4  
::1         localhost localhost.localdomain localhost6 localhost6.localdomain6

还是不行。


9、清空各个节点下zk的datalog内容,最后依然报该错。

查看data 和log权限,也是OK的。


10、网友还说可能跟存储空间分布或不够有关:
查看空间使用情况:

df -h

查看内存大小

free -h

并非如此。


回到原点,分析:

Cannot open channel to 2 at election address slave1/192.168.172.11:3888译作:无法在选举地址slave1/192.168.172.11:3888中打开channel 2

java.net.ConnectException: Connection refused (Connection refused),译作:java连接异常:连接被拒绝。

Error contacting service,译作:联系不上service

并联想到zookeeper_server.pid

它是一个再zk启动时才创建的一个文件,里面是一个pid,也就是这个zk运行的pid,zk的server脚本就是通过配置文件的data路径配置来找这个pid文件,从而确定server脚本要处理哪一个zk进程,所以一旦配置文件的data目录配置有问题,那么zk服务脚本就找不到这个pid文件了,就会报下方的错
在这里插入图片描述
或这个错:

[root@master zookeeper-3.4.5]# bin/zkServer.sh status
JMX enabled by default
Using config: /usr/local/src/zookeeper-3.4.5/bin/../conf/zoo.cfg
Error contacting service. It is probably not running.

所以,解决方案来了:
(0)在确保如下没错的情况下:

  • etc/profile
  • etc/hosts
  • conf/zoo.cfg
  • 在zk目录下有data和log目录
  • myid

(1)每个节点单独启动zk,即在zoo.cfg中注释掉非本机的内容:以slave1节点为例,注释掉master和slave2节点

#server.1=master:2888:3888
server.2=slave1:2888:3888
#server.3=slave2:2888:3888

然后,每个节点单独启动zk:

zkServer.sh start

这个时候可看到每个节点log、data目录分别生成了新的version文件夹、zookeeper_server.pid,这是关键。

(2)将每个节点在(1)中的注释去掉。然后各个节点重新启动zk

zkServer.sh restart
[root@slave2 zookeeper-3.4.5]# zkServer.sh status
JMX enabled by default
Using config: /usr/local/src/zookeeper-3.4.5/bin/../conf/zoo.cfg
Mode: leader
[root@slave1 zookeeper-3.4.5]# zkServer.sh status
JMX enabled by default
Using config: /usr/local/src/zookeeper-3.4.5/bin/../conf/zoo.cfg
Mode: follower
[root@master zookeeper-3.4.5]# zkServer.sh status
JMX enabled by default
Using config: /usr/local/src/zookeeper-3.4.5/bin/../conf/zoo.cfg
Mode: follower
<think>嗯,用户遇到了ZooKeeper的问题,运行zkServer.sh status时显示错误“Error contacting service. It is probably not running.”。我需要帮他们分析可能的原因和解决办法。首先,应该考虑服务是否真的没运行。可能用户启动过但失败了,或者根本没启动。 第一步,检查ZooKeeper进程是否存在。使用ps和grep命令,或者jps查看是否有QuorumPeerMain进程。如果存在,可能是配置问题或者网络端口被占用。如果没有,说明服务没启动,需要启动它。 接下来,如果进程存在但状态检查失败,可能是配置错误。用户使用的配置文件是conf/zoo.cfg,需要检查里面的dataDir路径是否正确,是否有写入权限。还有clientPort是否被其他程序占用,比如用netstat查看端口是否在监听。 另外,日志文件也很重要,查看zookeeper.out或者logs目录下的日志,里面可能有更详细的错误信息,比如无法绑定端口,或者数据目录问题。 JMX默认启用可能也会有问题,但通常不影响服务状态检查。不过如果用户环境有特殊安全设置,可能需要检查是否有相关错误。 还有可能需要检查防火墙设置,特别是如果ZooKeeper运行在远程服务器上,2181端口是否开放。 如果用户是第一次安装,可能数据目录没有初始化,需要确认dataDir下是否有myid文件,以及是否正确配置了服务器ID。如果是集群模式,还要检查配置中的服务器列表是否正确。 最后,可能需要重新启动服务,并观察启动时的输出,看看有没有明显的错误信息。如果还是不行,可能需要重新安装或者检查系统环境,比如Java版本是否兼容。</think>遇到执行 `zkServer.sh status` 时提示 `Error contacting service. It is probably not running` 错误,可能是以下几个原因导致。请按照以下步骤排查: --- ### **1. 确认 ZooKeeper 服务是否运行** #### 检查进程是否存在: ```bash ps -ef | grep zookeeper | grep -v grep ``` - **如果无输出**:服务未启动,需要手动启动: ```bash zkServer.sh start ``` - **如果有输出**(显示 `QuorumPeerMain` 进程):进程存在但状态检测失败,继续排查其他原因。 --- ### **2. 检查配置文件 `zoo.cfg`** #### 确认关键配置项: - **`dataDir` 路径权限**: 确保配置文件中定义的 `dataDir`(如 `/tmp/zookeeper`)存在且**当前用户有读写权限**。 - **`clientPort` 端口冲突**: 默认端口 `2181` 可能被其他进程占用,检查端口监听: ```bash netstat -tuln | grep 2181 ``` - 如果端口被占用,修改 `zoo.cfg` 中的 `clientPort` 或终止占用进程。 --- ### **3. 检查日志文件** 日志文件路径通常为 `$ZOOKEEPER_HOME/logs/zookeeper.out` 或 `zookeeper-server.log`。重点关注以下错误: - **端口绑定失败**(如 `Address already in use`) - **数据目录权限问题**(如 `Permission denied`) - **集群配置错误**(如 `myid` 文件缺失或与 `server.x` 列表不匹配) --- ### **4. 检查集群模式配置(如适用)** 如果部署的是集群: - 确认 `zoo.cfg` 中 `server.x=host:port1:port2` 配置正确。 - 检查 `dataDir` 目录下的 `myid` 文件是否与 `server.x` 中的 `x` 一致。 --- ### **5. 手动尝试启动服务** ```bash zkServer.sh start-foreground ``` - 此命令会在前台启动 ZooKeeper,直接观察控制台输出的错误信息。 --- ### **6. 防火墙/SELinux 限制** - **关闭防火墙**(临时测试): ```bash systemctl stop firewalld # CentOS/RHEL ufw disable # Ubuntu/Debian ``` - **检查 SELinux**: ```bash setenforce 0 # 临时关闭 ``` --- ### **7. 重新初始化数据目录** 如果数据目录损坏,尝试: ```bash rm -rf /tmp/zookeeper/* # 替换为你的 dataDir 路径 zkServer.sh start ``` --- ### **常见解决方案总结** | 问题类型 | 解决方法 | |-------------------|------------------------------------------| | 服务未启动 | `zkServer.sh start` | | 端口冲突 | 修改 `clientPort` 或终止占用进程 | | 数据目录权限问题 | `chmod -R 755 /path/to/dataDir` | | 配置错误 | 检查 `zoo.cfg` 和 `myid` 文件 | | 防火墙拦截 | 开放端口或关闭防火墙 | --- 通过以上步骤,通常可以定位到具体原因。如果问题仍然存在,请提供日志文件中的具体错误信息以进一步分析
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值