ZooKeeper 安装与部署

1.1认识Zookeeper

介绍Zookeeper前,看下面这个图:

ZooKeeper 安装与部署_第1张图片

在这张图片里,我们可以看到Hadoop是一只大象,HIVE是一只蜜蜂,Bigtop是马戏团,Pig是一只猪,HAMA是一只河马…只有Zookeeper是一个拿着铁锹的人,我们可以将Zookeeper理解为动物园的管理员…它负责管理动物园中的动物,如果某个动物出现了问题,它就会第一时间知道并进行处理。此时再用官方的解释来说,Zookeeper是一个开源的分布式的、为分布式应用提供服务的Apache项目。好了,这就是Zookeeper,是不是很好理解。

1.2 zookeeper工作机制

它既然是一个管理员,那么它就需要知道自己管辖范围内的各种情况,如果有问题就及时处理;我们从设计模式的角度来理解:zookeeper是一个基于观察者模式设计的分布式服务管理框架;它负责存储和管理大家都关心的数据,然后接收观察者的注册、一旦这些数据发送了变化,zookeeper就将负责通知已经在zookeeper上注册的那些观察者做出相应的反应。

1.3集群结构

类似其他分布式工具,Zookeeper是支持复制的,由一系列的Server组成,Client与Server相连以获取相关的服务。

在这里插入图片描述

ZooKeeper 安装与部署_第2张图片

集群结构说明:

集群数量为奇数,并且超过N+1台,只要集群中大多数节点都处于可用状态,那么集群就是可用的,集群中的服务器角色有:

1)领导者:复杂投票的发起和决议,并更新系统状态

2)学习者:包括跟随者和观察者,从Leader处获取最新的系统状态

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

4)Observer观察者可以接受客户端请求,将写请求转发给Leader,但是不参与投票,只同步状态。它的目的是为了扩展系统,以提高读取速度。

集群中由一个Leader节点和N个Follower节点组成,所有的Server之间能彼此通信,并且在各自内存中维护了状态图,与之一致的事务日志和快照位于持久化存储中。这一点类似Redis的Sentinel模式,它们都具有高度的自治能力,一旦Leader节点不可达,则自动完成新Leader的选举并恢复服务。

1.4 Zookeeper的数据结构

Zookeeper的数据模型结构与我们学习的Unix文件系统类似,只不过它是由节点组成,Unix是由文件组成,Zookeeper的每一个节点称作ZNode,每个节点可以存储1M的数据,看起来它很小,其实很大了,因为它只会存储关键的数据,通常情况下,每个节点ZNode中只存储的xxkb的数据。每个ZNode都可以通过路径做唯一的标识

ZooKeeper 安装与部署_第3张图片

2.1安装Zookeeper

在 Apache 下载 Zookeeper 软件包,(我们的平台已经安装了Zookeeper组件,我们可以跳过这步,想自己安装的小伙伴可以输入以下命令尝试一下):

​
wgat https://archive.apache.org/dist/zookeeper/zookeeper-3.4.6/zookeeper-3.4.6.tar.gz

tar -zxvf zookeeper-3.4.6.tar.gz   

​

2.2本地模式部署

2.2.1 配置环境变量

vim /etc/profile   打开环境变量配置文件



export ZOOKEEPER_HOME=/usr/cstor/zookeeper

export PATH=$PATH:$ZOOKEEPER_HOME/bin

ZooKeeper 安装与部署_第4张图片

修改完成后,我们输入以下命令激活我们修改的环境变量

source /etc/profile

2.2.2配置修改

进入到Zookeeper根目录下的下conf文件中复制zoo_sample.cfg并命名为zoo.cfg

cd /usr/cstor/zookeeper/

cd conf/

ls

cp zoo_sample.cfg zoo.cfg

ls

ZooKeeper 安装与部署_第5张图片

修改zoo.cfg文件

vim zoo.cfg



dataDir=/usr/cstor/zookeeper/data

dataLogDir=/usr/cstor/zookeeper/log

ZooKeeper 安装与部署_第6张图片

Zookeeper中的配置文件zoo.cfg中参数含义解读如下:

