0


大数据场景下的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

本文转载自: https://blog.csdn.net/j218255/article/details/140872174
版权归原作者 星星妳睡了吗 所有, 如有侵权,请联系我们删除。

“大数据场景下的Zookeeper集群的搭建”的评论:

还没有评论