Apache ZooKeeper的简介与各种环境下的安装步骤

111 阅读8分钟

开启掘金成长之旅!这是我参与「掘金日新计划 · 2 月更文挑战」的第 9 天,点击查看活动详情

Apache ZooKeeper

学习目标

1、了解软件架构的演进过程

2、掌握zookeeper的安装

3、了解zookeeper的数据单元

4、掌握znode节点类型

1、软件架构演进

软件架构的发展经历了由单体架构、垂直架构、SOA架构到微服务架构的演进过程,下面我们分别了解一下这几个架构。

软件架构演进概览:

89.png

1.1单体架构

01.png 特点: all in one

①所有功能集中在一个项目中
​
②所有功能都要打成war包部署到服务器
​
③ 通过集群(session共享集群,如使用redis缓存存储session数据)来提高服务器的性能

优点: ①.项目架构简单,前期开发的成本低,周期短,小型企业首选.

缺点: ①全部的功能都集中在一个项目中完成,对于大型项目来说,开发难度高,不容易开发及扩展和维护

1.2垂直架构

02.png 架构说明:

按照业务进行切割,形成小的单体项目。

特点:
    ①.以单体架构为单位进行系统的划分,划分成一个个系统.
    ②.项目与项目之间独立开发,开发效率高.
    ③.项目是以接口调用为主(早期主要使用webservice)
优点:
    ①.项目架构简单,前期开发的成本低,周期短,小型企业首选.
    ②.垂直架构进行mvc分层设计,针对分层做相应的处理做到集群(10~1000)
    ③.不同的项目采用不同的技术实现.
    
缺点:
    ①.全部的功能都集中在一个项目中完成,对于大型项目来说,开发难度高,不容易开发及扩展和维护.
    ②.集群扩展有瓶颈
    ②.项目与项目之间存在数据冗余,耦合度高.
    ②.项目是以接口调用为主,存在数据同步问题.

1.3SOA架构

SOA全称为Service-Oriented Architecture,即面向服务的架构

它可以根据需求通过网络对松散耦合的粗粒度应用组件(服务)进行分布式部署、组合和使用。

一个服务通常以独立的形式存在于操作系统进程中。

站在功能的角度,把业务逻辑抽象成可复用的服务,通过服务的编排实现业务的快速再生,

目的:把原先固有的业务功能转变为通用的业务服务,实现业务逻辑的快速复用。

03.png 架构说明:

将重复功能或模块抽取成组件的形式,对外提供服务,在项目与服务之间使用ESB(企业服务总线)的形式作为通信的桥梁。

特点: ①.基于soa服务思想进行功能的抽取(重复代码问题解决),以服务为中心来管理项目. ②.各个系统之间要进行调用,所以出现ESB来管理项目(可以使用各种技术实现:webservice,rpc等) ③.ESB是作为系统与系统之间连接的桥梁,进行统一管理.

优点: ①.重复代码进行了抽取,提高了开发效率,提高了系统的可维护性. ②.可以针对某个系统进行扩展,做集群更容易. ③.采用ESB来管理服务组件,有利于降低企业开发项目难度

缺点: ①.系统与服务的界限模糊的,不利于设计. ②.ESB是作为系统与系统之间桥梁,没有统一标准,种类很多,不利于维护!

常见的企业服务总线:

  1. IBM WebSphere ESB
  2. Microsoft ESB
  3. JBOSS SOA Platform等等

1.4微服务架构

04.png 架构说明:

  • 将系统服务层完全独立出来,抽取为一个一个的微服务。
  • 抽取的粒度更细,遵循单一原则。
  • 采用轻量级框架协议传输。

特点:

    ①.把系统的服务层完全独立出来,有利于资源的重复利用,提高开发效率.
    ②.微服务遵守单一原则
    ③.微服务与微服务之间的调用使用restful轻量级调用.

优点:

    ①.微服务拆分更细,有利于资源的重复利用,提高开发效率
    ②.可以更加精准针对某个服务做方案
    ③.微服务去中心化,使用restful轻量级通信协议比使用ESB企业服务总线更容易维护
    ④.适应市场更容易,产品迭代周期更短.

缺点:

    微服务量多,服务治理成本高,不利于系统维护
    分布式系统架构且是微服务架构,技术成本高(容错,分布式事务等),对团队高挑战

1.5Serverless架构

82.png 为了减少运维,降低部署难度。现在越来越多的大厂在开始布局云计算战场了,目前微服务架构开发Serverless模式的有腾讯的tsf:cloud.tencent.com/product/tsf

1.6阿里淘宝架构演进之路

参考文献:mp.weixin.qq.com/s?__biz=MzU…

2.服务注册中心介绍

问题:

那么一旦采用分布式架构,服务都部署在不同的机器上,如何实现服务的通信呢?

服务和服务之间如何进行调用的?

要解决上面的问题,我们就需要使用服务中心(解决服务注册地址)+rpc通信(解决数据传输通信问题)

(我们今天讲的zookeeper可以实现服务注册中心)。

解决: 采用服务中心,服务中心可以发现服务,进行服务治理。

没有服务中心,服务之间调用

20200911103353.png

