下载源码
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。