Zookeeper的安装和配置

来源:互联网 发布:绝对萌域淘宝店名 编辑:程序博客网 时间:2024/05/19 03:19

为更好了解Zookeeper,对书本和网上资料汇总

本章首先介绍如何在不同的环境下安装并配置ZooKeeper服务、然后具体介绍如何通过ZooKeeper配置文件对ZooKeeper进行配置管理;最后介绍如何在不同环境下启动ZooKeeper服务。

安装ZooKeeper

ZooKeeper有不同的运行环境,包括,单机环境、集群环境和集群伪分布式环境。这里,我们将分别介绍不同环境下如何安装ZooKeeper服务,并简单介绍它们的区别与联系。

ZooKeeper可以在不同的系统上运行,下表是关于这方面的一个说明

软件要求

首先,安装ZooKeeper需要Java的支持,并且要求1.6以上的版本。此外,对于集群的安装,ZooKeeper需要至少三个节点,我们建议将三个节点部署到不同的机器上。例如,Yahoo!将ZooKeeper部署在Red Hat Linux机器上,每台机器使用多核CPU,2G的内存和80G的硬盘。

JDK的安装在此不做介绍。

        注意:系统中,要求大多数机器处于可用状态。如果想要机器能够忍受m台机器的故障,那么整个集群至少需要2m+1台机器。因为此时剩余的m+1台才能构成系统的一个大多数集。例如,对于拥有三台机器的机群,系统能够在一台机器发生故障的情况下仍能提供服务。

另外,最好使用奇数台机器,例如,拥有四台机器的ZooKeeper只能处理一台机器的故障,如果两台机器发生故障,余下的两台机器并不能组成一个可用的ZooKeeper大多数(三台机器才能构成四台机器的大多数集);而如果ZooKeeper拥有五台机器,那么它就能处理两台机器的故障了。

单机环境下安装ZooKeeper

为了今后操作方便,我们需要对ZooKeeper的环境变量进行配置,方法如下,在/etc/profile文件中加入如下的内容:

#set ZooKeeper Enviromentexport ZOOKEEPER_HOME=$HADOOP_HOME/zookeeper-3.4.3(以3.4.3为例)export PATH=$PATH:$ZOOKEEPER_HOME/bin:$ZOOKEEPER_HOME/conf
这里$HADOOP_HOME代表Hadoop的安装目录,这是为了使用的方便,当然zookeeper-3.4.3目录可以根据需要随意放置。 需要注意的是ZooKeeper的运行并不依赖于Hadoop,也不依赖于HBase或其他与Hadoop相关的项目。

单机模式(7步)

Step1:配置JAVA环境。检验方法:执行java –version和javac –version命令。 Step2:下载并解压zookeeper。 从apache官网下载一个最新稳定版本:http://hadoop.apache.org/zookeeper/releases.htmlStep3:重命名 zoo_sample.cfg文件 cp $HADOOP_HOME/zookeeper-3.4.3/conf/zoo_sample.cfg zoo.cfgStep4:vi zoo.cfg,修改 dataDir=$HADOOP_HOME/zookeeper-3.4.3/dataStep5:创建数据目录:mkdir $HADOOP_HOME/zookeeper-3.4.3/dataStep6:启动zookeeper:执行 zkServer.sh start Step7:检测是否成功启动:执行 bin/zkCli.sh  或   echo stat|nc localhost 2181

上面我们从zoo_sample.cfg得到了zoo.cfg。如果自己新建一个zoo.cfg,只需要包含如下内容:

        #The number of milliseconds of each ticktickTime=2000#the directory where the snapshot is storeddataDir=$HADOOP_HOME/zookeeper-3.4.3/data  #the port at which the clients will connectclientPort=2181

tickTime:基本事件单元,以毫秒为单位。它用来指示个时间是作为 Zookeeper 服务器之间或客户端与服务器之间维持心跳的时间间隔,也就是每个 tick Time 时间就会发送一个心跳,最小的session过期时间为两倍的tickTime;

dataDir:存储内存中数据库快照的位置,如果不设置参数,更新事物的日志将被存储到默认位置;

clientPort:这个端口就是客户端连接 Zookeeper 服务器的端口,Zookeeper 会监听这个端口,接受客户端的访问请求。使用单机模式时大家需要注意:这种配置方式下没有ZooKeeper副本,所以如果ZooKeeper服务器出现故障,ZooKeeper服务将会停止。

