学习Hadoop第十九课(Zookeeper集群搭建)

上节课我们一起学习了Zookeeper的理论知识,这节课我们一起来搭建一个Zookeeper集群,需要说明的是我们现在只是学习搭建集群,所以用的是CentOS虚拟机,还有如果在公司搭建集群的话是不能用root用户来搭建的,而是要用Hadoop用户来搭建,这里为了方便我们就以root用户来搭建了。

        要搭建Zookeeper集群,首先当然要有环境了,我们启用3台虚拟机,并且做如下准备工作:

1.修改Linux主机名

2.修改IP

3.修改主机名和IP的映射关系
   ######注意######如果你们公司是租用的服务器或是使用的云主机(如华为用主机、阿里云主机等)
   /etc/hosts里面要配置的是内网IP地址和主机名的映射关系
 
4.关闭防火墙
5.ssh免登陆 
6.安装JDK,配置环境变量等

      关于虚拟机的创建以及上面准备工作的处理大家可以参考:http://blog.csdn.net/u012453843/article/details/52411019、http://blog.csdn.net/u012453843/article/details/52422736、http://blog.csdn.net/u012453843/article/details/52431742、http://blog.csdn.net/u012453843/article/details/52433457、http://blog.csdn.net/u012453843/article/details/52443305这几天博客进行学习。

      接下来我们需要从Zookeeper官网下载Zookeeper安装包,首先我们从百度搜索zookeeper并点击第一个官网链接进去,如下图所示。

        点击上图的官网链接后我们会进入到如下图所示的界面,我们点击"Getting Started"这一栏下面的"Download"那个链接。

        点击上图的"Download"链接后,我们会进入到如下图所示的界面,我们点击"Download"一栏下面的"Download"链接。

扫描二维码关注公众号,回复: 1466642 查看本文章

       点击上图的"Download"链接之后,我们会进入到如下图所示的界面,我们点击第一个链接。

       点击上图的链接之后,我们会进入到如下图所示的界面,可以看到有几个版本供我们下载,这里我下载的是zookeeper-3.4.5,那么怎么找到这个版本呢,我们点击下图的"archives"。

       点击上图的"archives"链接之后,我们会看到如下图所示的界面,我们点击"zookeeper-3.4.5/"这个链接。

        点击上图的"zookeeper-3.4.5/"链接之后会进入到如下图所示的界面,我们点击"zookeeperr-3.4.5.tar.gz"链接

       点击上图的链接之后,就会出现如下图所示的小对话框,我们点击保存,就开始下载喽 。

       下载完Zookeeper安装包之后,我们把安装包上传到主机名为itcast04的机器上,上传所用的工具是FileZilla,这个大家通过我推荐的那几篇博客当中便可以学会怎么上传了。上传完之后,我们便开始安装Zookeeper,首先我们需要在虚拟机根目录下创建一个itcast文件,创建的命令是mkdir /itcast,然后我们把zookeeper-3.4.5.tar.gz解压到itcast这个目录下,[root@itcast04 ~]#tar -zxvf zookeeper-3.4.5.tar.gz -C /itcast,解压完后我们到itcast目录下查看是否已经解压成功,如下图所示,发现确实已经有zookeeper-3.4.5这个文件夹了。

[root@itcast04 ~]# cd /itcast

[root@itcast04 itcast]# ls

zookeeper-3.4.5

       下面我们进入到zookeeper-3.4.5文件夹当中看看都有哪些文件,可以看到zookeeper-3.4.5目录下有bin、conf、docs等文件夹还有一些文件,我们再进入bin目录,发现bin目录下放着zookeeper的可执行文件,zookeeper既可以在Windows系统上使用也可以在Linux系统上使用,在Windows系统下使用的话就用.cmd结尾的执行文件,在Linux系统上使用的话就用.sh结尾的文件。

      接着我们再进入到conf配置文件下面看看有哪些文件,发现有一个zoo_sample.cfg文件,这个文件提供了zookeeper的示例配置信息,我们就在这个文件的基础上配置zookeeper。

