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/
Window下的安装
解压
启动报错
启动报错原因
conf/zoo.cfg文件不存在
复制zoo_simple.cfg的改名为zoo.cfg
打开zoo.cfg查看端口
Linux下的安装
传到linux
解压并移动
复制zoo_simple.cfg--àzoo.cfg
启动停止重启状态
./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命令可以查看指定节点下的所有子节点
以下查看根目录下的所有子节点:
4,更新节点内容
使用set命令,更新节点内容。格式为:
#语法
set path data
其中的data就是要更新的新内容。
复制代码
5,删除节点
可以发现,一个节点存在子节点时,无法删除该节点。
还有一个命令rmr path 删除当前节点及子节点
6,节点监控
再启动一个shell
使用客户端连接
操作步骤
1,在右边的窗口创建一个节点
2,在左边的窗口连接服务器并监控/sanguo节点
3,修改右边窗口的值,发现左边的发生了变化