目录

前言

一,Zookeeper

1,zookeeper简介

2,Zookeeper特点

3,Zookeeper结构

 4,Zookeeper应用场景

二,Zookeeper集群模式的部署

​1,上传解压

2, 修改配置文件

 3,创建所需目录

4,配置环境变量

5,分发环境

 5,修改所属用户组

6,启动


前言

在专栏的第一篇,我们学习了如何搭建一个基本的hadoop集群,在本篇中,我们接着学习hadoop平台的Zookeeper组件。

一,Zookeeper

1,zookeeper简介

Zookeeper是一个开源的分布式的,为分布式应用提供协调服务的Apache项目。

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

Zookeeper=文件系统+通知机制

2,Zookeeper特点

Zookeeper:一个领导者(leader),多个跟随者(follower)组成的集群。

Leader负责进行投票的发起和决议,更新系统状态

Follower用于接收客户请求并向客户端返回结果,在选举Leader过程中参与投票

集群中只要有半数以上节点存活,Zookeeper集群就能正常服务。

全局数据一致:每个server保存一份相同的数据副本,client无论连接到哪个server,数据都

是一致的。

更新请求顺序进行,来自同一个client的更新请求按其发送顺序依次执行。

数据更新原子性,一次数据更新要么成功,要么失败。

实时性,在一定时间范围内,client能读到最新数据。

3,Zookeeper结构

ZooKeeper数据模型的结构与Unix文件系统很类似,整体上可以看作是一棵树,每个节点称做一个ZNode。

 很显然zookeeper集群自身维护了一套数据结构。这个存储结构是一个树形结构,其上的每一个节点,我们称之为"znode",每一个znode默认能够存储1MB的数据,每个ZNode都可以通过其路径唯一标识,如图所示

 4,Zookeeper应用场景

提供的服务包括:分布式消息同步和协调机制、服务器节点动态上下线、统一配置管理、负载均衡、集群管理等。

二,Zookeeper集群模式的部署

1,上传解压

tar -zxvf /opt/software/zookeeper-3.4.8.tar.gz -C /opt/local/src/

改名

mv /opt/local/src/zookeeper-3.4.8/ /opt/local/src/zookeeper

2, 修改配置文件

Zookeeper的配置文件放置在conf下,提供zoo_sample.cfg样例,可重命名zoo.cfg后在此基础上修改。

cd /opt/local/src/zookeeper/conf/
copy zoo_sample.cfg /opt/local/src/zookeeper/conf/zoo.cfg
vi /opt/local/src/zookeeper/conf/zoo.cfg

完整配置内容如下:

tickTime=2000
initLimit=10
syncLimit=5
clientPort=2181
dataDir=/opt/local/src/zookeeper/data
dataLogDir=/opt/local/src/zookeeper/logs
server.1=master:2888:3888
server.2=slave1:2888:3888
server.3=slave2:2888:3888

tickTime:心跳时间,单位为毫秒,Leader服务器与Follower服务器连接超时时长。

initLimit:Leader服务器与Follower服务器连接初始化的心跳数。即超过10个心跳后Follower服务器没有接收到Leader服务器,则认为连接失败。与tickTime共同使用,每次心跳时间为2000毫秒,10*2000=20秒为连接超时时长。

syncLimit:Leader服务器与Follower服务器相互之间传输信息时能够等待的最大心跳时间,与tickTime共同使用。

clientPort:连接ZooKeeper的访问端口。

dataDir,dataLogDir:ZooKeeper的数据存储与日志存储目录。

 3,创建所需目录

mkdir -p /opt/local/src/zookeeper/data
mkdir -p /opt/local/src/zookeeper/logs

除了修改 zoo.cfg 配置文件,集群模式下还要配置一个文件 myid,这个文件在 dataDir 目录下。

vi /opt/local/src/zookeeper/data/myid

vi新建文件,并写入数据。以master节点为例,文件中只写入一个数字:1。ZooKeeper读取这个文件,拿到里面的数据与 zoo.cfg 里面的配置信息比较从而判断到底是那个 server。即为server.1=master:2888:3888中的server.X。本实验在master节点下配置,则为:1。

4,配置环境变量

vi /etc/profile

添加如下配置:

#zookeeper environment
export ZK_HOME=/opt/local/src/zookeeper
export PATH=$PATH:$ZK_HOME/bin

保存并退出 

5,分发环境

将master主节点已经配置好ZooKeepr文件分发给集群从节点。

scp -r /opt/local/src/zookeeper  root@slave1:/opt/local/src/
scp -r /opt/local/src/zookeeper  root@slave2:/opt/local/src/
scp /etc/profile root@slave1:/etc/
scp /etc/profile root@slave2:/etc/

    此时需要注意的是,在分发的从节点上需要对每一个myid文件进行修改,如slave1从节点修改为:2。与zoo.cfg配置文件相对应。

vi /opt/local/src/zookeeper/data/myid

vi /opt/local/src/zookeeper/data/myid

 5,修改所属用户组

[root@master ~]# chown -R hadoop:hadoop /opt/local/src/zookeeper

[root@slave1 ~] # chown -R hadoop:hadoop /opt/local/src/zookeeper

[root@slave2 ~] # chown -R hadoop:hadoop /opt/local/src/zookeeper

6,启动

关闭防火墙

[root@master ~]# systemctl stop firewalld.service

[root@slave1 ~]# systemctl stop firewalld.service

[root@slave2 ~]# systemctl stop firewalld.service

关闭防火墙自启

[root@master ~]# systemctl disable firewalld.service

Removed symlink /etc/systemd/system/multi-user.target.wants/firewalld.service.

Removed symlink /etc/systemd/system/dbus-org.fedoraproject.FirewallD1.service.

[root@slave1 ~]# systemctl disable firewalld.service

Removed symlink /etc/systemd/system/multi-user.target.wants/firewalld.service.

Removed symlink /etc/systemd/system/dbus-org.fedoraproject.FirewallD1.service.

[root@slave2 ~]# systemctl disable firewalld.service

Removed symlink /etc/systemd/system/multi-user.target.wants/firewalld.service.

Removed symlink /etc/systemd/system/dbus-org.fedoraproject.FirewallD1.service.

加载环境变量 

su - hadoop
source /etc/profile

启动 

./zkServer.sh start

启动完毕后可通过以下命令查询Leader节点与Follower节点。本实验经过内部选举slave1为Leader节点。

[hadoop@master ~]$ ./zkServer.sh status

[root@slave1 ~]# su - hadoop

[hadoop@slave1 ~]$ source /etc/profile

[hadoop@slave1 ~]$ ./zkServer.sh start

[hadoop@slave1 ~]$ ./zkServer.sh status

[root@slave2 ~]# su - hadoop

[hadoop@slave2 ~]$ source /etc/profile

[hadoop@slave2 ~]$ ./zkServer.sh start

[hadoop@slave2 ~]$ ./zkServer.sh status

Logo

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

更多推荐