[root@itcast04 zookeeper-3.4.5]# ls
bin        CHANGES.txt  contrib  dist-maven  ivysettings.xml  lib          NOTICE.txt            README.txt  src                  zookeeper-3.4.5.jar.asc  zookeeper-3.4.5.jar.sha1
build.xml  conf         data     docs        ivy.xml          LICENSE.txt  README_packaging.txt  recipes     zookeeper-3.4.5.jar  zookeeper-3.4.5.jar.md5
[root@itcast04 zookeeper-3.4.5]# cd conf
[root@itcast04 conf]# ls
configuration.xsl  log4j.properties  zoo_sample.cfg

       我们在配置但节点集群之前先判断jdk是否安装成功,我们在任意目录下输入java命令,会看到回显信息,说明安装成功,我们可以使用which java命令来查看jdk的安装路径,如下图所示。

         

         现在我们开始安装单节点的zookeeper,我们需要修改conf目录下的zoo_sample.cfg为zoo.cfg,如下图所示。

          好,接下来我们便可以启动zookeeper了,我们回到bin目录下,并使用命令:./zkServer.sh start来启动zookeeper的服务器,如下图所示。

[root@itcast04 zookeeper-3.4.5]# cd bin
[root@itcast04 bin]# ls
README.txt  zkCleanup.sh  zkCli.cmd  zkCli.sh  zkEnv.cmd  zkEnv.sh  zkServer.cmd  zkServer.sh  zookeeper.out
[root@itcast04 bin]#./zkServer.sh start

JMX enabled by default

Using config: /itcast/zookeeper-3.4.5/bin/../conf/zoo.cfg

Starting zookeeperr ... STARTED

          启动完之后我们查看一下当前都有哪些进程,查看进程使用的命令是:jps,发现多了QuorumPeerMain这么一个进程,这个就是zookeeper的进程。

         接下来我们再启动客户端,客户端启动起来后我们输入help命令查看一下客户端都可以使用哪些命令,如下图所示。

          接下来我们使用命令ls /来查看一下根目录下有哪些文件,我们发现只有zookeeper这么一个文件夹,这说明现在所谓的根目录是zookeeper的根目录。接下来我们创建一个"文件夹",并给它赋予一条信息,比如我们创建一个名为itcast1014的文件夹并赋予一条1800$的信息,命令如下图所示,创建完成后使用命令ls /来查看这时根目录下的文件,发现确实多了itcast1014这么一个"文件夹",我们查看下这个文件夹的具体内容,我们使用命令get itcast1014并回车,会看到关于这个文件夹的所有信息。

       上面说了单节点zookeeper的情况,接下来我们搭建一个集群,搭建集群我们需要修改一下zookeeper的配置文件,刚才我们已经把conf目录下的zoo_sample.cfg更名为了zoo.cfg,我们现在进入这个目录下,如下图所示,我们发现zoo.cfg文件当中有几个配置,如tickTime=2000,initLimit=10等等,那么这些配置是什么意思呢?

       针对上面的配置文件,现在描述一下各个配置的意思什么。

zookeeper的默认配置文件为zookeeper/conf/zoo_sample.cfg,需要将其修改为zoo.cfg。其中各配置项的含义,解释如下:
1.tickTime:CS通信心跳时间
Zookeeper 服务器之间或客户端(C)与服务器(S)之间维持心跳的时间间隔,也就是每个 tickTime 时间就会发送一个心跳。tickTime以毫秒为单位。
tickTime=2000 
2.initLimit:LF初始通信时限,就是Zookeeper在启动的时候,Leader等待Follower启动的最长时间,超过这个时间Leader就认为该设备未成功启动。
集群中的follower服务器(F)与leader服务器(L)之间初始连接时能容忍的最多心跳数(tickTime的数量)。
initLimit=5  (意思是最多允许5次心跳的时间,一次心跳时间是2秒,5次心跳时间便是10秒)
3.syncLimit:LF同步通信时限(就是在数据同步的时候,Leader最多能容忍的等待时长,如果超过这个时间Follower还没有响应,那么Leader认为这台Follower同步数据失败了。)
集群中的follower服务器与leader服务器之间请求和应答之间能容忍的最多心跳数(tickTime的数量)。
syncLimit=2  (4秒的时间)
 
