首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

一文入门Apache ZooKeeper

一文入门Apache ZooKeeper

什么是Zookeeper

根据官方介绍,Zookeeper提供配置信息管理,命名,分布式协作任务和组服务的中心式服务。主要用在分布式的环境中,简化分布式开发协作任务,让开发人员主要关注业务。

Zookeeper从文件系统的API得到启发,并提供一组API。Zookeeper的文件树结构如下图所示:

Zookeeper的文件树结构

上图中的节点称为znode,采用类似文件系统的层次的树状结构进行元数据的管理。并且可以创建,删除节点或者更新节点内容。Zookeeper提供了四种不同类型的znode。

1、持久persistent节点:持久节点是非常有用的节点,即使创建者不属于应用系统了,节点数据也不会丢失。节点只能通过删除才能清除。

2、持久有序persistent-sequential节点:一个有序节点被分配一个唯一的单调递增的整数,当节点被创建时,会在路径后面追加一个序号。

3、临时ephemeral节点:当创建此节点的客户端会话超时或者主动关闭时,节点会被删除。可以像持久节点一样被主动删除。

4、临时有序ephemeral-sequential节点:一个有序节点被分配一个唯一的单调递增的整数,当节点被创建时,会在路径后面追加一个序号。但像临时节点一样超时或者主动关闭时,节点会被删除。

Zookeeper使用监视和通知模式避免客户端轮询获取节点变更。我们创建一个监听,当阶段更新或者删除时,会通知客户端。

Zookeeper不适用的场景

Zookeeper管理协作的关键数据,不适合管理海量的数据存储。我们应该把存储数据和协作数据分开管理,充分发挥zookeeper的优势。

Zookeeper架构

应用通过客户端对zookeeper服务实现调用,应用程序通过客户端和zookeeper服务器之间进行交互。

Zookeeper架构

Zookeeper有两种运行模式,一种是独立模式,另一种是仲裁模式。独立模式就是一个独立的服务器,就像一个单体系统一样。仲裁模式下,数据在各个服务器中进行复制。在仲裁模式下需要一个法人数量,就是使zookeeper能正常工作的最小服务器的数量。通常用多数原则,最小法人数量大于总数量的一半。

建议集群的数量为奇数,比如5个,法人数量为3,可以运行崩溃的服务器为2,如果集群为4,法人数量也是3,此时允许服务器崩溃的服务器为1个,系统会更脆弱。

Zookeeper会话,在客户端和服务器进行连接是需要创建一个会话,客户端和服务器的所有操作都建立在这个会话的基础之上。

客户端在创建一个zookeeper句柄时,就会建立一个会话,客户端通过TCP协议和服务器进行通信。当客户端连接的当前服务器故障时,会话会转移到其他服务器上,应用并不需要知道。

Zookeeper的安装

1、从官网下载压缩包,解压到指定目录:

zookeeper的目录结构

2、拷贝配置文件,cp zoo_sample.cfg zoo.cfg

在配置文件 zoo.cfg中配置data目录,dataDir=/users/xxxx/zookeeper

3、启动后台服务:zkServer.sh start

4、启动客户端zkCli.sh(Windows中为zkCli.cmd)

已连接到服务器

仲裁模式下的配置(以三台为例):

1,下载安装包,和独立模式一样解压到指定目录

2,复制三分配置文件,

cp zoo_sample.cfg zoo-1.cfg

cp zoo_sample.cfg zoo-2.cfg

cp zoo_sample.cfg zoo-3.cfg

3、修改配置文件,在每个配置文件中更新以下配置

修改配置文件

其中server.n项指定了编号为n的中zookeeper服务器的地址和端口号,每个项用分号分成三部分,第一部分为主机IP或者主机名,第二部和第三部分为TCP端口号,分别用于仲裁通信和群首选举。如果服务器是不同机器上部署,上面的端口号可以完全相同。

4、在每个data目录下创建myid文件,服务器启动的时候读取这个文件获取服务器ID信息。

5、启动服务,启动的时候可以指定配置文件,比如zkServer.sh start zoo-1.cfg

这样一个集群就配置好了,启动的时候,如果先启动第一台服务器,其他服务器没有启动,此时不能选举出Leader。再启动第二台的时候,这个时候能构成最小法人数量,就会选举出一个Leader。最后启动第三台,第三台就作为Follwer提供服务。

Zookeeper使用

1、新建工程,在pom中添加zookeeper的依赖

添加zookeeper的依赖

2,创建zookeeper实例,zooKeeper = new ZooKeeper("localhost:2181", 1000, new Matcher())

3,调用zookeeper.create方法创建一个znode

全部代码如下:

zookeeper测试代码

最后简单说明下配置文件中的几个配置

tickTime:这个时间是作为 Zookeeper 服务器之间或客户端与服务器之间维持心跳的时间间隔,单位是毫秒。

initLimit:集群中的follower服务器(F)与leader服务器(L)之间 初始连接 时能容忍的最多心跳数(tickTime的数量),initLimit=10当已经超过 10个心跳的时间(也就是 tickTime)长度后 Zookeeper 服务器还没有收到客户端的返回信息,那么表明这个客户端连接失败。

syncLimit:集群中的follower服务器(F)与leader服务器(L)之间 请求和应答 之间能容忍的最多心跳数(tickTime的数量)

dataDir:Zookeeper 保存数据的目录,默认情况下,Zookeeper 将写数据的日志文件也保存在这个目录里。

clientPort:Zookeeper 会监听这个端口也是客户端连接 Zookeeper 服务器的端口,接受客户端的访问请求。

  • 发表于:
  • 原文链接https://kuaibao.qq.com/s/20200419A0BW0B00?refer=cp_1026
  • 腾讯「腾讯云开发者社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 cloudcommunity@tencent.com 删除。

扫码

添加站长 进交流群

领取专属 10元无门槛券

私享最新 技术干货

扫码加入开发者社群
领券