什么是Zookeeper
根据官方介绍,Zookeeper提供配置信息管理,命名,分布式协作任务和组服务的中心式服务。主要用在分布式的环境中,简化分布式开发协作任务,让开发人员主要关注业务。
Zookeeper从文件系统的API得到启发,并提供一组API。Zookeeper的文件树结构如下图所示:
上图中的节点称为znode,采用类似文件系统的层次的树状结构进行元数据的管理。并且可以创建,删除节点或者更新节点内容。Zookeeper提供了四种不同类型的znode。
持久persistent节点:持久节点是非常有用的节点,即使创建者不属于应用系统了,节点数据也不会丢失。节点只能通过删除才能清除。持久有序persistent-sequential节点:一个有序节点被分配一个唯一的单调递增的整数,当节点被创建时,会在路径后面追加一个序号。临时ephemeral节点:当创建此节点的客户端会话超时或者主动关闭时,节点会被删除。可以像持久节点一样被主动删除。临时有序ephemeral-sequential节点:一个有序节点被分配一个唯一的单调递增的整数,当节点被创建时,会在路径后面追加一个序号。但像临时节点一样超时或者主动关闭时,节点会被删除。Zookeeper使用监视和通知模式避免客户端轮询获取节点变更。我们创建一个监听,当阶段更新或者删除时,会通知客户端。
Zookeeper不适用的场景
Zookeeper管理协作的关键数据,不适合管理海量的数据存储。我们应该把存储数据和协作数据分开管理,充分发挥zookeeper的优势。
Zookeeper架构
应用通过客户端对zookeeper服务实现调用,应用程序通过客户端和zookeeper服务器之间进行交互。
Zookeeper有两种运行模式,一种是独立模式,另一种是仲裁模式。独立模式就是一个独立的服务器,就像一个单体系统一样。仲裁模式下,数据在各个服务器中进行复制。在仲裁模式下需要一个法人数量,就是使zookeeper能正常工作的最小服务器的数量。通常用多数原则,最小法人数量大于总数量的一半。
建议集群的数量为奇数,比如5个,法人数量为3,可以运行崩溃的服务器为2,如果集群为4,法人数量也是3,此时允许服务器崩溃的服务器为1个,系统会更脆弱。
Zookeeper会话,在客户端和服务器进行连接是需要创建一个会话,客户端和服务器的所有操作都建立在这个会话的基础之上。
客户端在创建一个zookeeper句柄时,就会建立一个会话,客户端通过TCP协议和服务器进行通信。当客户端连接的当前服务器故障时,会话会转移到其他服务器上,应用并不需要知道。
Zookeeper的安装
1、从官网下载压缩包,解压到指定目录:
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的依赖
2,创建zookeeper实例,zooKeeper = new ZooKeeper(“localhost:2181”, 1000, new Matcher())
3,调用zookeeper.create方法创建一个znode
全部代码如下:
最后简单说明下配置文件中的几个配置
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 服务器的端口,接受客户端的访问请求。
-
扫码下载安卓APP
-
微信扫一扫关注我们
微信扫一扫打开小程序
手Q扫一扫打开小程序
-
返回顶部
发表评论