4.dataDir:数据文件目录
Zookeeper保存数据的目录,默认情况下,Zookeeper将写数据的日志文件也保存在这个目录里。
dataDir=/itcast/zookeeper-3.4.5/data
5.clientPort:客户端连接端口
客户端连接 Zookeeper 服务器的端口,Zookeeper 会监听这个端口,接受客户端的访问请求。
clientPort=2181
6.服务器名称与地址:集群信息(服务器编号,服务器地址,LF通信端口,选举端口)
这个配置项的书写格式比较特殊,规则如下:
server.N=YYY:A:B
server.1=itcast04:2888:3888
server.2=itcast05:2888:3888
server.3=itcast06:2888:3888

上面需要说明的是server必须就叫这个名字,server后面的.1、.2、.3是server的ID,不能重复。2888是通信端口,3888是选举端口。

        介绍完了配置的意思之后我们正式开始修改配置文件,修改的地方我都用红色标红了,如下图所示,修改完之后,保存退出。

       由于我们在上面的配置文件中配置的dataDir目录时使用了/itcast/zookeeper-3.4.5/data,而data目录目前并不存在,因此我们需要到zookeeper-3.4.5目录下创建一个data文件夹,如下图所示

[root@itcast04 bin]# cd ..
[root@itcast04 zookeeper-3.4.5]# ls
bin        CHANGES.txt  contrib  dist-maven  ivysettings.xml  lib          NOTICE.txt            README.txt  src                  zookeeper-3.4.5.jar.asc  zookeeper-3.4.5.jar.sha1
build.xml  conf      docs        ivy.xml          LICENSE.txt  README_packaging.txt  recipes     zookeeper-3.4.5.jar  zookeeper-3.4.5.jar.md5
[root@itcast04 zookeeper-3.4.5]# mkdir data
[root@itcast04 zookeeper-3.4.5]# ls
bin        CHANGES.txt  contrib  dist-maven  ivysettings.xml  lib          NOTICE.txt            README.txt  src                  zookeeper-3.4.5.jar.asc  zookeeper-3.4.5.jar.sha1
build.xml  conf         data     docs        ivy.xml          LICENSE.txt  README_packaging.txt  recipes     zookeeper-3.4.5.jar  zookeeper-3.4.5.jar.md5
[root@itcast04 zookeeper-3.4.5]#

        创建好了data目录后,我们进入到该目录下,目前该目录是空的,我们需要在data目录下创建一个myid的文件,这个文件中保存当前zookeeper的id,如下图所示,我们在myid文件中输入一个1(为什么id是1呢?我们不是刚才在配置文件中了server.1=itcast04:2888:3888吗,现在我们在itcast04上所以ID是1)然后保存退出。

[root@itcast04 zookeeper-3.4.5]# cd data

[root@itcast04 data]# ls

[root@itcast04 data]# touch myid

[root@itcast04 data]# ls

myid

[root@itcast04 data]# vim myid

1

       我们现在配完一台设备了,我们接下来只需把这台设备的配置复制到其它设备上即可

我们使用命令:scp  -r  /itcast/  [email protected]:/来进行拷贝,其中scp的意思是通过ssh的方式来复制,-r表示递归,/itcast/代表要拷贝的目录,root表示用户组,192.168.8.50是itcast05的IP地址,:/代表itcast05的根目录。按回车后会让你输入yes或者no,我们输入yes,如果没有配置过ssh免登陆的话,还会再让你输入itcast05的密码,如果配置过了ssh免密码登录则不用再输入密码了。拷贝完之后我们到itcast05这台设备上进行查看我们拷贝的情况,发现itcast05下面也有zookeeper-3.4.5了,我们再看看它的zoo.cfg配置文件,发现跟itcast04是一样的。如下图所示。

    这时我们别忘了,有一处地方是需要我们修改的,那就是data文件夹下的server的ID,因为每台Server的ID是不一样的,现在既然是在Itcast05设备上,我们当然要把它的ID改成2了。改成2之后保存退出,我们按下图所示命令操作。


