大数据场景下的Zookeeper集群的搭建

本篇文件将介绍如何搭建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

  • 14
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

星星妳睡了吗

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值