4.hadoop之Zookeeper——01.简介及基本配置说明

来源:互联网 发布:java log4j mongodb 编辑:程序博客网 时间:2024/06/14 06:59

1.什么是Zookeeper

Zookeeper 是 Google 的 Chubby一个开源的实现,是 Hadoop 的分布式协调服务,它包含一个简单的原语集,分布式应用程序可以基于它实现同步服务,配置维护和命名服务等。

 企业级应用系统中,随着企业系统变得越来越庞大臃肿,性能急剧下降。拆分系统是目前我们可选择的解决系统可伸缩性和性能问题的唯一行之有效的方法。但是拆分系统同时也带来了系统的复杂性——各子系统不是孤立存在的,它们彼此之间需要协作和交互,这就是我们常说的分布式系统。各个子系统就好比动物园里的动物,为了使各个子系统能正常为用户提供统一的服务,必须需要一种机制来进行协调——这就是ZooKeeper(动物园管理员)。

2.为什么要使用Zookeeper

»大部分分布式应用需要一个主控、协调器或控制器来管理物理分布的子进程(如资源、任务分配等)

»目前,大部分应用需要开发私有的协调程序,缺乏一个通用的机制

»协调程序的反复编写浪费,且难以形成通用、伸缩性好的协调器

»ZooKeeper:提供通用的分布式锁服务,用以协调分布式应用

 

我们知道要写一个分布式应用是非常困难的,主要原因就是局部故障。一个消息通过网络在两个节点之间传递时,网络如果发生故障,发送方并不知道接收方是否接收到了这个消息。他可能在网络故障迁就收到了此消息,也许没有收到,又或者可能接收方的进程死了。发送方了解情况的唯一方法就是再次连接发送方,并向他进行询问。这就是局部故障:根本不知道操作是否失败。因此,大部分分布式应用需要一个主控、协调控制器来管理物理分布的子进程。目前,大部分应用需要开发私有的协调程序,缺乏一个通用的机制。协调程序的反复编写浪费,且难以形成通用、伸缩性好的协调器。协调服务非常容易出错,并很难从故障中恢复。例如:协调服务很容易处于竞态1甚至死锁2。Zookeeper的设计目的,是为了减轻分布式应用程序所承担的协调任务。

Zookeeper并不能阻止局部故障的发生,因为它们的本质是分布式系统。他当然也不会隐藏局部故障。ZooKeeper的目的就是提供一些工具集,用来建立安全处理局部故障的分布式应用。

ZooKeeper是一个分布式小文件系统,并且被设计为高可用性。通过选举算法和集群复制可以避免单点故障,由于是文件系统,所以即使所有的ZooKeeper节点全部挂掉,数据也不会丢失,重启服务器之后,数据即可恢复。

3.zookeeper的特性

»Zookeeper是简单的

»Zookeeper是富有表现力的

»Zookeeper具有高可用性

»Zookeeper采用松耦合交互方式

»Zookeeper是一个资源库

4. Zookeeper的集群

实际应用的一个场景,该ZooKeeper集群当中一共有5台服务器,有两种角色Leader和Follwer,5台服务器连通在一起,客户端有分别连在不同的ZK服务器上。如果当数据通过客户端1,在左边第一台Follower服务器上做了一次数据变更,他会把这个数据的变化同步到其他所有的服务器,同步结束之后,那么其他的客户端都会获得这个数据的变化。ZooKeeper必须是奇数台(至少3台,正常工作必须保证过半正常才可使用)一个Leader,多个Follower(如果leader挂掉了,其中一个follower替代他).

 

Zookeeper集群主要角色有Leader,Follower,Observer(当服务器增加到一定程度,由于投票的压力增大从而使得吞吐量降低,所以增加了Observer。)以及client:

Leader:领导者,负责投票的发起和决议,以及更新系统状态

Follower:接受客户端的请求并返回结果给客户端,并参与投票

Observer:接受客户端的请求,将写的请求转发给leader,不参与投票。Observer目的是扩展系统,提高读的速度。

Client:客户端,想Zookeeper发起请求。

5.Zookeeper基本配置说明

zookeeper的默认配置文件为zookeeper/conf/zoo_sample.cfg,需要将其修改为zoo.cfg。其中各配置项的含义,解释如下:1.tickTime:CS通信心跳时间Zookeeper 服务器之间或客户端与服务器之间维持心跳的时间间隔,也就是每个 tickTime 时间就会发送一个心跳。tickTime以毫秒为单位。tickTime=2000  2.initLimit:LF初始通信时限集群中的follower服务器(F)与leader服务器(L)之间初始连接时能容忍的最多心跳数(tickTime的数量)。initLimit=5  3.syncLimit:LF同步通信时限集群中的follower服务器与leader服务器之间请求和应答之间能容忍的最多心跳数(tickTime的数量)。syncLimit=2   4.dataDir:数据文件目录Zookeeper保存数据的目录,默认情况下,Zookeeper将写数据的日志文件也保存在这个目录里。dataDir=/home/michael/opt/zookeeper/data  5.clientPort:客户端连接端口客户端连接 Zookeeper 服务器的端口,Zookeeper 会监听这个端口,接受客户端的访问请求。clientPort=2181 6.服务器名称与地址:集群信息(服务器编号,服务器地址,LF通信端口,选举端口)这个配置项的书写格式比较特殊,规则如下:server.N=YYY:A:B server.1=hadoop05:2888:3888server.2=hadoop06:2888:3888server.3=hadoop07:2888:3888

6.Zookeeper集群搭建

1.安装配置zooekeeper集群1.1解压tar -zxvf zookeeper-3.4.5.tar.gz -C /hadoop/1.2修改配置cd /hadoop/zookeeper-3.4.5/conf/cp zoo_sample.cfg zoo.cfgvim zoo.cfg修改:dataDir=/hadoop/zookeeper-3.4.5/tmp在最后添加:server.1=hadoop05:2888:3888#两个端口-----LF通信端口,选举端口server.2=hadoop06:2888:3888server.3=hadoop07:2888:3888保存退出然后创建一个tmp文件夹mkdir /hadoop/zookeeper-3.4.5/tmp再创建一个空文件touch /hadoop/zookeeper-3.4.5/tmp/myid最后向该文件写入IDecho 1 > /hadoop/zookeeper-3.4.5/tmp/myid1.3将配置好的zookeeper拷贝到其他节点(首先分别在hadoop06、hadoop07根目录下创建一个hadoop目录:mkdir /hadoop)scp -r /hadoop/zookeeper-3.4.5/ hadoop06:/hadoop/scp -r /hadoop/zookeeper-3.4.5/ hadoop07:/hadoop/注意:修改hadoop06、hadoop07对应/hadoop/zookeeper-3.4.5/tmp/myid内容hadoop06:echo 2 > /hadoop/zookeeper-3.4.5/tmp/myidhadoop07:echo 3 > /hadoop/zookeeper-3.4.5/t5mp/myid



0 0
原创粉丝点击