[root@itcast05 zookeeper-3.4.5]# ls
bin        CHANGES.txt  contrib  dist-maven  ivysettings.xml  lib          NOTICE.txt            README.txt  src                  zookeeper-3.4.5.jar.asc  zookeeper-3.4.5.jar.sha1
build.xml  conf         data     docs        ivy.xml          LICENSE.txt  README_packaging.txt  recipes     zookeeper-3.4.5.jar  zookeeper-3.4.5.jar.md5

[root@itcast05 zookeeper-3.4.5]# cd data
[root@itcast05 data]# ls
myid 
[root@itcast05 data]#vim myid

2

        接着我们再把itcast04上的itcast目录复制到itcast06上一份,步骤同上一样。

[root@itcast04 ~]# scp -r /itcast/ [email protected]:/        这是使用的命令,其中192.168.8.60是itcast06的IP地址。

复制完之后我们同样需要修改itcast06上面的data目录下的myid文件的内容,把它的id修改为3,然后保存退出。

      进行完上面的操作之后,我们来启动一下itcast05上的zookeeper,启动方法同itcast04一样,如下一样。

[root@itcast05 zookeeper-3.4.5]# ls
bin        CHANGES.txt  contrib  dist-maven  ivysettings.xml  lib          NOTICE.txt            README.txt  src                  zookeeper-3.4.5.jar.asc  zookeeper-3.4.5.jar.sha1
build.xml  conf         data     docs        ivy.xml          LICENSE.txt  README_packaging.txt  recipes     zookeeper-3.4.5.jar  zookeeper-3.4.5.jar.md5
[root@itcast05 zookeeper-3.4.5]# cd bin
[root@itcast05 bin]# ls
README.txt  zkCleanup.sh  zkCli.cmd  zkCli.sh  zkEnv.cmd  zkEnv.sh  zkServer.cmd  zkServer.sh  zookeeper.out
[root@itcast05 bin]# ./zkServer.sh start
JMX enabled by default
Using config: /itcast/zookeeper-3.4.5/bin/../conf/zoo.cfg
Starting zookeeper ... STARTED
[root@itcast05 bin]#

       启动完之后,我们查看itcast05的zookeeper启动状态,我们使用的命令是./zkServer.sh status,这时会提示一个错误,如下所示。

[root@itcast05 bin]# ./zkServer.sh status
JMX enabled by default
Using config: /itcast/zookeeper-3.4.5/bin/../conf/zoo.cfg
Error contacting service. It is probably not running.

    而且这时itcast04的zookeeper状态是standalone状态。这个问题纠结了我一整天的时间,我发现可以通过如下所示的方式解决。

1.在Windows系统的hosts文件中添加关于虚拟机主机名和IP的映射关系,其中hosts文件的目录如下图所示。

     我们打开hosts文件,并在最下方添加主机名和IP的映射关系,以Admin的身份进行保存。

        配完之后我们可以在Windows的cmd下试试是否能通过主机名ping通某台虚拟机。发现是可以ping通的。

       光这还不行,我们还需要在itcast04、itcast05、itcast06的/etc/hosts文件中也加入其它虚拟机的主机名和IP的映射关系,这里由于我们现在只用到了3台设备,因此我只写三台设备的主机名和IP的映射关系,下图是itcast04的hosts文件的配置,itcast05和itcast06的配置和itcast04完全一样。

[root@itcast04 zookeeper-3.4.5]# vim /etc/hosts
127.0.0.1   localhost localhost.localdomain localhost4 localhost4.localdomain4
::1         localhost localhost.localdomain localhost6 localhost6.localdomain6
192.168.8.40 itcast04
192.168.8.50 itcast05
192.168.8.60 itcast06 
~

     配置完之后我们重启两台虚拟机,重启的命令是reboot

     重启之后我们试着在itcast04上去ping一下Itcast05和itcast06,发现确实可以ping通了,如下图所示。

    重启之后,我们再来启动itcast04、itcast05、itcast06的zookeeper,启动之后我们会发现itcast04的身份变成了leader,itcast05、itcast06的身份变成了follower(注意:哪台设备是leader哪台设备是follower是不固定的,是通过选举决定的),如下所示

