zookeeper1==zookeeper源码阅读,源码启动ZK集群

下载源码

Tags · apache/zookeeper · GitHub

https://codeload.github.com/apache/zookeeper/zip/refs/tags/release-3.9.1

JDK8

MAVEN3.8.6

mvn -DskipTests=true package

配置ZK1

zkServer.cmd中指出了启动类是 QuorumPeerMain

QuorumPeer翻译成集群成员比较合理,Quorum集群Peer成员

在代码目录下新建data文件夹和log文件夹

并在data目录下创建myid文件,内容为1

在conf目录下新建zoo.cfg,内容为

复制代码
# zoo1.cfg
# 同步配置
tickTime=2000
initLimit=10
syncLimit=5
# 目录配置,注意需要 2个
dataDir=E:\\zk3.9.1\\data
dataLogDir=E:\\zk3.9.1\\log
# 端口配置
clientPort=2181
server.1=localhost:2888:3888
server.2=localhost:2889:3889
server.3=localhost:2890:3890

配置启动ZK2和ZK3

直接上官方网站下载最近的版本的ZIP文件,作为集群的另两个节点启动,当然也可以拷贝刚才的源码额外从源码启动来作为两个节点。我这就直接下载官方打好的包了。

下载地址:Apache ZooKeeper

刚好有和源码对应的3.9.1,下载后指定配置文件和创建data目录和log目录,data目录下创建myid文件,里面的内容分别为2和3。

配置文件分别为

复制代码
# zoo1.cfg
# 同步配置
tickTime=2000
initLimit=10
syncLimit=5
# 目录配置,注意需要 2个
dataDir=E:\\zk-jiqun\\zk2\\data
dataLogDir=E:\\zk-jiqun\\zk2\\log
# 端口配置
clientPort=2182
server.1=localhost:2888:3888
server.2=localhost:2889:3889
server.3=localhost:2890:3890

# zoo1.cfg
# 同步配置
tickTime=2000
initLimit=10
syncLimit=5
# 目录配置,注意需要 2个
dataDir=E:\\zk-jiqun\\zk3\\data
dataLogDir=E:\\zk-jiqun\\zk3\\log
# 端口配置
clientPort=2183
server.1=localhost:2888:3888
server.2=localhost:2889:3889
server.3=localhost:2890:3890

启动zk2和zk3

从源码启动zk1加入集群

修改org.apache.zookeeper.server.quorum.QuorumPeerMain#initializeAndRun方法

指定配置文件的路径(为什么要在这里改?研究下zkServer.cmd干了什么就知道了)

复制代码
//指定配置文件
        args=new String[1];
        args[0]="E:\\zk3.9.1\\conf\\zoo.cfg";

启动报错

说有个类找不到,java.lang.NoClassDefFoundError: com/codahale/metrics/Reservoir

找到该类所在包的引入位置把scope直接注释掉。我这为了方便直接所有scope都给注释掉了

再次启动,成功,zk1成了follwer

测试

启动个客户端,直接点击zkCli.cmd即可,默认连接上本机2181的ZK1。敲两个命令测试下

再连接上另一个节点,

zkCli.cmd -server localhost:2182

查看下刚才创建的ZNODE发现这台机上也能查到,说明集群是成功的。

查看谁是leader,看日志也能看出来。或者BASH环境执行zkServer.sh status

三个节点均使用源码启动

下一篇研究下zk1启动后发生了什么。大致上就是连接上配置文件中指定的集群内的其他SERVER,然后创建连接,然后根据ZAB协议找到LEADER。

相关推荐
ByteBlossom13 分钟前
深入解析ZooKeeper核心机制与应用(下)
分布式·zookeeper
虚伪的空想家36 分钟前
K8S的dashboard部署与访问
云原生·容器·kubernetes·k8s·web·dashboard
蒋星熠40 分钟前
中间件架构设计与实践:构建高性能分布式系统的核心基石
开发语言·数据库·分布式·python·中间件·性能优化·硬件工程
BBluster1 小时前
Kubernetes(K8S)入门以及命令指南
云原生·容器·kubernetes
在未来等你5 小时前
Elasticsearch面试精讲 Day 13:索引生命周期管理ILM
大数据·分布式·elasticsearch·搜索引擎·面试
roman_日积跬步-终至千里10 小时前
【系统架构设计(24)】大型网站系统架构演化:从单体到分布式的技术进阶之路
分布式·系统架构
Luminbox紫创测控11 小时前
稳态太阳光模拟器 | 多源分布式设计的要点有哪些?
分布式
_Walli_12 小时前
k8s集群搭建(三)-------- Dashboard UI
云原生·容器·kubernetes
运维成长记13 小时前
云原生监控系统 Prometheus大总结 20250909
云原生·prometheus
橙*^O^*安17 小时前
Kubernetes集群部署Jenkins指南
云原生·容器·kubernetes·jenkins·devops