集群下安装ZooKeeper

为了获得可靠的ZooKeeper服务,用户应该在一个集群上部署ZooKeeper。只要集群上大多数的ZooKeeper服务启动了,那么总的ZooKeeper服务讲师可用的。

集群模式(8步) 

Step1:配置JAVA环境。检验方法:执行java –version和javac –version命令。 Step2:下载并解压zookeeper。Step3:重命名 zoo_sample.cfg文件cp $HADOOP_HOME/zookeeper-3.4.3/conf/zoo_sample.cfg zoo.cfgStep4:vi zoo.cfg,修改 dataDir=$HADOOP_HOME/zookeeper-3.4.3/dataserver.1=zoo1:2888:3888  server.2=zoo2:2888:3888  server.3=zoo3:2888:3888 这里要注意下server.1这个后缀,表示的是zoo1(也可以用ip表示)这个机器,在机器中的server id是1 Step5:创建数据目录:mkdir $HADOOP_HOME/zookeeper-3.4.3/dataStep6:在标识Server ID.  在$HADOOP_HOME/zookeeper-3.4.3/data目录中创建文件 myid 文件, 每个文件中分别写入当前机器的server id,例如zoo1这个机器,在$HADOOP_HOME/zookeeper-3.4.3/data目录的myid文件中写入数字1.  Step7:启动zookeeper:执行   1.$HADOOP_HOME/zookeeper-3.4.3/bin/zkServer.sh start  Step8:检测是否成功启动:执行   $HADOOP_HOME/zookeeper-3.4.3/bin/zkCli.sh  或 echo stat|nc localhost 2181

Zookeeper 的集群模式的安装和配置也不是很复杂,所要做的就是增加几个配置项。集群模式除了上面的三个配置项还要增加下面几个配置项:

#The number of milliseconds of each ticktickTime=2000#the directory where the snapshot is storeddataDir=$HADOOP_HOME/zookeeper-3.4.3/data  #the port at which the clients will connectclientPort=2181#the number of ticks that the initial synchronization phase can takeinitLimit=5#the number of ticks that the pass between sending a request and getting an acknowledgementsyncLimit=2server.1=192.168.211.1:2888:3888server.2=192.168.211.2:2888:3888

initLimit:这个配置项是用来配置 Zookeeper 接受客户端(这里所说的客户端不是用户连接 Zookeeper 服务器的客户端,而是 Zookeeper 服务器集群中连接到 Leader 的 Follower 服务器)初始化连接时最长能忍受多少个心跳时间间隔数。当已经超过 10 个心跳的时间(也就是 tickTime)长度后 Zookeeper 服务器还没有收到客户端的返回信息,那么表明这个客户端连接失败。总的时间长度就是 5*2000=10 秒;

syncLimit:这个配置项标识 Leader 与 Follower 之间发送消息,请求和应答时间长度,最长不能超过多少个 tickTime 的时间长度,总的时间长度就是 2*2000=4 秒;

server.id=host:port:port标识了不同ZooKeeper服务器的配置。每台服务器作为集群中的一部分应该知道集群中其他机器,用户可以从"server.id=host:port:port "中读取相关的信息。参数中host和port比较直观。id标识的是不同的服务器,在服务器的data(dataDir参数指定的目录)目录下创建一个文件名为myid的文件,这个文件中仅 含一行内容,它所指定的是自身的id值。比如,服务器"1" 应该在myid文件中写入"1"。而且这个id必须是集群中唯一的,大小在1到255之间。第一个port表示的是这个服务器与集群中的 Leader 服务器交换信息的端口;第二个port表示的是万一集群中的 Leader 服务器挂了,需要一个端口来重新进行选举,选出一个新的 Leader,而这个端口就是用来执行选举时服务器相互通信的端口。

如果是伪集群的配置方式,由于host都是一样,所以不同的 Zookeeper 实例通信端口号不能一样,所以要给它们分配不同的端口号。

在集群伪分布模式下安装ZooKeeper

