JAVA语言之Zookeeper分布式服务协调组件
小标 2018-07-19 来源 : 阅读 1052 评论 0

摘要:本文主要向大家介绍了JAVA语言的Zookeeper分布式服务协调组件,通过具体的内容向大家展示,希望对大家学习JAVA语言有所帮助。

本文主要向大家介绍了JAVA语言的Zookeeper分布式服务协调组件,通过具体的内容向大家展示,希望对大家学习JAVA语言有所帮助。

1.简介

Zookeeper是一个分布式服务协调组件,是Hadoop、Hbase、Kafka的重要组件,它是一个为分布式应用提供一致性服务的组件.

 

Zookeeper的目标就是封装好复杂易出错的服务,为使用者提供高效、稳定的服务.

 

 

使用场景:

 

1.Hadoop、Hbase、Kafka依赖的组件.

 

2.作为注册中心,用于维护服务列表.

 

 

2.模型

 

2.1.Zookeeper的文件系统

 

 

 

Zookeeper维护了一个类似文件系统的数据结构,有根目录(/)和若干个子目录(树形结构,与Linux类似).

每个子目录都称为一个znode,znode是可以直接存储数据的,可以自定义增加和删除znode.

创建znode时需要添加数据,删除znode时若该znode拥有子znode时,必须先删除其所有子znode,否则操作将失败.

 

Zookeeper中的znode类型

 

1.持久化节点

当客户端创建一个持久化节点后,无论客户端的连接状态是连接还是断开该节点依然存在.

 

2.持久化节点并顺序编号

当客户端创建一个持久化节点并顺序编号时,znode会自动被编号,当客户端再创建该同名节点时,将会以最后一个同名znode的顺序进行编号.

*即一个客户端创建/p节点,那么Zookeeper将把其节点命名为/p1,当另一个客户端也创建/p节点,那么Zookeeper将把该节点命名为/p2.

 

3.临时节点

当客户端断开连接之后该节点包括节点中的数据将会被删除.

 

4.临时节点并顺序编号

与持久化节点并顺序编号的区别是,临时节点并顺序编号会在客户端断开连接之后会自动删除节点.

 

 

2.2.Zookeeper的通知机制

 

客户端可以监听它关心的节点,当目录节点发生变化时(数据改变、被删除、子目录节点增加和删除),Zookeeper会通知客户端.

 

 

2.3.Zookeeper集群的一致性同步

 

 

 

*Zookeeper一般是通过集群的方式使用,即多台Zookeeper服务构成一个有关系的组.

 

当搭建了一个Zookeeper集群,Zookeeper会根据选举算法,从多个Zookeeper服务中选取一个作为Leader,剩余的Zookeeper服务为Follwer,Leader会与各个服务节点建立一个有效的长连接,保证各个节点的通信正常(每台服务器都有可能被选取为Leader).

 

一旦选取的Leader节点宕机,则会重新组织Zookeeper集群,选取新的Leader之后,也会重新建立连接.(重新选取的时间很短,大概200ms的时间)

 

当Zookeeper集群搭建完成后,就可以启动很多个客户端,除了Leader以外的节点都可以被客户端连接,并建立长连接,保证客户端与服务器能有效持久的连接.

 

当某个服务节点收到修改的操作时,首先会把请求转发给Leader,Leader内有处理机制,它会操作修改并且同步修改给所有的Follower服务节点.

 

 

3.Zookeeper的使用

 

3.1.安装

 

*由于Zookeeper是由java语言编写的,因此在安装Zookeeper前需要安装好JDK,并且配置环境变量$JAVA_HOME

 

 

 

从Zookeeper官网下载zk进行解压安装:

 

 

bin目录下的命令:

 

zkEnv.sh命令是用于配置zk服务启动时的环境变量(包括加载配置文件的路径等).

zkServer.sh命名用于启动zk服务.

zkCli.sh命令用于启动zk客户端.

 

conf目录下的文件:

 

log4j.properties文件是zk运行时的日志输出文件,默认日志信息都将打印到bin目录下的Zookeeper.out文件(当使用Zookeeper遇到异常时应该查看此文件下的内容)

zoo_sample.conf文件是zk服务的配置文件,由Zookeeper官方提供(默认zk服务启动时将加载conf目录下的zoo.cfg配置文件)

 

 

3.2.配置讲解

 

Zookeeper启动时默认加载conf目录下的zoo.cfg配置文件,因此将conf目录下的zoo_sample.conf配置文件更名为zoo.cfg(Zookeeper官方提供的),

 

配置文件

 

#基础配置
tickTime=2000

initLimit=10

syncLimit=5

dataDir=/usr/Zookeeper/Zookeeper-3.4.6/zkdata

dataLogDir=/usr/Zookeeper/Zookeeper-3.4.6/zklog

