Zookeeper学习之初识ZK

此篇文章我们会简单讲解一下zookeeper的下载,启动,配置文件解析,集群配置方式以及角色的分工

一、下载并启动

下载地址: https://zookeeper.apache.org/releases.html   建议下载历史版本,就算查找问题也容易点

下载解压后

解压好了之后我们首选先把conf目录下的zoo_sample.cfg备份一份,然后修改名字为zoo.cfg(此时为单机模式)

此时的zoo.cfg才是我们真正需要的配置文件

然后让我们打开这个文件,修改一个配置:dataDir

这个dataDir是我们存储快照文件snapshot的目录。默认情况下,事务日志也会存储在这里。

同时建议建议同时添加配置参数dataLogDir(此配置默认无), 事务日志的写性能直接影响zk性能。

由于我是windows机 所以将它配置为:dataDir=D:/Install/study/zookeeper/data

同时我的zookeeper放在了 D:/Install/study/zookeeper/

配置好了,然后让我们来启动

进入bin目录,同时在当前目录打开cmd。输入zkServer.cmd(windows双击 zkServer.cmd ; linux下使用  zkServer.sh start )

启动成功如下

检测是否连接成功:windows下双击 zkCli.cmd   linux下使用  zkCli.sh start

二、Zoo.cfg配置信息

化简后的配置文件

tickTime=2000                        // 心跳时间,同时session最小超时时间是该时间的二倍
initLimit=10                             // follower启动后会同步leader同步最新数据,然后确定自身对外服务状态。leader允许                                                            follower在initLimit时间内完成此次工作。如果zk集群过大,可能会考虑增加字段大小
syncLimit=5                            // 发出心跳后的最大响应时间
dataDir=/tmp/zookeeper         // 存储快照文件snapshot的目录。默认情况下,事务日志也会存储在这里。
clientPort=2181                      // 客户端连接server的端口,即对外服务端口。

加下来的不是默认添加的

dataLogDir                               //   事务日志输出目录。未配置则使用 dataDir

maxClientCnxns                      //单个客户端与单台服务器之间的连接数的限制,是ip级别的,默认是60,如果设置为0,那                                                     么表明不作任何限制。

三、ZK集群搭建

由于是单机情况下 我们需要使用不同的端口来模拟集群

首选复制三个zookeeper,同时每个配置文件内容不一致

三个文件除端口号以及dataDir路径了不同以外,全部一致

然后分别创建好配置文件中的dataDir

并且在三个文件夹中 各自创建一个文件 命名为  myid   注意  没有后缀!!! 同时此字段大小非常重要,会在leader选举中占据很大作用!!!

在文件中分别写入 1 2 3    请注意  此文件中的内容,应该与上面配置文件中server.后面的名称一致!!!!

然后我们就可以启动zk了

我们首先启动第一个zk,我们会发现,zk在疯狂的报错,我们也可以通过启动 zkCli.cmd 来判断是否启动成功。

然后不要慌,我们在启动下一个zk,然后我们就会发现  两个ZK都已经成功启动,如下图,是我们的客户端启动后成功连接

以此启动三个zk,代表我们集群已经搭建成功。

至于我们为什么刚才只启动一台,启动失败,原因是zk的过半原则,由于只启动一台,少于我们配置三台的一半,所有无法启动成功。

注:

1、我们可以通过执行 zkServer.sh status   来判断当前zk的状态,是leader还是follower(linux下)

2、集群配置文件中的  server.1=localhost:2887:3887   其中第一端口代表leader和leaner中间数据同步使用的端口,第二个端口,代表选举中的投票阶段使用的端口。

四、角色

ZK里面有四种角色:

leader(领导者):投票的发起者和决议者,以及最终更新节点状态。

follower(跟随者):接受客户请求,读请求自身处理,写请求转发给leader,leader发起投票,follower参与投票,返回ask。

observer(观察者):接受客户请求,读请求自身处理,写请求转发leader,leader发起投票,但是observer不参与投票!!!

leaner(学习者):与leader保持状态同步的统称为学习者,以上follwer和leaner均为学习者。

总体的说一下这个流程:

每当一个zk启动的时候,整个集群将进入恢复模式(Zab协议),投票选举出一个leader。

每当有请求请求到集群后,读请求自身处理,写请求如果是follower,会将请求转发给leader,leader则发起投票,接收每个返回的ack,如果超过一半的同意此次投票,然后将执行写操作,并将数据同步给所有的leaner。

observer不参与投票,他的作用是减少投票压力,同时由于不参与投票,所以observer不会受到过半原则的影响导致zk集群无法启动。同时obsever是在配置文件里提前写好的,需要在你想要设置为observer的地址后面拼接   :observer  请注意使用冒号拼接的

zk中有两个主要任务,一个是客户端请求处理,二是投票。当我们的集群过大的时候,由于投票需要时间变长,所以我们的写操作的效率也会变得下降,所以zk引入了observer,他不参与投票,增加投票效率,所以能增加写操作的效率。

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值