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。

相关推荐
tb_first10 分钟前
k8sday11服务发现(2/2)
docker·云原生·容器·kubernetes·k8s
杨DaB37 分钟前
【SpringBoot】Dubbo、Zookeeper
spring boot·后端·zookeeper·dubbo·java-zookeeper
zxcxylong2 小时前
almalinux9.6系统:k8s可选组件安装(1)
云原生·容器·kubernetes·metrics·almalinux·hpa·vpa
君不见,青丝成雪3 小时前
大数据云原生是什么
大数据·云原生
jakeswang5 小时前
应用缓存不止是Redis!——亿级流量系统架构设计系列
redis·分布式·后端·缓存
不久之7 小时前
大数据服务完全分布式部署- 其他组件(阿里云版)
分布式·阿里云·云计算
熊出没8 小时前
微服务如何集成swagger3
微服务·云原生·架构
Direction_Wind8 小时前
粗粮厂的基于spark的通用olap之间的同步工具项目
大数据·分布式·spark
MANONGMN15 小时前
Kubernetes(K8s)常用命令全解析:从基础到进阶
云原生·容器·kubernetes
wdxylb18 小时前
云原生俱乐部-RH134知识点总结(1)
linux·云原生