使用服务注册中心管理服务

20200911102756.png

3.zookeeper概述

3.1 zookeeper简介

官网地址:zookeeper.apache.org/

动物园管理员

ZooKeeper是一个分布式的,开放源码的分布式应用程序协调服务,是Google的Chubby一个开源的实现,是Hadoop和Hbase的重要组件。它是一个为分布式应用提供一致性服务的软件,提供的功能包括:配置维护、域名服务、分布式同步、组服务等。其由JAVA编写,支持JAVA 和C两种语言的客户端。

05.png

3.2Zookeeper常见的应用场景

1.服务注册中心

2.分布式锁

3.3 zookeeper数据存储单元znode

zookeeper中数据基本单元叫节点,即为znode。一个znode节点下面又可以包含多个子节点,最终以树的这种层级结构呈现出来。每个znode节点路径path唯一,存储自己的节点数据。

我们可以通过文件系统目录结构大致对znode结构有个初步认识:

06.png zookeeper的znode节点模型:

07.png 所以zookeeper存储的数据节点 都是以/ 开头 以树状结构进行存储数据!

并且zookeeper对所在的节点和数据 自带监控功能,可以随时监听到数据节点和存储数据的变化。

4.zookeeper下载安装

下载页面地址:zookeeper.apache.org/releases.ht…

linux环境下安装zookeeper(了解)

1:安装jdk(略)

2:把.gz文件上传到linux系统

09.png 3:解压缩文件

tar -zxvf apache-zookeeper-3.5.8-bin.tar.gz

10.png 4:文件夹重新命名

mv apache-zookeeper-3.5.8-bin /usr/local/zookeeper

11.png 5:进入zookeeper目录

cd /usr/local/zookeeper/

6:创建数据存放目录

mkdir data

7:进入conf目录

cd conf

8:将文件zoo_sample.cfg备案一份,文件名为zoo.cfg

cp zoo_sample.cfg zoo.cfg

9.修改zoo.cfg配置文件

vi zoo.cfg

修改dataDir属性为自己的目录地址:

12.png 配置说明:

# zookeeper时间配置中的基本单位 (毫秒)
tickTime=2000
# 允许follower初始化连接到leader最大时长,它表示tickTime时间倍数 即:initLimit*tickTime
initLimit=10
# 允许follower与leader数据同步最大时长,它表示tickTime时间倍数 
syncLimit=5
#zookeper 数据存储目录
dataDir=/tmp/zookeeper
#对客户端提供的端口号
clientPort=2181
#单个客户端与zookeeper最大并发连接数
#maxClientCnxns=60
# 保存的数据快照数量,之外的将会被清除
#autopurge.snapRetainCount=3
#自动触发清除任务时间间隔,小时为单位。默认为0,表示不自动清除。
#autopurge.purgeInterval=1

10.启动zookeeper服务端

先切换到zookeeper的bin目录

cd /usr/local/zookeeper/bin/

执行脚本:

./zkServer.sh start

13.png 以上就是zookeeper的安装以及启动过程。

接下来咋们用客户端连接一下:

同样在bin目录下执行:

./zkCli.sh

执行完如果出现WatchedEvent state:SyncConnected type:None path:null一直卡主住这里可以敲回车即可。

14.png zookeeper默认创建了一个名称为"zookeeper"的znode节点。

11.服务停止

./zkServer.sh stop

windows环境下安装zookeeper(教学)

1.确保jdk环境变量配置正确

2.将apache-zookeeper-3.5.8-bin.tar.gz压缩文件进行解压

解压后目录结构:

15.png 3.在安装目录下新建一个data文件夹

17.png 4.进入conf文件夹并将zoo_samle.cfg文件备份一份重命名为zoo.cfg

16.png 5.编辑并修改zoo.cfg文件内容中dataDir目录地址

18.png 配置说明:

# zookeeper时间配置中的基本单位 (毫秒)
tickTime=2000
# 允许follower初始化连接到leader最大时长,它表示tickTime时间倍数 即:initLimit*tickTime
initLimit=10
# 允许follower与leader数据同步最大时长,它表示tickTime时间倍数 
syncLimit=5
#zookeper 数据存储目录
dataDir=/tmp/zookeeper
#对客户端提供的端口号
clientPort=2181
#单个客户端与zookeeper最大并发连接数
#maxClientCnxns=60
# 保存的数据快照数量,之外的将会被清除
#autopurge.snapRetainCount=3
#自动触发清除任务时间间隔,小时为单位。默认为0,表示不自动清除。
#autopurge.purgeInterval=1

6.启动zookeeper

找到bin目录下zkServer.cmd,双击运行,注意:此版本zookeeper启动会默认占用8080端口

19.png

20.png

注意:1.如果你当前8080端口被占用了,那么启动的时候会闪退,cmd窗口会自动关闭,此时可以在zoo.cfg配置文件里面最后一行添加admin.serverPort=8123,然后再双击zkServer.cmd运行就ok了。2.dataDir路径配置的一定不要包含中文,并且路径使用''不要使用'/'。

21.png

7.客户端访问

在bin目录下双击zkCli.cmd

22.png

23.png