zookeeper源码(02)源码编译启动及idea导入

本文介绍一下zookeeper-3.9.0源码下载、编译及本地启动。

下载源码

shell 复制代码
git clone https://gitee.com/apache/zookeeper.git

cd zookeeper
git checkout release-3.9.0
git checkout -b release-3.9.0

源码编译

README_packaging.md文件

该文件介绍了编译zookeeper需要的环境和命令。

编译环境

  • java-1.8.0_102
  • maven-3.3.9

maven编译

shell 复制代码
mvn clean install -DskipTests

zookeeper-assembly/target/apache-zookeeper-3.9.0-bin.tar.gz 包目录结构:

  • /bin - 可执行文件及脚本
  • /conf - 配置文件
  • /lib - zookeeper包及依赖的包
  • /docs - 文档

构建C客户端

To also build the C client, you need to activate the full-build profile:

复制代码
mvn clean -Pfull-build
mvn install -Pfull-build -DskipTests

需要在linux平台编译,windows平台会出错。

java命令启动zookeeper

发布包的启动方式在上一篇文章已经介绍,此处介绍一下使用java命令启动zookeeper服务。

zookeeper-server/target目录

进入zookeeper-server/target目录:

shell 复制代码
$ ll
drwxr-xr-x 1 xuguofeng 197121       0 Aug 16 00:14 lib/
-rw-r--r-- 1 xuguofeng 197121 1359096 Aug 16 00:14 zookeeper-3.9.0.jar
  • lib - 依赖jar
  • zookeeper-3.9.0.jar - 包含了zookeeper的类

创建zoo.cfg配置文件

在zookeeper-server/target下创建conf目录,创建zoo.cfg配置文件:

properties 复制代码
tickTime=2000
initLimit=10
syncLimit=5
dataDir=data
clientPort=2181

创建logs目录

启动zookeeper服务

shell 复制代码
java \
-Dzookeeper.datadir.autocreate=true \
-Dzookeeper.log.dir=./logs \
-Dzookeeper.log.file=zookeeper.log \
-XX:+HeapDumpOnOutOfMemoryError \
-Xmx1000m -Xms1000m \
-cp zookeeper-3.9.0.jar;./lib/*;./conf \
org.apache.zookeeper.server.quorum.QuorumPeerMain ./conf/zoo.cfg

如果是linux平台,则使用如下命令:

shell 复制代码
nohup java \
-Dzookeeper.datadir.autocreate=true \
-Dzookeeper.log.dir=./logs \
-Dzookeeper.log.file=zookeeper.log \
-XX:+HeapDumpOnOutOfMemoryError \
-XX:OnOutOfMemoryError='kill -9 %p' \
-Xmx1000m -Xms1000m \
-Djava.ext.dirs=${JAVA_HOME}/jre/lib/ext:./lib \
-cp ./conf:zookeeper-3.9.0.jar \
org.apache.zookeeper.server.quorum.QuorumPeerMain ./conf/zoo.cfg > ./logs/zookeeper.out 2>&1 < /dev/null &

启动zookeeper客户端

shell 复制代码
java \
-Dzookeeper.datadir.autocreate=true \
-Dzookeeper.log.dir=./logs \
-Dzookeeper.log.file=zookeeper.log \
-Dzookeeper.log.threshold=INFO \
-Xmx256m -Xms256m \
-cp zookeeper-3.9.0.jar;./lib/*;./conf \
org.apache.zookeeper.ZooKeeperMain

在idea中启动

参数配置

配置说明

在工作目录下创建tmp/conf目录:

  • 把conf/logback.xml拷贝到tmp/conf目录下

  • 在tmp/conf目录下创建zoo.cfg配置文件

    properties 复制代码
    tickTime=2000
    initLimit=10
    syncLimit=5
    dataDir=./tmp/data
    clientPort=2181

VM Option:

复制代码
-Dzookeeper.datadir.autocreate=true -Dzookeeper.log.dir=./tmp/logs -Dzookeeper.log.file=zookeeper.log -Xmx1000m -Xms1000m

Program Arguments:

复制代码
./tmp/conf/zoo.cfg

把./tmp/conf目录添加到classpath中。

类找不到问题

如果直接启动,可能出现类找不到的问题,在pom.xml中找到对应的依赖,将provided注释掉即可。

相关推荐
樱花落木兰4 小时前
分布式登录实战:Session 会话共享改造,Redis 存储用户登录状态
java·javascript·数据库·redis·分布式·缓存
ShineWinsu5 小时前
对于Redis:Steam、Geospatial、Hyperloglog、Bitmap、Bitfield类型的解析
数据库·c++·redis·分布式·缓存·面试·zset
Flynt20 小时前
Redis Cluster主节点挂了,为什么"高可用"还全员掉线?我把三次kill的记录翻出来了
数据库·redis·分布式
JosieBook1 天前
【数据库】MySQL 实战精通系列 · 第10篇:分库分表与分布式事务实战
数据库·分布式·mysql
梦帮科技1 天前
vLLM / TensorRT-LLM 极限推理:PagedAttention 细粒度物理页表管理与连续批处理(Continuous Batching)实战
数据结构·人工智能·分布式·python·深度学习·算法·vllm
Frank_refuel1 天前
分布式RPC框架实战(二):服务端模块划分与底层设计
分布式·网络协议·rpc
mftang2 天前
EtherCAT协议:从“飞读飞写”机制到分布式时钟同步的实时以太网架构深度解析
分布式·架构·ethercat·分布式时钟·从站控制器
ShineWinsu2 天前
对于Redis:Hash类型的解析
c++·redis·分布式·缓存·面试·hash·哈希表
东方芷兰2 天前
Agent 技术摘要 03 —— 基座模型、推理模型、Flash、联邦学习、分布式机器学习
人工智能·分布式·机器学习
程序猿乐锅2 天前
【黑马点评 | 第十一篇】关注 Feed 流实现
java·数据库·redis·分布式·后端·缓存·maven