使用 homebrew 安装 zookeeper 问题排查纪要

使用 homebrew 安装 zookeeper 问题排查纪要


前言

使用 homebrew 安装 zookeeper 遇到了一些问题。在网络上查找答案的过程中,发现给出的答案并不是最优解,所以有了这篇文章。


一、问题描述

1、使用如下命令安装 zookeeper

brew intsall zookeeper

2、默认 zookeeper安装目录

/usr/local/Cellar

3、配置文件所在位置

/usr/local/etc/kafka/server.properties
/usr/local/etc/kafka/zookeeper.properties

4、启动 zookeeper

# brew services 命令启动
brew services start zookeeper
brew services start kafka

或者

zkServer start
zkServer stop

5、发现问题
在使用命令 zkServer start命令 zookeeper时,启动失败。启动过程如下:

leoSmile@localhost bin % zkServer start
ZooKeeper JMX enabled by default
Using config: /usr/local/etc/zookeeper/zoo.cfg
Starting zookeeper ... FAILED TO START

命令zkServer status查看状态

leoSmile@localhost bin % zkServer status
ZooKeeper JMX enabled by default
Using config: /usr/local/etc/zookeeper/zoo.cfg
Client port found: 2181. Client address: localhost. Client SSL: false.
Error contacting service. It is probably not running.

很明显,zookeeper未能正常启动。

附:本次 hombrew自动安装的 zookeeper的版本为3.6.2

leoSmile@localhost bin % brew info zookeeper
zookeeper: stable 3.6.2 (bottled), HEAD
Centralized server for distributed coordination of services
https://zookeeper.apache.org/
/usr/local/Cellar/zookeeper/3.6.2_1 (991 files, 33.2MB) *
  Poured from bottle on 2021-01-15 at 18:02:18
From: https://mirrors.ustc.edu.cn/homebrew-core.git/Formula/zookeeper.rb
License: Apache-2.0

二、问题排查

1.网络查资料

经查资料,给出了如下可能性的失败场景:

  • 端口被占用:ps -ef | grep 2181
  • zoo.cfg配置错误
  • 防火墙
  • zookeeper版本问题

最后给出解决方案。。重新手动下载旧版本的 zookeeper。。。说是与本地 jdk版本不兼容。。。
我本地jdk版本为 1.8.0_251
官方文档也没有有关 3.6.2与 ``jdk```版本冲突的说明。所以,这并非问题的根源。。

2.排查问题

zookeeper的启动过程是有日志记录的,找到zookeeperlog4j.properties配置文件

log4j.rootCategory=WARN, zklog
log4j.appender.zklog = org.apache.log4j.RollingFileAppender
log4j.appender.zklog.File = /usr/local/var/log/zookeeper/zookeeper.log
log4j.appender.zklog.Append = true
log4j.appender.zklog.layout = org.apache.log4j.PatternLayout
log4j.appender.zklog.layout.ConversionPattern = %d{yyyy-MM-dd HH:mm:ss} %c{1} [%p] %m%n

找到日志文件,发现了如下报错信息:

2021-01-16 10:23:59 QuorumPeerMain [WARN] Either no config or no quorum defined in config, running in standalone mode
2021-01-16 10:23:59 ContextHandler [WARN] o.e.j.s.ServletContextHandler@8f4ea7c{/,null,UNAVAILABLE} contextPath ends with /*
2021-01-16 10:23:59 ContextHandler [WARN] Empty contextPath
2021-01-16 10:23:59 SecurityHandler [WARN] ServletContext@o.e.j.s.ServletContextHandler@8f4ea7c{/,null,STARTING} has uncovered http methods for path: /*
2021-01-16 10:23:59 ServerCnxnFactory [WARN] maxCnxns is not configured, using default value 0.
2021-01-16 10:23:59 ZooKeeperServerMain [ERROR] Unexpected exception, exiting abnormally
java.io.IOException: No snapshot found, but there are log entries. Something is broken!
   at org.apache.zookeeper.server.persistence.FileTxnSnapLog.restore(FileTxnSnapLog.java:281)
   at org.apache.zookeeper.server.ZKDatabase.loadDataBase(ZKDatabase.java:285)
   at org.apache.zookeeper.server.ZooKeeperServer.loadData(ZooKeeperServer.java:494)
   at org.apache.zookeeper.server.ZooKeeperServer.startdata(ZooKeeperServer.java:665)
   at org.apache.zookeeper.server.NIOServerCnxnFactory.startup(NIOServerCnxnFactory.java:758)
   at org.apache.zookeeper.server.ServerCnxnFactory.startup(ServerCnxnFactory.java:130)
   at org.apache.zookeeper.server.ZooKeeperServerMain.runFromConfig(ZooKeeperServerMain.java:159)
   at org.apache.zookeeper.server.ZooKeeperServerMain.initializeAndRun(ZooKeeperServerMain.java:112)
   at org.apache.zookeeper.server.ZooKeeperServerMain.main(ZooKeeperServerMain.java:67)
   at org.apache.zookeeper.server.quorum.QuorumPeerMain.initializeAndRun(QuorumPeerMain.java:140)
   at org.apache.zookeeper.server.quorum.QuorumPeerMain.main(QuorumPeerMain.java:90)
2021-01-16 10:23:59 ServiceUtils [ERROR] Exiting JVM with code 1

重点No snapshot found, but there are log entries. Something is broken!
翻译如下:没有找到对应的快照版本,但是之前的入口目录还存在着,一些东西坏掉了。。。
豁然开朗,由于先前安装过 zookeeper,所以留下了一些未清除的东西,导致现在的新版本无法启动。
那么,解决方案,就是 找到这个目录,删除之。
查看zoo.cfg文件

dataDir=/usr/local/var/run/zookeeper/data

发现了 zookeeperdata文件夹,然后cd到该目录,发现问题:
在这里插入图片描述
上述时间,正是上次安装 zookeeper的时间,然后rm -rf zookeeper

随后,zkServer start

leoSmile@localhost zookeeper % zkServer start
ZooKeeper JMX enabled by default
Using config: /usr/local/etc/zookeeper/zoo.cfg
Starting zookeeper ... STARTED

已然正常启动。
jps查看进程信息

leoSmile@localhost zookeeper % jps
43731 QuorumPeerMain
43769 Jps

QuorumPeerMain就是zookeeper对应的进程。
至此,问题解决。


版权声明:本文为sinat_18673735原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。