Zookeeper是一个分布式、开源的分布式应用程序协调服务,是Google的Chubby的开源实现,也是和Hadoop、Hbase相互配合的重要组件,作用就是为分布式应用程序提供一致性服务,包括配置维护、名字服务、分布式同步等

  接下来在之前配置好hadoop集群环境的3台虚拟机上配置zookeeper集群,配置zookeeper集群之前和hadoop一样,都要配置各主机之间可以正常通信,包括:主机名修改、hosts映射、开放端口或者关闭防火墙这些,配置和hadoop之前的准备工作完全一样,这里就不细说了

 

  然后点击下方的download超链接,再次点击下面另一个download超链接就进入镜像选取页面,进行下载即可


  

测试zookeeper集群是否正常_测试zookeeper集群是否正常

  这里下载的版本是:zookeeper-3.4.6,下载成功之后,上传到其中一台主机的指定目录下,这里三台主机是:hadoopha、hadoop1、hadoop2,这里上传到hadoopha下

  在/usr/下新建目录zookeeper:mkdir /usr/zookeeper

  然后zookeeper安装包并放到新建好的目录下:



$ tar -xvzf zookeeper-3.4.6.tar.gz
$ mv zookeeper-3.4.6/ /usr/zookeeper/



  然后在指定位置创建数据目录和日志目录,这个自己定义:



$ mkdir /usr/zookeeper/zookeeper
$ mkdir /usr/zookeeper/zookeeper/log



  然后在数据目录下创建myid文件,并写入ID:



echo 1 > /usr/zookeeper/zookeeper/myid



这个myid文件内容是集群中各个节点的标识,必须是数字,到后续应该对每台机器依次修改

  然后进入zookeeper的安装目录下的conf目录执行如下操作编辑配置文件:



cd /usr/zookeeper/zookeeper-3.4.6/conf && mv zoo_sample.cfg zoo.cfg && vim zoo.cfg



  数据目录去掉注释修改配置如下:

dataDir=/usr/zookeeper/zookeeper

  追加一行事务日志目录配置:

dataLogDir=/usr/zookeeper/zookeeper/log

  保留文件数目配置,默认为3:

autopurge.snapRetainCount=3

  添加一行清理频率的配置,单位是小时,默认为0,表示不会自动清理,应该根据需要配置一个>=1的整数,这里配置为1:

autopurge.purgeInterval=1

  在最后添加如下配置:

server.1=hadoopha:2888:3888
  server.2=hadoop1:2888:3888
  server.3=hadoop2:2888:3888

  这个定义了每个主机对应的节点,server.x,x数值应和myid保持一致,当zookeeper启动时会读取myid文件和zoo.cfg配置信息,然后确定唯一的节点

  后面的端口号是集群中Leader和Follower之间进行通信的端口,一般不用修改,保存即可

  然后把配置好的整个目录发送到另外两台主机,实现文件同步:



$ scp -r /usr/zookeeper/ hadoop1:/usr/
$ scp -r /usr/zookeeper/ hadoop2:/usr/



  复制完成之后,修改另外两台机器的myid文件分别是:hadoop1->2,hadoop2->3

  现在都配置完毕了,接下来在3台主机上依次运行bin/zkServer.sh start启动Zookeeper服务,一定是每台主机都要启动

  启动流程是:系统首先会选取Leader,充当Leader的这台机器相当于领导者,负责进行投票的发起和决议,更新系统状态;然后会进行同步数据,通过配置好的端口进行;最后进入工作流程。

  启动成功之后,可以通过命令jps查看执行进程

  

测试zookeeper集群是否正常_测试zookeeper集群是否正常_02

  如果有QuorumPeerMain这个进程则代表启动成功

  可以通过:bin/zkServer.sh status查看各节点角色

  

测试zookeeper集群是否正常_hadoop_03

  此时,hadoop1为leader节点,其他的节点均为follower,这个结果是选举出来的

  可以通过命令:bin/zkServer.sh stop来停止zookeeper服务

  接下来可以测试一下服务的故障转移是否好用:

  在hadoop1节点中杀死leader服务进程:

  

测试zookeeper集群是否正常_大数据_04

  可以看出进程确实不存在了,然后在剩余两个节点分别执行:bin/zkServer.sh status,可以发现hadoop3由follower节点变为leader节点,说明故障进行了转移,zookeeper集群是可用的