目录

前言:

一   zookeeper概述

        1.1   zookeeper的工作机制:

        1.2   zookeeper的特点

        1.3   zookeeper内部的数据结构

        1.4   zookeeper满足的应用场景

二   zookeeper的部署

        2.1   安装准备

        2.2   单节点部署

2.3   zookeeper集群部署

三    集群测试

四      群起集群启动停止脚本


前言:

        hadoop生态圈中组件众多,在我们生产与学习中。不同服务之间的协调·过于繁琐,于是zookeeper应运而生,Zookeeper 是一个开源的分布式的,为分布式框架提供协调服务的 Apache 项目。本文将详细介绍zookeeper的特性、优点与部署等方面问题。

一   zookeeper概述

        1.1   zookeeper的工作机制:

        Zookeeper从设计模式角度来理解是一个 基于观察者模式设计的分布式服务管理框架 ,它 负责存储和管理大家都关心的数据, 然后 接受观察者的注册 ,一旦这些数据的状态发生变化,Zookeeper 就将 负责通知已经在Zookeeper上注册的那些观察者 做出相应的操作。

        1.2   zookeeper的特点

1、zookeeper是有一个领导者(Leader),多个跟随者(Follower)组成的集群
2、当集群只要有半数以上的节点存活,zookeeper集群就能够正常服务。(因此一般zookeeper集群都设置奇数台服务器)。
3、zookeeper中全局数据相同,每一个服务器都保存一份相同的副本节点。因此当客户端连接到哪一个服务器,所获得的数据都是一样的。
4、更新请求按顺序执行,等价于yarn中的=FIFO调度器,请求按照队列执行。
5、数据更新原子性,一次数据更新要么成功,要么失败。
6、实时性,在一定时间范围内,客户端可以读取到最新的数据。

        1.3   zookeeper内部的数据结构

        ZooKeeper 数据模型的结构与 Unix 文件系统很类似 ,整体上可以看作是一棵树,每个节点称做一个ZNode 。每一个 ZNode 默认能够存储 1MB 的数据,每个 ZNode 都可以 通过其路径唯一标识。

        1.4   zookeeper满足的应用场景

        zookeeper可以提供的服务包括:统一命名服务、统一配置管理、统一集群管理、服务器节点动态上下 线、软负载均衡等。

二   zookeeper的部署

        2.1   安装准备

zookeeper官网下载地址:https://zookeeper.apache.org/
        虚拟机三台且均安装完JDK(未安装的同学可以看我之前的博客)

        2.2   单节点部署

首先将文件包通过第三方工具传输进虚拟机中,解压对应zookeeper安装包;
#将文件包解压至opt/moudle目录下
tar -zxvf apache-zookeeper-3.5.7-bin.tar.gz -C /opt/module/
#对解压后的文件重命名,方便后续操作
mv apache-zookeeper-3.5.7 -bin/ zookeeper-3.5.7

修改zookeeper默认配置文件,设置zookeeper数据存储路径。

#在/opt/module/zookeeper-3.5.7/这个目录上创建 zkData 文件夹
cd /opt/moudle/zookeeper-3.5.7
mkdir zkData
#将/opt/module/zookeeper-3.5.7/conf这个路径下的 zoo_sample.cfg 修改为 zoo.cfg;
cd conf/
mv zoo_sample.cfg zoo.cfg
# 修改zoo.cfg文件中的dataDir路径;
dataDir=/opt/module/zookeeper-3.5.7/zkData

配置完成后就可以通过命令启动zookeeper

cd /opt/moudle/zookeeper-3.5.7/
bin/zkServer.sh start

 通过jps命令查看是否启动成功

通过命令查看进程状态

 bin/zkServer.sh status

         这样单节点的zookeeper就已经部署成功了,但是这对于我们大数据平台的使用远远不够,我们下面在此基础上部署zookeeper集群。

2.3   zookeeper集群部署

        首先在每台虚拟机节点上进行单节点部署,然后进行以下操作。

        在/opt/module/zookeeper-3.5.7/zkData 目录下创建一个 myid 的文件
cd /opt/moudle/zookeeper-3.5.7/zkData
vi myid

        向文件中写入属于这个节点的独一id(每个id号必须是独一无二的。本文使用的是0,1,2

三台节点各自有属于自己的id号。 

设置zookeeper配置文件zoo.cfg,向其中添加以下代码

server.0=hadoop130:2888:3888
server.1=hadoop131:2888:3888
server.2=hadoop132:2888:3888

 配置参数意义

server.A=B:C:D

 A 是一个数字,表示这个是第几号服务器;(即是上面设置的myid

集群模式下配置一个文件 myid ,这个文件在 dataDir 目录下,这个文件里面有一个数据
就是 A 的值, Zookeeper 启动时读取此文件,拿到里面的数据与 zoo.cfg 里面的配置信息比
较从而判断到底是哪个 server。
B 是这个服务器的地址;( 本文设置了主机映射,未设置的可以在这里放置自己的ip地址
C 是这个服务器 Follower 与集群中的 Leader 服务器交换信息的端口;
D 是万一集群中的 Leader 服务器挂了,需要一个端口来重新进行选举,选出一个新的
Leader ,而这个端口就是用来执行选举时服务器相互通信的端口。
        在每个节点上进行一样的设置( 注意:每个节点的myid是不同且唯一的)。
这样集群的配置就完成了。下面对集群进行群起测试。

三    集群测试

        分别在三台节点上启动zookeeper
cd /opt/moudle/zookeeper-3.5.7/
bin/zkServer.sh start

        通过命令查看对应节点的zookeeper信息

bin/zkServer.sh status

我们可以看出来hadoop130与hadoop132节点状态均为follower,hadoop131节点状态为leader。

这样我们的zookeeper集群就设置完毕了。

四      群起集群启动停止脚本

        我们在使用zookeeper集群时,要对每个节点进行启动与查看,需要不断切换节点号。比较麻烦,这里将一个群起集群的脚本分享给大家。

首先在bin目录下创建zk.sh脚本,向其中添加如下代码。(注意:代码中我已经设置了hostname映射才可以使用hadoop130,hadoop131,hadoop132且设置了对应节点间ssh免密登录,不会的同学可以查看hadoop3.x系列完全分布式集群部署(虚拟机网络连接、jdk安装、hadoop安装)_杂乱无章的我的博客-CSDN博客_hadoop3 部署)

case $1 in
"start"){
        for i in hadoop130 hadoop131 hadoop132
        do
                echo ---------- zookeeper $i 启动 ------------
                ssh $i "/opt/module/zookeeper-3.5.7/bin/zkServer.sh start"
        done
};;
"stop"){
        for i in hadoop130 hadoop131 hadoop132
        do
                echo ---------- zookeeper $i 停止 ------------ 
                ssh $i "/opt/module/zookeeper-3.5.7/bin/zkServer.sh stop"
        done
};;
"status"){
        for i in hadoop130 hadoop131 hadoop132
        do
                 echo ---------- zookeeper $i 状态 ------------ 
                ssh $i "/opt/module/zookeeper-3.5.7/bin/zkServer.sh status"
        done
};;
esac

设置完成后,将文件保存后退出。

增加脚本权限

chmod u+x zk.sh

然后测试对应脚本使用。

zk.sh start

 对应脚本可传三种参数。

脚本参数
start集群启动
stop集群关闭
status集群各节点的状态

至此本文完毕,如果有什么问题可以评论区留言,也可以直接私信我。希望能帮助到大家。

Logo

为开发者提供学习成长、分享交流、生态实践、资源工具等服务,帮助开发者快速成长。

更多推荐