[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
Logo

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

更多推荐