本篇文件将介绍如何搭建zookeeper集群,并集合大数据相关组件介绍zookeeper的功能
一、Zookeeper是做什么的,我们搭建它有什么用处
Zookeeper是一个分布式的服务管理框架,它负责存储和 管理大家都关心的数据,基于观察者设计模式,Zookeeper接受观察者的注册,一旦这些数据的状态发生了变化,Zookeeper就负责 通知已经在Zookeeper上注册的那些观察者做出相应的反应。
二、大数据场景下会用到Zookeeper的组件
比如消息中间件kafka,kafka虽然已经开始弃用zookeeper,但我们仍能从中学到一些东西,kafka的broker启动后就会向zookeeper注册自身,注册后zookeeper就维护了一些数据比如/brokers/ids
这个路径下就放着broker的id号集合[1,2,3],zookeeper会协助kafka进行leader的选举以及维护集群信息。
还有常用的处理海量数据的Hbase也会使用zookeeper,Hbase的Hregionserver和Hmaster启动后就会向zookeeper注册自身,并且都会创建一个临时的ZNode节点,方便zookeeper管理它们的信息,同时hbase还存储它们的元数据信息方便客户端数据的读取,同时master会监控zookeeper中的ZNode方便分配Regions确保负载均衡
三、Zookeeper集群的搭建
(1)leader选举规则
在正式搭建集群时我们要了解,zookeeper的结构,zookeeper是有leader节点和follower节点的,对于leader和follower的选举在zookeeper启动时就因该选举出来,一个leader和多个follower
选举规则主要就是根据 (服务器总数 + 服务器的状态 + 投票数决定的)
集群启动时肯定是有顺序的,首先第一台机器启动立马就会给自己投票1票,并判断票数是不是大于**服务器总数一半以上,比如有5台机器 ,**1票不够半数以上,自己就保持looking状态 并且票数清除,等服务器2启动时,1和2都为自己投一票,1发现2的myid(后续配置)大于自身,把自己的票给服务器2,服务器2有2票还是没有半数以上,两者都looking状态,等服务器3来了,重复操作,服务器3就有3票达到半数以上,服务器3就称为leader,并且服务器1,2改为followeing状态,后续服务器启动,following状态的服务器不会将自己的票投给他们,所以服务器3就是最终的leader
(2)zookeeper集群搭建
1.首先我们搭建一般选择奇数台服务器,这样方便选举leader,我们使用3台服务器
2.上传Zookeeper的安装包到hadoop102服务器上,并压缩
-C 指定目标路径
tar -zxvf /opt/software/ apache-zookeeper-3.5.7-bin.tar.gz -C /opt/module
3.将/opt/module下的zookeeper分发到hadoop103、hadoop104
** xsync是shell脚本,脚本相关内容放到内容最后**
xsync zookeeper-3.5.7
4.分发完毕后就可以开始修改配置了
首先 cd conf 目录下 执行 mv zoo_sample.cfg zoo.cfg
5.编辑zoo.cfg
dataDir是存储zk的快照文件的地方,方便后续恢复数据
cluster是指定zookeeper集群使用的表示3台服务器
2888端口是zk集群内部的端口是leader和follower之间数据同步等操作使用的端口
3888端口是zk服务器之间选举leader使用的端口
#修改数据存储路径配置
dataDir=/opt/module/zookeeper-3.5.7/zkData
#增加如下配置
#######################cluster##########################
server.2=hadoop102:2888:3888
server.3=hadoop103:2888:3888
server.4=hadoop104:2888:3888
6.同步zoo.conf
xsync zoo.conf
7.在zkData下创建myid文件,这是为了选举leader对比使用的
myid中的内容就是数字并且一定要和zoo.cfg中配置的一样
比如我们配置的server.2=hadoop102:2888:3888
那么我们hadoop102的myid中内容就是2
hadoop103和hadoop104分别是3和4
8.启动zookeeper
bin/zkServer.sh start
9.不想使用bin/ 就配置环境遍历
export ZK_HOME=/opt/module/zookeeper-3.5.7
export PATH=$PATH:$HIVE_HOME/bin
四、相关脚本
xsync同步脚本
#!/bin/bash
#1 获取输入参数个数,如果没有参数,直接退出
pcount=$#
if [ $pcount -lt 1 ]
then
echo Not Enough Arguement!
exit;
fi
#2. 遍历集群所有机器
# 也可以采用:
# for host in hadoop{102..104};
for host in hadoop102 hadoop103 hadoop104
do
echo ==================== $host ====================
#3. 遍历所有目录,挨个发送
for file in $@
do
#4 判断文件是否存在
if [ -e $file ]
then
#5. 获取父目录
pdir=$(cd -P $(dirname $file); pwd)
echo pdir=$pdir
#6. 获取当前文件的名称
fname=$(basename $file)
echo fname=$fname
#7. 通过ssh执行命令:在$host主机上递归创建文件夹(如果存在该文件夹)
ssh $host "mkdir -p $pdir"
#8. 远程同步文件至$host主机的$USER用户的$pdir文件夹下
rsync -av $pdir/$fname $USER@$host:$pdir
else
echo $file does not exists!
fi
done
done
zookeeper集群并起脚本
#!/bin/bash
case $1 in
"start"){
for i in hadoop102 hadoop103 hadoop104
do
echo ---------- zookeeper $i 启动 ------------
ssh $i "/opt/module/zookeeper-3.5.7/bin/zkServer.sh start"
done
};;
"stop"){
for i in hadoop102 hadoop103 hadoop104
do
echo ---------- zookeeper $i 停止 ------------
ssh $i "/opt/module/zookeeper-3.5.7/bin/zkServer.sh stop"
done
};;
"status"){
for i in hadoop102 hadoop103 hadoop104
do
echo ---------- zookeeper $i 状态 ------------
ssh $i "/opt/module/zookeeper-3.5.7/bin/zkServer.sh status"
done
};;
esac
版权归原作者 星星妳睡了吗 所有, 如有侵权,请联系我们删除。