zookeeper-3.5.x源码启动

1.起因

之前用的zk是3.4.11,由于3.5.x支持了动态配置节点的功能,所以就顺便升级。

2.问题

下载这个地方我就略过了,克隆 https://github.com/apache/zookeeper.git 然后 checkout 到最新3.5.5 分支即可。
然后我更改了下 zookeeper 的 data/log 文件路径,按照之前的经验,通过 bin/zkServer.sh start 启动服务报错,查看日志后错误如下:

启动信息如下:
ZooKeeper JMX enabled by default
Using config: 安装路径/zookeeper-3.5.5/server/bin/../conf/zoo.cfg
FAILED TO START

日志信息如下:
错误: 找不到或无法加载主类 org.apache.zookeeper.server.quorum.QuorumPeerMain
原因: java.lang.ClassNotFoundException: org.apache.zookeeper.server.quorum.QuorumPeerMain

这就有意思了,不过看样子可以推测出是没有找到对应的class。然后我看了下 zkServer.sh 里面的 CLASSPATH 变量,大致如下(只保留了重要信息):

安装路径/zookeeper-3.5.5/bin/../zookeeper-server/target/classes:
安装路径/zookeeper-3.5.5/bin/../build/classes ....etc

很显然就是没找到对应class,那么编译一下就行了。
之前的 3.4.x 因为直接把 zookeeper-3.4.x.jar 放在根目录了,所以可以直接启动。

3.解决

project-module.jpeg

从 3.5.x 可以看出来现在的 zookeeper 做了点工程优化,拆分成了几个子工程,不像之前的版本都放在src下了。
需要启动 zookeeper server ,那么只需要把zookeeper-server 这个工程编译出来即可。

cd zookeer-server
# 略过test和doc
mvn clean package --settings xxx\settings.xml -DskipTests=true -Dmaven.javadoc.skip=true

然后就可以看到zookeeper-server/target目录,接着在通过 zkServer.sh start/status 就可以正常启动服务了。

xxx-3:zookeeper-server xxx$ zkServer.sh status
/usr/bin/java
ZooKeeper JMX enabled by default
Using config: xxx/zookeeper-3.5.5/server/bin/../conf/zoo.cfg
Client port found: 2181. Client address: localhost.
Mode: standalone

你可能感兴趣的:(zookeeper-3.5.x源码启动)