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。

  • 26
    点赞
  • 18
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
启动ZooKeeper集群,可以按照以下步骤进行: 1. 首先,确保所有ZooKeeper节点上都安装了ZooKeeper软件包,并且配置文件(zoo.cfg)都已经创建好。 2. 修改每个节点上的配置文件(zoo.cfg),指定集群中所有节点的IP地址和端口号。例如,对于一个3个节点的集群,可以在每个节点上的配置文件中添加以下内容: ``` server.1=192.168.0.101:2888:3888 server.2=192.168.0.102:2888:3888 server.3=192.168.0.103:2888:3888 ``` 其中,server.x中的x表示节点的ID,每个节点的ID必须唯一,且从1开始连续递增。后面的两个数字分别表示ZooKeeper节点之间通信的端口(2888)和选举端口(3888)。 3. 在每个节点上创建一个data目录,并在其中创建一个myid文件,用于标识当前节点的ID。例如,在节点1上执行以下命令: ``` mkdir /var/lib/zookeeper/data echo 1 > /var/lib/zookeeper/data/myid ``` 在节点2和节点3上也分别执行类似的命令,将myid文件中的ID分别设置为2和3。 4. 启动ZooKeeper集群。在每个节点上执行以下命令: ``` zkServer.sh start ``` 如果启动成功,可以在日志文件中看到类似以下的输出: ``` ZooKeeper JMX enabled by default Using config: /usr/local/zookeeper/bin/../conf/zoo.cfg Starting zookeeper ... STARTED ``` 5. 验证集群是否正常工作。可以在任意一个节点上执行以下命令: ``` zkCli.sh ``` 如果成功连接到ZooKeeper集群,则会看到以下输出: ``` Connecting to localhost:2181 Welcome to ZooKeeper! JLine support is enabled ... ``` 可以执行一些ZooKeeper命令,例如ls、create、set等,来测试集群的正常工作。 6. 停止ZooKeeper集群。在每个节点上执行以下命令: ``` zkServer.sh stop ``` 如果停止成功,可以在日志文件中看到类似以下的输出: ``` ZooKeeper JMX enabled by default Using config: /usr/local/zookeeper/bin/../conf/zoo.cfg Stopping zookeeper ... STOPPED ```

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值