在启动zookeeper集群的单个zookeeper节点时总是报如下错误

[root@7-2 opt]#  /opt/zookeeper/bin/zkServer.sh start
ZooKeeper JMX enabled by default
Using config: /opt/zookeeper/bin/../conf/zoo.cfg
Error contacting service. It is probably not running.  

排查思路:

1、是否安装了JDK,因为zookeeper的运行需要JVM环境,可以使用java和java -version命令来验证,如下所示,可以看到JDK已经正确安装。

[root@7-2 ~ ]# java -version
openjdk version "1.8.0_282"
OpenJDK Runtime Environment (build 1.8.0_282-b08)
OpenJDK 64-Bit Server VM (build 25.282-b08, mixed mode)

2、  查看zookeeper的端口2181是否已经被占用了(如果改用其它端口了,根据大家的实际来操作),如果2181端口被占用了便杀掉这个进程。

[root@7-2 ~ ]# netstat -apn | grep 2181  
tcp        0      0 :::2181        :::*              LISTEN      1403/java   

[root@7-2 ~ ]# kill -9 1403  
[root@7-2 ~ ]#netstat -apn | grep 2181          

3、 如果上面的操作还解决不了问题,到zookeeper的data目录下,可以看到如下所示的文件,其中version-2文件夹和zookeeper_server.pid两个文件都是需要删除掉的。

[root@7-2 ~ ]# cd /data/zookeeper/    路径是zookeeper/conf/zoo.cfg中dataDir
[root@7-2 zookeeper]# ll
-rw-r--r-- 1 root root    2 3月   3 20:28 myid
drwxr-xr-x 2 root root   73 3月   4 17:35 version-2
-rw-r--r-- 1 root root 1424 3月   4 17:22 zookeeper.out
-rw-r--r-- 1 root root    4 3月   4 17:35 zookeeper_server.pid

[root@7-2 zookeeper]# rm -rf version-2/ zookeeper_server.pid

4、特殊情况,上述删除文件后,重启zookpeer发现没有生成version-2、zookeeper_server.pid,而且查看日志 /data/zookeeper/zookeeper.out无任何记录

解释zookeeper_server.pid是什么,这个是一个再zk启动时才创建的一个文件,里面是一个pid,也就是这个zk运行的pid,zk的server脚本就是通过配置文件的data路径配置来找这个pid文件,从而确定server脚本要处理哪一个zk进程,所以一旦配置文件的data目录配置有问题,那么zk服务脚本就找不到这个pid文件了。

[root@7-2 zookeeper]# cat /opt/zookeeper/conf/zoo.cfg 
tickTime=2000
initLimit=10
syncLimit=5
dataDir=/tmp/zookeeper
clientPort=2181
server.1=10.4.7.2:2888:3888
server.2=10.4.7.3:2888:3888
server.3=10.4.7.4:2888:3888

看dataDir=/tmp/zookeeper,这也是我个人没启动的原因,之前一直是dataDir=/date/zookeeper,不止为何突然变成他tmp,由于我dataDir=/tmp/zookeeper下没有myid,导致无法启动,所以修改后可以正常

[root@7-2 zookeeper]# cat /opt/zookeeper/conf/zoo.cfg 
tickTime=2000
initLimit=10
syncLimit=5
dataDir=/date/zookeeper
clientPort=2181
server.1=10.4.7.2:2888:3888
server.2=10.4.7.3:2888:3888
server.3=10.4.7.4:2888:3888

5、而且查看日志 /data/zookeeper/zookeeper.out        【zookeeper】data/zookeeper_server.pid: No such file or directory FAILED TO WRITE PID 报错

问题主要原因还是data目录配置有问题,zk的配置文件路径解析确实不够智能,路径必须是全路径而且是从根目录开始的,如果使用相对路径报错

[root@7-2 zookeeper]# cat /opt/zookeeper/conf/zoo.cfg 
tickTime=2000
initLimit=10
syncLimit=5
dataDir= ~/date/zookeeper
clientPort=2181
server.1=10.4.7.2:2888:3888
server.2=10.4.7.3:2888:3888
server.3=10.4.7.4:2888:3888

6、还有一种情况就是,启动zookeeper集群的某个节点时死活启动不了,我们可以先启动zookeeper的另外几个节点,等把其它节点启动好了,这个启动不了节点就自动启动好了!!!

 

 

Logo

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

更多推荐