clientPort=2181

autopurge.purgeInterval=1

 

 

tickTime: initLimit、syncLimit属性的时间单位,值是毫秒.

initLimit: Zookeeper集群搭建前所允许的初始化时间.

*其中一台zk服务启动后,剩余的zk服务必须在initLimit的时间内都启动成功,否则zk进行集群的搭建时会认为未启动的zk服务已失效.

syncLimit: leader发送心跳给follower,follower向leader回复心跳这一过程所允许的最大时长(rtt,往返时间),一旦超过了这个时间,则leader认为该follwer宕机.

dataDir: Zookeeper快照日志的存放目录(一般使用自定义的目录).

dataLogDir: Zookeeper事务日志的存放目录(一般使用自定义的目录).

*如果不配置dataLogDir,那么Zookeeper的事务日志以及快照日志都将写入到dataDir目录下(会严重影响zk的性能).

clientPort: Zookeeper服务的默认端口

 

 

3.3.Zookeeper的启动

 

使用zkServer.sh命令启动Zookeeper服务.

 

 

使用jps命令查询zk进程是否启动成功,当出现QuorumPeerMain表示zk启动成功.

 

 

*以上的是Zookeeper单个服务的搭建,通常情况下zk都是以集群的方式进行使用.

 

 

3.4.Zookeeper集群搭建

 

1.修改配置文件,添加zk集群配置

 

#基础配置
tickTime=2000

initLimit=10

syncLimit=5

dataDir=/usr/Zookeeper/Zookeeper-3.4.6/zkdata

dataLogDir=/usr/Zookeeper/Zookeeper-3.4.6/zklog

clientPort=2181

autopurge.purgeInterval=1

#集群配置

server.1=192.168.1.119:2888:3888

server.2=192.168.1.122:2888:3888

server.3=192.168.1.125:2888:3888

 

 

在conf文件下使用server.标识属性配置zk集群,使多个zk服务构成一个组(标识必须为整数).

server.本机zk标识 = zk服务地址:leader和follower之间的通信端口:leader选举端口

server.其他zk标识 = zk服务地址:leader和follower之间的通信端口:leader选举端口

 

*标识与zk服务进行绑定,因此同一个集群下的zk服务的标识不能相同.

*leader和follower之间的通信端口默认是2888、leader选举端口默认是3888

 

2.在快照日志目录下创建myid文件,文件中的值是本台zk服务的唯一标识

 

#将1输入到myid文件中
echo "1" > myid

 

 

 

*需要为要构成集群的其他zk服务都进行配置文件的修改以及设置myid文件.

 

3.启动Zookeeper服务

 

*在 initLimit * tickTime的时间内启动集群中的所有zk服务.

 

 

4.查看Zookeeper的状态

 

机器一:

 

 

 机器二:

 

 

机器三:

 

 

 

注意事项

*1.搭建Zookeeper集群(2n+1台服务器),因为根据Zookeeper的工作原理,只要有大于一半的服务器存活,则Zookeeper集群就能够对外提供服务.

*2.搭建zk集群时需关闭每台zk服务器上的防火墙或者开放对应的端口,否则集群中的zk间无法进行通讯.

*3.zk集群在高负荷的工作时会产生大量的事务日志,如果日志长期不进行清理容易将分区中的空间占满最终导致zk服务无法运行,因此需要定期清理zk产生的事务日志(可以配合Linux的crontab命令设置每天定时去执行清除日志文件的脚本)

本文由职坐标整理并发布,希望对同学们有所帮助。了解更多详情请关注编程语言JAVA频道!


本文由 @小标 发布于职坐标。未经许可,禁止转载。
喜欢 | 1 不喜欢 | 0
看完这篇文章有何感觉?已经有1人表态,100%的人喜欢 快给朋友分享吧~
评论(0)
后参与评论

您输入的评论内容中包含违禁敏感词

我知道了

助您圆梦职场 匹配合适岗位
验证码手机号,获得海同独家IT培训资料
选择就业方向:
人工智能物联网
大数据开发/分析
人工智能Python
Java全栈开发
WEB前端+H5

请输入正确的手机号码

请输入正确的验证码

获取验证码

您今天的短信下发次数太多了,明天再试试吧!

提交

我们会在第一时间安排职业规划师联系您!

您也可以联系我们的职业规划师咨询:

小职老师的微信号:z_zhizuobiao
小职老师的微信号:z_zhizuobiao

版权所有 职坐标-一站式IT培训就业服务领导者 沪ICP备13042190号-4
上海海同信息科技有限公司 Copyright ©2015 www.zhizuobiao.com,All Rights Reserved.
 沪公网安备 31011502005948号    

©2015 www.zhizuobiao.com All Rights Reserved

208小时内训课程