zookeeper非正常结束后启动失败问题排查

问题产生背景

    本地电脑中运行了三个zookeeper实例搭建的集群,在其正常运行的时候,电脑重启了,然后想要启动zookeeeper集群,但是提示:

ZooKeeper JMX enabled by default
Using config: apache-zookeeper-3.6.1/conf/zoo1.cfg
Starting zookeeper ... FAILED TO START

问题排查

    查看运行日志,默认日志目录在zookeeper根目录有个logs,发现其中有一个后缀为 .out 的文件,zookeeper-localhost-server-root.out,cat查看该文件内容,发现日志中记录了如下异常信息:

2020-05-24 15:31:09,954 [myid:] - ERROR [main:QuorumPeerMain@98] - Invalid config, exiting abnormally
org.apache.zookeeper.server.quorum.QuorumPeerConfig$ConfigException: Error processing apache-zookeeper-3.6.1/conf/zoo1.cfg
    at org.apache.zookeeper.server.quorum.QuorumPeerConfig.parse(QuorumPeerConfig.java:197)
    at org.apache.zookeeper.server.quorum.QuorumPeerMain.initializeAndRun(QuorumPeerMain.java:124)
    at org.apache.zookeeper.server.quorum.QuorumPeerMain.main(QuorumPeerMain.java:90)
Caused by: java.lang.IllegalArgumentException: myid file is missing
    at org.apache.zookeeper.server.quorum.QuorumPeerConfig.checkValidity(QuorumPeerConfig.java:810)
    at org.apache.zookeeper.server.quorum.QuorumPeerConfig.setupQuorumPeerConfig(QuorumPeerConfig.java:681)
    at org.apache.zookeeper.server.quorum.QuorumPeerConfig.parseProperties(QuorumPeerConfig.java:506)
    at org.apache.zookeeper.server.quorum.QuorumPeerConfig.parse(QuorumPeerConfig.java:193)
    ... 2 more
Invalid config, exiting abnormally
从异常信息来看是 myid 这个文件丢失了,然后查看对应的zookeeper的conf目录中对应配置文件中 dataDir配置的目录下果然没有myid这个文件了,搭建集群运行的时候是配置了的,既然没有,那就再在对应的dataDir目录中添加myid文件,我的目录是/tmp/zookeeper/zoo1,所以执行命令  echo 1 > /tmp/zookeeper/zoo1/myid 添加myid文件并且文件内容为1,这个id可以随意但是不能重复,因为zk集群中的节点需要获取myid文件内容来标识该节点.如果有多个cfg文件,那使用的目录也是要做同样操作的.

然后执行启动命令 bin/zkServer.sh start conf/zoo1.cfg,成功启动,日志如下:

ZooKeeper JMX enabled by default
Using config: conf/zoo1.cfg
Starting zookeeper ... STARTED

总结        

      现在看来文件丢失的原因就是因为我把这个目录建在了linux的/tmp 目录了,这个目录中的文件再系统关闭的时候会清除文件,因此,建议不要把zookeeper/conf目录中的配置文件中dataDir参数值(路径)设置到系统的/tmp 中.

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章