01【熟悉】Zookeeper概述

1,Zookeeper背景

随着互联网技术的发展,企业对计算机系统的计算,存储能力要求越来越高,各大IT企业都在追求高并发,海量存储的极致,在这样的背景下,单纯依靠少量高性能单机来完成计算机,云计算的任务已经无法满足需求,企业的IT架构逐渐由集中式往分布式过渡。所谓的分布式是指:把一个计算任务分解成若干个计算单元,并分派到不同的计算机中去执行,最终汇总计算结果的过程。

 

2,Zookeeper概述

Zookeeper是源代码开放的分布式协调服务,是一个高性能的分布式数据一致性的解决方案,它将那些复杂的,容易出错的分布式一致性服务封装起来。用户可以通过调用Zookeeper提供的接口来解决一些分布式应用中的实际问题。

 

3,Zookeeper典型应用场景

(1)数据发布/订阅

数据的发布与订阅,顾名思义就是一方把数据发布出来,另一方通过某种手段获取。

通常数据发布与订阅有两种模式:推模式和拉模式,推模式一般是服务器主动往客户端推送信息,拉模式是客户端主动去服务端请求目标数据(通常采用定时轮询的方式)

Zookeeper采用两种方式互相结合:发布者将数据发布到Zookeeper集群节点上,订阅者通过一定的方法告诉Zookeeper服务器,自己对哪个节点的数据感兴趣,那么在服务端数据发生变化时,就会通知客户端去获取这些信息。

(2)负载均衡

 首先在服务端启动的时候,把自己在zookeeper服务器上注册成一个临时节点。zookeeper拥有两种形式的节点,一种是临时节点,一种是永久节点。这两种节点后面的会有较为详细的介绍。注册成临时节点后,再服务端出问题时,节点会自动的从zookeeper上删除,如此zookeeper服务器上的列表就是最新的可用的列表。

 客户端在需要访问服务器的时候首先会去Zookeeper获得所有可用的服务端的连接信息。

 客户端通过一定的策略(如随机)选择一个与之建立连接。

 当客户端发现连接不可用时,会再次从zookeeper上获取可用的服务端连接,并同时删除之前获取的连接列表。

  (3)命名服务

 提供名称的服务。如一般使用较多的有两种id,一种是数据库自增长id,一种是UUID,两种id都有局限,自增长id仅适合在单表单库中使用,uuid适合在分布式系统中使用但由于id没有规律难以理解。而ZK提供了一定的接口可以用来获取一个顺序增长的,可以在集群环境下使用的id。

  (4)分布式协调,通知,心跳服务

 在分布式服务系统中,我们常常需要知道哪个服务是可用的,哪个服务是不可用的,传统的方式是通过ping主机来实现的,ping得200的结果说明说明该服务是OK的。

 而在使用 zookeeper时,可以将所有的服务都注册成一个临时节点,我们判断一个服务是否可用,只需要判断这个节点是否在zookeeper集群中存在就可以了,不需要直接去连接和ping服务所在主机,减少系统的复杂度和对服务主机的压力。

 

4,Zookeeper优势

(1)源代码开放

(2)高性能,易用稳定,该优势已在众多分布式系统中得到验证

(3)有着广泛的应用,并且与众多大数据相关技术能实现良好的融合开发。

 

 

02【掌握】Zookeeper的安装及单机版配置

下载

https://apache.org/dist/zookeeper/ 

 

zookeeper安装配置及基础操作_客户端

 

 

 

 

Window下的安装

解压

 

zookeeper安装配置及基础操作_客户端_02

 

 

 

 

启动报错

 

zookeeper安装配置及基础操作_客户端_03

 

 

 

启动报错原因

conf/zoo.cfg文件不存在

复制zoo_simple.cfg的改名为zoo.cfg

 

zookeeper安装配置及基础操作_客户端_04

 

 

 

 

打开zoo.cfg查看端口

 

zookeeper安装配置及基础操作_客户端_05

 

 

 

Linux下的安装

传到linux

 

zookeeper安装配置及基础操作_客户端_06

 

 

 

解压并移动

 

zookeeper安装配置及基础操作_zookeeper_07

 

 

zookeeper安装配置及基础操作_zookeeper_08

 

 

zookeeper安装配置及基础操作_zookeeper_09

 

 

zookeeper安装配置及基础操作_数据_10

 

 

复制zoo_simple.cfg--àzoo.cfg

 

zookeeper安装配置及基础操作_zookeeper_11

 

 

启动停止重启状态

 

zookeeper安装配置及基础操作_zookeeper_12

 

 

