Marco's Java【Zookeeper入门(一) 之 初识 "动物园管理员"】

前言

随着互联网技术的发展,企业对计算机系统的计算,存储能力要求越来越高,各大IT企业都在追求高并发,海量存储的极致,在这样的背景下,单纯依靠少量高性能单机来完成计算机,云计算的任务已经无法满足需求了,企业的IT架构逐渐由集中式往分布式过渡。
其实到目前为止,大家应该对分布式不陌生了吧,从Nginx到Docker再到Redis,无不渗透着分布式的理念,简单来说分布式就是将一个计算任务分解成若干,并委派给不同的计算机去执行,然后将最终的计算汇总。通过这种横向扩展的方式,解决了数据量过大导致单个计算机无法承载的问题。
而今天咱们讲的Zookeeper也是处理分布式的成员之一,那么Zookeeper到底是什么?在分布式集群中主要的职责是什么呢?大家接着往下看吧~

Zookeeper概述

Zookeeper 最早起源于雅虎研究院的一个研究小组。在当时,研究人员发现,在雅虎内部很多大型系统基本都需要依赖一个类似的系统来进行分布式协调,但是这些系统往往都存在分布式单点问题。所以,雅虎的开发人员就试图开发一个通用的无单点问题的分布式协调框架,以便让开发人员将精力集中在处理业务逻辑上。

大家看ZooKeeper这个名字,就是 “动物园管理员” 的意思,真的是一次见到以人物卡通作为Logo的框架啦,哈哈,市面上绝大多数框架要么是动物,要么是植物,杂乱无章难以管理… 所以就委派动物园园长(Zookeeper)出面解决,建设更加和谐的动物园…

以上内容纯属扯淡,其实关于ZooKeeper这个项目名字的由来,也有一段趣闻。在立项初期,考虑到之前内部很多项目都是使用动物的名字来命名的(例如著名的Pig项目),雅虎的工程师希望给这个项目也取一个动物的名字。时任研究院的首席科学家 RaghuRamakrishnan 开玩笑地说:“在这样下去,我们这儿就变成动物园了!”此话一出,大家纷纷表示就叫动物园管理员吧一一一因为各个以动物命名的分布式组件放在一起,雅虎的整个分布式系统看上去就像一个大型的动物园了,而 Zookeeper 正好要用来进行分布式环境的协调一一于是,Zookeeper 的名字也就由此诞生了。(PS:本段内容摘自《从Paxos到Zookeeper 》)

说了这么多,咱们来看看官方是怎么介绍Zookeeper的吧~

在这里插入图片描述
ZooKeeper 是一种源代码开放的分布式协调服务,是一个高性能的分布式数据一致性的解决方案,用于维护配置信息,命名,提供分布式同步和提供组服务。它将那些复杂的,容易出错的分布式一致性服务封装起来。用户可以通过调用Zookeeper提供的接口来解决一些分布式应用中的实际问题。所有这些类型的服务都以分布式应用程序的某种形式使用。每次实施它们都需要做很多工作来修复不可避免的错误和竞争条件。由于难以实现这些类型的服务,应用程序通常会略过它们,这使得它们在变化的情况下变得脆弱并且难以管理。即使正确完成,这些服务的不同实现也会在部署应用程序时导致管理复杂性。

不得不说官方的解释一般都很难懂… 但是确实最标准的答案。那我们怎么去理解呢?其实说白了,Zookeeper就是一个文件系统,并配套了监听通知设备。所以要搞清楚Zookeeper是什么,以及它的概念,首先要搞清楚它里面的文件系统和监听通知设备是啥?


文件系统

每个子目录项如 NameService 都被称作为 znode(目录节点),和文件系统一样,我们能够自由的增加、删除znode,在一个znode下增加、删除子znode,唯一的不同在于znode是可以存储数据的。
在这里插入图片描述

四种类型的znode
节点名称中文对照作用
PERSISTENT持久化目录节点客户端与zookeeper断开连接后,该节点依旧存在
PERSISTENT_SEQUENTIAL持久化顺序编号目录节点客户端与zookeeper断开连接后,该节点依旧存在,只是Zookeeper给该节点名称进行顺序编号
EPHEMERAL临时目录节点客户端与zookeeper断开连接后,该节点被删除
EPHEMERAL_SEQUENTIAL临时顺序编号目录节点客户端与zookeeper断开连接后,该节点被删除,只是Zookeeper给该节点名称进行顺序编号

监听机制

客户端注册监听它关心的目录节点,当目录节点发生变化(数据改变、被删除、子目录节点增加删除)时,zookeeper会通知客户端。
在这里插入图片描述
如我们开头所讲的zookeeper可以实现诸如分布式应用配置管理、统一命名服务、状态同步服务、集群管理等功能,我们这里拿比较简单的分布式应用配置管理为例来说明。

假设我们的程序是分布式部署在多台机器上,如果我们要改变程序的配置文件,需要逐台机器去修改,这样做相当麻烦对吧?但是现在我将这些配置文件全部放到zookeeper上去,并保存在 zookeeper 的某个目录节点中,
然后所有相关应用程序对这个目录节点进行监听,一旦配置信息发生变化,每个应用程序就会收到 zookeeper 的通知,然后从 zookeeper 获取新的配置信息应用到系统中。
简单来讲zookeeper就是站在上帝视角,从天边观察世间万物的动向,并适当得对自然界进行调整,从而实现自然界得平衡。这其实也是Java的经典设计模式之一的观察者模式极为具体的体现。