了解Hadoop的知道可以在伪分布模式下模拟分布式Hadoop的运行。与它不同的是,ZooKeeper不但可以在单机上运行单机模式ZooKeeper,而且可以在单机上模拟集群模式ZooKeeper的运行,也就是将不同的节点运行在同一台机器上。我们索性将其称之为"集群伪分布模式",以区别单机模式。我们知道,伪分布模式下Hadoop的操作和分布式模式下有很大的不同,但是在集群伪分布模式下对ZooKeeper的操作却和集群模式下没本质的区别。显然,集群伪分布模式为我们体验ZooKeeper和做一些尝试性的实验提供了很大的方便。比如,我们在实验的时候,可以先使用少量数据在集群伪分布模式下进行测试。当测试可行的时候,再将其转移到集群模式下进行真实的数据实验。这样不但保证了它的可行性,同时大大提高了实验的效率。

那么,如何配置ZooKeeper的集群伪分布模式呢?其实很简单。在ZooKeeper的配置文档中,clientPort参数是用来设置客户端连接ZooKeeper的端口。在server:1=ip1:2887:3887中,IP1指示的是组成ZooKeeper服务的机器IP地址,2887为进行leader选举的端口,3887是组成ZooKeeper服务的机器之间的通信端口。在集群伪分布模式下我们使用每个配置文档模拟一台机器,也就是说,需要在单台机器上运行多个ZooKeeper实例。但是,必须要保证各个配置文档的各个端口不能冲突。

下面是我们所配置的集群伪分布模式,分别通过zoo.cfg,zoo2.cfg,zoo3.cfg来模拟有三台机器的ZooKeeper集群。

step1:copy zoo.cfg并修改如下:

zoo1.cfg如下:

#The number of milliseconds of each ticktickTime=2000#the directory where the snapshot is storeddataDir=$HADOOP_HOME/zookeeper-3.4.3/data_1#the location of the log filedataLogDir=$HADOOP_HOME/zookeeper-3.4.3/logs_1 #the port at which the clients will connectclientPort=2181#the number of ticks that the initial synchronization phase can takeinitLimit=5#the number of ticks that the pass between sending a request and getting an acknowledgementsyncLimit=2server.1=localhost:2887:3887server.2=localhost:2888:3888server.3=localhost:2889:3889

zoo2.cfg

#The number of milliseconds of each ticktickTime=2000#the directory where the snapshot is storeddataDir=$HADOOP_HOME/zookeeper-3.4.3/data_2#the location of the log filedataLogDir=$HADOOP_HOME/zookeeper-3.4.3/logs_2 #the port at which the clients will connectclientPort=2182#the number of ticks that the initial synchronization phase can takeinitLimit=5#the number of ticks that the pass between sending a request and getting an acknowledgementsyncLimit=2server.1=localhost:2887:3887server.2=localhost:2888:3888server.3=localhost:2889:3889


zoo3.cfg

#The number of milliseconds of each ticktickTime=2000#the directory where the snapshot is storeddataDir=$HADOOP_HOME/zookeeper-3.4.3/data_3#the location of the log filedataLogDir=$HADOOP_HOME/zookeeper-3.4.3/logs_3 #the port at which the clients will connectclientPort=2183#the number of ticks that the initial synchronization phase can takeinitLimit=5#the number of ticks that the pass between sending a request and getting an acknowledgementsyncLimit=2server.1=localhost:2887:3887server.2=localhost:2888:3888server.3=localhost:2889:3889


Step2:创建数据目录:
mkdir /$HADOOP_HOME/zookeeper-3.4.3/data_1  
mkdir  /$HADOOP_HOME/zookeeper-3.4.3/data _2
mkdir  /$HADOOP_HOME/zookeeper-3.4.3/data_3 
mkdir /$HADOOP_HOME/zookeeper-3.4.3/logs_1  
mkdir  /$HADOOP_HOME/zookeeper-3.4.3/logs _2
mkdir  /$HADOOP_HOME/zookeeper-3.4.3/logs_3    


Step3:创建myid文件来指定对应的ZooKeeper服务器实例,标识Server ID     
在/$HADOOP_HOME/zookeeper-3.4.3/data_1目录中创建myid 文件,  myid文件中写入数字1, 
在/$HADOOP_HOME/zookeeper-3.4.3/data_2目录中myid文件中写入数字2, 
在/$HADOOP_HOME/zookeeper-3.4.3/data_3目录中myid文件中写入数字3 

启动:

/$HADOOP_HOME/zookeeper-3.4.3/bin/ zkServer.sh start zoo1.cfg

/$HADOOP_HOME/zookeeper-3.4.3/bin/ zkServer.sh start zoo2.cfg

/$HADOOP_HOME/zookeeper-3.4.3/bin/ zkServer.sh start zoo3.cfg



0 0
原创粉丝点击