zookeeper安装配置及基础操作_zookeeper_13

 

 

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

 

安装到阿里云

和linux下面一样

 

03【掌握】Zookeeper文件系统及监听机制

1,概述

官方文档上这么解释zookeeper,它是一个分布式服务框架,是Apache Hadoop 的一个子项目,它主要是用来解决分布式应用中经常遇到的一些数据管理问题,如:统一命名服务、状态同步服务、集群管理、分布式应用配置项的管理等。

简单来说zookeeper=文件系统+监听通知机制

2,文件系统

2.1,示意图

 

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

2.2,四种类型的znode:

PERSISTENT-持久化目录节点      客户端与zookeeper断开连接后,该节点依旧存在

PERSISTENT_SEQUENTIAL-持久化顺序编号目录节点   客户端与zookeeper断开连接后,该节点依旧存在,只是Zookeeper给该节点名称进行顺序编号

EPHEMERAL-临时目录节点    客户端与zookeeper断开连接后,该节点被删除

EPHEMERAL_SEQUENTIAL-临时顺序编号目录节点    客户端与zookeeper断开连接后,该节点被删除,只是Zookeeper给该节点名称进行顺序编号

 

3,监听机制

客户端注册监听它关心的目录节点,当目录节点发生变化(数据改变、被删除、子目录节点增加删除)时,zookeeper会通知客户端。

zookeeper功能非常强大,可以实现诸如分布式应用配置管理、统一命名服务、状态同步服务、集群管理等功能,我们这里拿比较简单的分布式应用配置管理为例来说明。

 

假设我们的程序是分布式部署在多台机器上,如果我们要改变程序的配置文件,需要逐台机器去修改,非常麻烦,现在把这些配置全部放到zookeeper上去,保存在 zookeeper 的某个目录节点中,然后所有相关应用程序对这个目录节点进行监听,一旦配置信息发生变化,每个应用程序就会收到 zookeeper 的通知,然后从 zookeeper 获取新的配置信息应用到系统中。

 

 

04【掌握】Zookeeper单机版本使用

通过

quit退出客户端

1,创建节点

使用create命令,可以创建一个zookeeper节点。

 

//语法

create [-s] [-e] path data acl

//其中-s表示顺序节点,-e表示临时节点。默认情况下,创建的是持久节点。

//path是节点路径,data是节点数据,acl是用来进行权限控制的。

//案例

create /sanguo  luoguanzhong  创建一个持久节点目录为/sanguo    值为  luoguanzhong

create -s /shuihu  shinaian  创建一个持久顺序节点目录为/shuihu  值为  shinaian

create -e /xiyou  wuchengren  创建一个临时节点目录为/xiyou  值为  wuchengren 

create -e -s /honglou  caoxueqing  创建一个临时顺序节点目录为/honglou  值为 caoxueqing   

 

2,查看节点内容

使用get命令,可以获取zookeeper指定节点的内容和属性信息。

如下:

 

[zk: 127.0.0.1:2181(CONNECTED) 1] get /sanguo

luoguanzhong

cZxid = 0xd

ctime = Tue Aug 13 20:27:20 CST 2019  创建时候

mZxid = 0xd

mtime = Tue Aug 13 20:27:20 CST 2019  修改时间

pZxid = 0xd

cversion = 0

dataVersion = 0     #没有被修改过,所以版本为0如果有修改过版本会自增

aclVersion = 0

ephemeralOwner = 0x0

dataLength = 12

numChildren = 0

 

3,查看子节点

使用ls命令可以查看指定节点下的所有子节点

以下查看根目录下的所有子节点:

 

zookeeper安装配置及基础操作_zookeeper_14

 

 

 

4,更新节点内容

使用set命令,更新节点内容。格式为:

 

#语法

set path data 

其中的data就是要更新的新内容。

复制代码

 

zookeeper安装配置及基础操作_数据_15

 

 

 

5,删除节点

 

zookeeper安装配置及基础操作_zookeeper_16

 

 

可以发现,一个节点存在子节点时,无法删除该节点。

还有一个命令rmr path 删除当前节点及子节点

6,节点监控

再启动一个shell

使用客户端连接

 

操作步骤

1,在右边的窗口创建一个节点

 

zookeeper安装配置及基础操作_数据_17

 

 

2,在左边的窗口连接服务器并监控/sanguo节点

 

zookeeper安装配置及基础操作_数据_18

 

 

zookeeper安装配置及基础操作_数据_19

 

 

 

3,修改右边窗口的值,发现左边的发生了变化

 

zookeeper安装配置及基础操作_数据_20