ZooKeeper的安装

好啦,接下来进入实操阶段,我这里会分别在Windows和Linux下安装ZooKeeper并运行

系统要求

当然,如果要安装ZooKeeper,首先得过系统这关,ZooKeeper可以运行在多种系统平台上面,以下表格展示了ZooKeeper所支持的系统平台,以及在该平台上是否支持开发环境或者生产环境。

系统开发环境生产环境
Linux支持支持
Solaris支持支持
FreeBSD支持支持
Windows支持不支持
MacOS支持不支持

一般在开发中,建议使用Linux,当然你要是坚持使用其他的,我也不拦着你,哈哈。因为ZooKeeper是用Java编写的,需要运行在Java环境上,因此在部署ZooKeeper的机器上需要安装Java运行环境。为了正常运行ZooKeeper,我们需要使用JRE1.6或者以上的版本。
如果想在集群模式下的ZooKeeper部署,那最少得使用3个ZooKeeper服务进程,并且不同的服务进程建议部署在不同的物理机器上面,以减少机器宕机带来的风险,从而实现ZooKeeper集群的高可用。 其实ZooKeeper对于机器的硬件配置没有太大的要求,比如说在Zookeeper的 “老窝” 在Yahoo!内部,部署ZooKeeper的机器配置通常是双核处理器,2GB内存,80GB硬盘… (相当普通了…)。

ZooKeeper下载

虽然我们的下载方式有很多,比如说在官网下载,或者在Linux上使用wget下载,或者在docker里使用镜像下载。这里我就直接在官网上下载好了,因为需要演示在Windows上运行的效果。
官方下载地址:ZooKeeper Download


Windows环境下运行ZooKeeper

首先我们将之前已经下载好的ZooKeeper解压
在这里插入图片描述
接着修改文件夹的conf目录下的zoo_sample.cfgzoo.cfg
在这里插入图片描述
然后咱们进到zookeeper-3.4.14\bin目录下可以看到如下指令,zkCli为客户端,zkServer为服务端
在这里插入图片描述
注意,cmd文件是Windows环境下的二进制运行文件,所以我们分别点击zkServer.cmdzkCli.cmd就可以啦!以下是运行成功之后的界面。
Server:
在这里插入图片描述
Client:
在这里插入图片描述

Linux环境下运行ZooKeeper
配置java环境变量

下载请戳 Linux JDK Download ,记得下载后缀为tar.gz的包哦!

第一步:下载linux版本JDK
在这里插入图片描述
在这里插入图片描述
第二步:使用XFTP传到Linux并解压
接着我们在Linux下的下创建/download目录,并借助XFTP将文件传到此目录
然后使用以下指令将文件解压到usr/local/java

tar -zxvf jdk-8u181-linux-x64.tar.gz -C /usr/local/java/

第三步:配置环境变量
通过vi /etc/profile指令在最后添加以下配置,这里的JAVA_HOME和Window是一样的,也就是jdk中存放bin(可执行文件)子目录的根路径,下面的写法就是固定的了。

JAVA_HOME=/usr/local/java/jdk1.8.0_181
PATH=$JAVA_HOME/bin:$PATH
CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
export JAVA_HOME
export PATH
export CLASSPATH

注意配置完成之后要使用source /etc/profile刷新/etc/profile配置文件

第五步:测试
输入java -version,测试,如果jdk安装配置成功之后,会得到如下结果
在这里插入图片描述

解压文件并修改配置文件

首先将文件解压到/usr/local下,然后将文件夹改个好记的名字zookeeper

#解压到/usr/local下面
tar -zxvf zookeeper-3.4.14.tar.gz -C /usr/local
#进入目录
cd /usr/local/
#修改文件夹名称
mv zookeeper-3.4.14/ zookeeper

接着咱们来修改配置文件,再次强调一下zoo_sample.cfg一定得修改为zoo.cfg,因为zookeeper的底层默认读取的配置文件名称为zoo.cfg

#打开zookepper的配置文件目录
cd /usr/local/zookeeper/conf
#修改zoo_sample.cfg 为zoo.cfg [记得一定要改!否则无法运行]
mv zoo_sample.cfg  zoo.cfg
#编辑zoo.cfg
vim zoo.cfg

配置文件中主要需要修改的是dataDir数据存储路径,我这里是通过mkdir -p /root/myzk/data的方式自定义了一个存储数据的目录。
在这里插入图片描述

启动及关闭Zookeeper连接

使用cd /usr/local/zookeeper/bin进入zookeeper下面的bin目录,可以看到如下指令,zkCli和zkServer刚才在Windows环境下我们已经介绍过了,那么其他的命令是做什么的呢?我们一起来看下吧!
在这里插入图片描述

指令解释
zkCleanup清理Zookeeper的历史数据,包括事务日志文件和快照数据文件
zkCliZookeeper的简单客户端
zkEnv设置Zookeeper的环境变量
zkServerZookeeper服务的启动、停止和重启脚本
#启动
./zkServer.sh start
#停止
./zkServer.sh stop

以上为启停命令,启动之后,我们再来看Zookeeper的运行状态,显示正在运行中,standalone(独立的)代表是单机版。自己一个人玩可以,但是挂了就结束了,不符合高可用的特点,后面我们一般使用集群,采用团战的战略,当 一台主机挂了,还有 “队友” 在背后支撑!
在这里插入图片描述
本节呢就讲到这儿,下一节针对于Zookeeper的常规操作命令会详细讲到。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值