tickTime =2000:通信心跳数,Zookeeper服务器与客户端心跳时间,单位毫秒

Zookeeper使用的基本时间,服务器之间或客户端与服务器之间维持心跳的时间间隔,也就是每个tickTime时间就会发送一个心跳,时间单位为毫秒。它用于心跳机制,并且设置最小的session超时时间为两倍心跳时间。(session的最小超时时间是2*tickTime)

initLimit =10:LF初始通信时限

集群中的Follower跟随者服务器与Leader领导者服务器之间初始连接时能容忍的最多心跳数(tickTime的数量),用它来限定集群中的Zookeeper服务器连接到Leader的时限。

syncLimit =5:LF同步通信时限

集群中Leader与Follower之间的最大响应时间单位,假如响应超过syncLimit * tickTime,Leader认为Follwer死掉,从服务器列表中删除Follwer。

dataDir:数据文件目录+数据持久化路径

主要用于保存Zookeeper中的数据。

clientPort =2181:客户端连接端口

监听客户端连接的端口

回到zookeeper根目中创建data、log(因为datadir、dataLogDir指向它)

cd ../

mkdir data

mkdir log

2.2.3测试是否安装成功

/bin/zkServer.sh start|stop|status|restart

# 启动zookeeper服务 :

ZooKeeper 安装与部署_第7张图片

启动成功。

2.2.4 测试Zookeeper客户端

/bin/zkCli.sh          #启动客户端

quit                 #退出客户端

ZooKeeper 安装与部署_第8张图片

 

 本地模式部署完成。

2.3 集群模式部署

2.3.1部署前的准备

(1)、首先,集群模式要在前面本地模式没有问题并且三个节点都成功的情况下进行

(2)、然后我们需要先把先把zookeeper服务停掉

bin/zkServer.sh stop

ZooKeeper 安装与部署_第9张图片

log和data中的数据全部删除

ZooKeeper 安装与部署_第10张图片

2.3.2创建myid文件

分别在三个节点(master、slave1、slave2)在zookeeper/data中创建myid文件。并在文件中写一个数值,类似我们Hadoop集群时的hostname。该值代表zookeeper节点Id。注意:该值在整个集群中是唯一的。

cd ../

cd data/

vim myid



master 的myid内容为1

slave1 的myid内容为2

slave2 的myid内容为3

ZooKeeper 安装与部署_第11张图片

slave1、slave2操作如上。

2.3.3修改配置文件zoo.cfg

vim conf/zoo.cfg



# The number of milliseconds of each tick

tickTime=2000

# The number of ticks that the initial

# synchronization phase can take

initLimit=10

# The number of ticks that can pass between

# sending a request and getting an acknowledgement

syncLimit=5

# the port at which the clients will connect

clientPort=2181

# the directory where the snapshot is stored.

dataDir=/usr/cstor/zookeeper/data

dataLogDir=/usr/cstor/zookeeper/log

server.1=master:2888:3888

server.2=slave1:2888:3888

server.3=slave2:2888:3888

ZooKeeper 安装与部署_第12张图片

将修改好的zoo.cfg文件分发到slave1和slave2节点上

scp -r conf/zoo.cfg slave1:/usr/cstor/zookeeper/conf/



scp -r conf/zoo.cfg slave2:/usr/cstor/zookeeper/conf/

2.3.4启动Zookeeper集群

分别在三个节点进入bin目录,启动ZooKeeper服务进程:

cd /usr/cstor/zookeeper/bin



./zkServer.sh start

master:

ZooKeeper 安装与部署_第13张图片

slave1:

ZooKeeper 安装与部署_第14张图片

slave2:

2.3.5查看状态信息

在各机器上依次执行脚本,查看ZooKeeper状态信息

./zkServer.sh status

master:

slave1:

slave2:

2.3.6启动zkCli客户端

./zkCli.sh -server master:2181,slave1:2181,slave2:2181

ZooKeeper 安装与部署_第15张图片

ZooKeeper 安装与部署_第16张图片

你可能感兴趣的:(ZooKeeper,zookeeper,分布式,java)