[root@itcast04 bin]# ./zkServer.sh status
JMX enabled by default
Using config: /itcast/zookeeper-3.4.5/bin/../conf/zoo.cfg
Mode: follower
[root@itcast04 bin]#

-----------------------------------------------------------------------------

[root@itcast05 bin]# ./zkServer.sh status
JMX enabled by default
Using config: /itcast/zookeeper-3.4.5/bin/../conf/zoo.cfg
Mode: leader
[root@itcast05 bin]#

----------------------------------------------------------------------------

[root@itcast06 bin]# ./zkServer.sh status
JMX enabled by default
Using config: /itcast/zookeeper-3.4.5/bin/../conf/zoo.cfg
Mode: follower

[root@itcast06 bin]#        

注意:如果想干掉某个进程的话,可以使用命令kill -9 进程号,如下假如我想干掉itcast05上的2671进程,我便使用命令kill -9 2671就行了。之所以说这个是因为我们有可能碰到某虚拟机的zookeeper状态是standalone状态而其它两台虚拟机的状态已经变成leader或follower的情况,这时我们便把状态为standalone状态的虚拟机中的zookeeper进程(也就是名为QuorumPeerMain的进程)给干掉,然后重新启动该虚拟机的zookeeper,这时它的状态就会正常了!!

[root@itcast05 bin]# jps
2725 Jps
2671 QuorumPeerMain
[root@itcast05 bin]# kill -9 2671
[root@itcast05 bin]# jps
2735 Jps
[root@itcast05 bin]#

    接下来我们来演示一下数据同步功能,现在itcast04和itcast06是follower身份,itcast05是leade身份,我们就在itcast04上操作

我们先进入itcast04的client端,我们使用命令ls /来查看zookeeper根目录下都有哪些文件,我们发现只有zookeeper这么一个“文件夹”,我们可以用get /zookeeper来查看这个“文件夹”的信息,我们以后如下图所示。

     接着我们在zookeeper根目录下新建一个hadoop123“文件夹”,并在该文件夹写入"123",如下所示。

[zk: localhost:2181(CONNECTED) 5] create /hadoop123 123
Created /hadoop123
[zk: localhost:2181(CONNECTED) 6] ls /
[hadoop123, zookeeper]
[zk: localhost:2181(CONNECTED) 7]    

     创建完之后我们查看一下hadoop123这个“文件夹”的内容,如下所示。

[zk: localhost:2181(CONNECTED) 7] get /hadoop123
123
cZxid = 0x300000002
ctime = Sun Oct 16 04:54:21 PDT 2016
mZxid = 0x300000002
mtime = Sun Oct 16 04:54:21 PDT 2016
pZxid = 0x300000002
cversion = 0
dataVersion = 0
aclVersion = 0
ephemeralOwner = 0x0
dataLength = 3
numChildren = 0
[zk: localhost:2181(CONNECTED) 8]

     接下来我们来看一下itcast05上数据是不是已经同步过来了,我们需要进入到itcast05的客户端,如下图所示,进入客户端后我们查看itcast05的zookeeper根目录下的文件列表,发现自己多了一个hadoop123的“文件夹”!

     我们再查看itcast05的zookeeper客户端的hadoop123“文件夹”下的内容,发现确实有“123”这条信息,说明数据确实由itcast04同步到itcast05上了!!如下图所示。

     我们再到itcast06的zookeeper客户端上查看数据是否同步过去了,方法同在itcast05上一样,经检查,发现也同步过去了!!!说明我们的zookeeper集群没有问题,成功喽!

     至此,我们本小节课便一起学习完了,下节课我们一起学习Hadoop集群的搭建!! 

猜你喜欢

转载自blog.csdn.net/anaitudou/article/details/80390860
今日推荐