Zookeeper官方文件学习笔记02-Zookeeper入门指南

我原以为学一门会很难,但似乎没那么难。虽然我不太理解一些术语,但我决定在后续研究中遇到它们?

前提条件

还没有

请参阅管理指南中的系统要求。

下载

下载链接[1] Apache ZooKeeper 3.7.0 是编译好的版本,带有各种jar包。另一个Release版本还要安装jar,因此我们这里用Apache ZooKeeper 3.7.0。

独立运行

参考链接[2]

1 选择一个合适的目录,然后用winzip解压即可

2 创建zoo.cfg

(1)tickTime:服务器之间或客户端与服务器之间维持心跳的时间间隔。单位毫秒,最小会话超时是tickTime的两倍 (2)dataDir:保存数据,如果没有指明写数据的日志的存放地址,也会放在这里 (3)dataLogDir:因此设置这个,存放日志 (4)clientPort:客户端连接 Zookeeper 服务器的端口

3 创建空的数据和日志存放地址并修改zoo.cfg

4 尝试启动(服务器)(单机版)

双击zkServer.cmd

如果闪退,可以右键编辑zkServer.cmd,在末尾输入pause,保存推书,再次运行,查看报错原因。参考链接[3]

5 看一下是否启动成功

cmd输入

管理ZooKeeper存储

先空着~

连接到ZooKeeper(客户端)(单机版)

双击zkCli.cmd 看起来是失败了,找一下原因

经过我种种查找,最后发现是我在点开zkCli.cmd的时候把zkServer.cmd关了。他们一个服务器,一个客户端,服务器关了,客户端自然连接不上。嘤嘤嘤,还是太菜惹的祸。

一些指令

•1 help 获取客户端命令列表

•2 创建新节点 (1):创建新的节点(znode),zk_test,并将其与字符串”my_data”关联 (2):查看目录

•3 获取节点数据 

这个和官网的图不一样欸,官网可以获取到一长串信息(如下所示),我们来找找原因。

(1)我在想是不是版本问题,于是取下载了一个zookeeper-3.4.13 然后准备创建节点,同一个名字。 (2)首先,发现他们用的同一个zookeeper目录(为什么呢?以后遇到再说)。 (3)然后,我就get

所以还真的是版本问题 (4) 如果想在3.7.0上看版本信息的话,可以用:

•4 删除节点 

更多详见程序员指南[4]

ZooKeeper编程

ZooKeeper有一个Java绑定和c绑定,功能上等价。不同之处在于消息传递循环是如何完成的。详见程序员指南[5]。

集群模式下运行ZooKeeper

单机的ZooKeeper适用于评估开发和测试。但是生产环境应该在集群模式下运行ZooKeeper。ZooKeeper集群中复制的服务器组称为法定人数 quorum, 法定人数中的所有服务器都有一样的配置文件。

Note

•1 集群模式,服务器数量至少为3台,且强烈建议使用奇数个服务器。因为如果只有两台服务器,其中一台服务器发生故障时,就剩了一台服务器,就没法形成多数派。(选举用?)•2 在一台机器上设置多个服务器不会产生冗余,所以机器故障后,所有服务器都会宕机。真是情况下需要每个服务器都有完全独立的物理服务器。

在一台计算机上搭建伪集群

参考链接[6]

1 复制

将之前的ZooKeeper文件复制3份,我顺便换了各名字

2 修改zoo.cg

(1)initLimit:初始化连接时,Zookeeper 服务器集群中连接到 Leader 的 Follower 服务器最长可以忍受的心跳时长(),如果超出时长还没有连接成功,则说明连接失败。 (2)syncLimit:Leader 与 Follower 之间发送消息,请求和应答时间长度,最长不超过。 (3)server.A=B:C:D A是当前服务的序号,B是该服务所在IP地址,C是节点之间信息交流的端口,D是服务出现异常后,选举Leader的端口

zk1

zk2

zk3

3 创建myid文件

myid的值是zoo.cfg文件里定义的server.A项A的值。Zookeeper启动时会读取这个文件。因此zk1的myid内容是1,zk2的是2,zk3的是3。

4 启动

分别点击各自的zkServer

•1 报错:

•2 忘了改myid了,改一下,再试一次。依然报这个错:

这里的主要原因是myid文件没有找到,和目录有关系,把目录改成: 这样,就好了。(我也不知道为什么)

•3 三个全打开 不然会报错

•4 zk1报错

我一气之下,就把他们端口号全改了

然后就好了,虽然我没有找到其他应用占用这几个端口,但改了的确好了。

5 如何判断好没有呢?

点击任意一个zCli.cmd,出现下图。

当然也可以不手动点,输命令:参考链接[7]

其他优化

将事务日志和数据快照分离,也就是前面的log目录

恭喜你和我又学完了一篇,可真棒呐!

References

资源下载: