使用 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
的启动过程是有日志记录的,找到zookeeper
的log4j.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
发现了 zookeeper
的 data
文件夹,然后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
对应的进程。
至此,问题解决。