Zookeeper是一个分布式、开源的分布式应用程序协调服务,是Google的Chubby的开源实现,也是和Hadoop、Hbase相互配合的重要组件,作用就是为分布式应用程序提供一致性服务,包括配置维护、名字服务、分布式同步等
接下来在之前配置好hadoop集群环境的3台虚拟机上配置zookeeper集群,配置zookeeper集群之前和hadoop一样,都要配置各主机之间可以正常通信,包括:主机名修改、hosts映射、开放端口或者关闭防火墙这些,配置和hadoop之前的准备工作完全一样,这里就不细说了
首先去apache官网下载zookeeper,首页网址是:http://zookeeper.apache.org/
然后点击下方的download超链接,再次点击下面另一个download超链接就进入镜像选取页面,进行下载即可
地址是:http://www.apache.org/dyn/closer.cgi/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查看执行进程
如果有QuorumPeerMain这个进程则代表启动成功
可以通过:bin/zkServer.sh status查看各节点角色
此时,hadoop1为leader节点,其他的节点均为follower,这个结果是选举出来的
可以通过命令:bin/zkServer.sh stop来停止zookeeper服务
接下来可以测试一下服务的故障转移是否好用:
在hadoop1节点中杀死leader服务进程:
可以看出进程确实不存在了,然后在剩余两个节点分别执行:bin/zkServer.sh status,可以发现hadoop3由follower节点变为leader节点,说明故障进行了转移,zookeeper集群是可用的