(一)概述
Zookeeper是一个开源的分布式的,为分布式应用提供协调服务的Apache项目。
Zookeeper从设计模式角度来理解:是一个基于观察者模式设计的分布式服务管理框架,它负责存储和管理大家都关心的数据,然后接受观察者的注册,一旦这些数据的状态发生变化,Zookeeper就将负责通知已经在Zookeeper上注册的那些观察者做出相应的反应。
Zookeeper的核心类似一个精简的文件系统,提供一些简单的操作和一些附加的抽象(如znode的排序和watch),并且集群的部署方式使其具有高可靠性。Zookeeper的协作过程简化了松散耦合系统之间的交互,即使参与者彼此不知道对方的存在,也能互相发现并且完成交互。
核心:Zookeeper=文件系统+通知机制
(二)应用场景
Zookeeper提供的功能包括:分布式消息同步和协调机制、服务器节点动态上下线、统一
配置管理、负载均衡及集群管理等。
典型应用场景一:数据发布与订阅
典型应用场景二:集群管理
典型应用场景三:负载均衡
在work server启动时先在zookeeper的servers节点下创建临时节点进行注册,client 在zookeeper的servers节点中设置监听器,可以及时获取到最新的服务器列表,于是可以按照某种策略选取某一台服务器,与之通信,完成软负载均衡。
(三)zookeeper本地模式安装
第一步:将zookeeper安装包上传到linux系统,解压tar -zxvf zookeeper-3.4.10.tar.gz
第二步:重命名conf中的zoo_sample.cfg为zoo.cfg,在zookeeper目录下创建data/zkData文件夹(mkdir -p data/zkData),指定zoo.cfg中dataDir数据存放路径:dataDir=/opt/module/zookeeper-3.4.10/data/zkData
第三步:本地启动 : [liuzhoujian@hadoop102 zookeeper-3.4.10]$ bin/zkServer.sh start
查看启动状态: [liuzhoujian@hadoop102 zookeeper-3.4.10]$ bin/zkServer.sh status
停止zookeeper:[liuzhoujian@hadoop102 zookeeper-3.4.10]$ bin/zkServer.sh stop
启动zookeeper客户端:[liuzhoujian@hadoop102 zookeeper-3.4.10]$ bin/zkCli.sh
退出zookeeper客户端:[zk: localhost:2181(CONNECTED) 0] quit
(四)Zookeeper集群模式安装
Zookeeper是可以集群复制的,集群间通过Zab(Zookeeper Atomic Broadcast)协议保证数据的一致性。
前提准备:准备三台linux虚拟机,hadoop102、hadoop103、hadoop104,在上面安装java环境(过程省略)
第一步:将zookeeper安装包上传到linux系统,解压tar -zxvf zookeeper-3.4.10.tar.gz
第二步:重命名conf中的zoo_sample.cfg为zoo.cfg,在zookeeper目录下创建data/zkData文件夹(mkdir -p data/zkData),指定zoo.cf中dataDir数据存放路径:dataDir=/opt/module/zookeeper-3.4.10/data/zkData
再在zoo.cfg中添加集群配置信息:
server.1=hadoop102:2888:3888
server.2=hadoop103:2888:3888
server.3=hadoop104:2888:3888
server.A=B:C:D A:服务器的编号 B标识IP地址,C:用于leader和follower的通信端口 D:用于选举机制的通信端口
第三步:在data/zkData目录下简历myid(touch myid), 再在里面设置服务器的编号,1号服务对应server.1中的1,在myid中设置1,2号服务器则在myid中设置2。
可以在其他虚拟机中都执行一下这些操作,也可以采用scp命令直接复制过去,进行修改。
第三步:启动zookeeper集群。
[root@hadoop2 zookeeper-3.4.10]# bin/zkServer.sh start
[root@hadoop3 zookeeper-3.4.10]# bin/zkServer.sh start
[root@hadoop4 zookeeper-3.4.10]# bin/zkServer.sh start
第四步:查看状态
[root@hadoop2 zookeeper-3.4.10]# bin/zkServer.sh status
JMX enabled by default
Using config: /opt/module/zookeeper-3.4.10/bin/../conf/zoo.cfg
Mode: follower
[root@hadoop3 zookeeper-3.4.10]# bin/zkServer.sh status
JMX enabled by default
Using config: /opt/module/zookeeper-3.4.10/bin/../conf/zoo.cfg
Mode: leader
[root@hadoop4 zookeeper-3.4.5]# bin/zkServer.sh status
JMX enabled by default
Using config: /opt/module/zookeeper-3.4.10/bin/../conf/zoo.cfg
Mode: follower
(五)数据结构与节点类型
zookeeper数据模型类似于节点树,每一个节点称为“znode”,每个znode默认存储1M数据,每个znode都可以通过其路径唯一标识。
znode的节点分为四种类型:
节点类型 | 解释 |
PERSISTENT | 持久节点,该节点客户端断开连接后不会删除 |
EPHEMERAL | 临时节点,该节点将在客户端断开连接后删除 |
PERSISTENT_SEQUENTIAL | 持久化顺序节点,该节点在客户端断开连接后不会删除,并将在其名下附加一个单调递增数 |
EPHEMERAL_SEQUENTIAL | 临时顺序节点,该节点在客户端断开连接会删除,并将在其名下附加一个单调递增数 |
(六)zookeeper集群的特点
(1)Zookeeper:一个领导者(leader),多个跟随者(follower)组成的集群。
(2)Leader负责进行投票的发起和决议,更新系统状态
(3)Follower用于接收客户请求并向客户端返回结果,在选举Leader过程中参与投票
(4)集群中只要有半数以上节点存活,Zookeeper集群就能正常服务。
(5)全局数据一致:每个server保存一份相同的数据副本,client无论连接到哪个server,数据都是一致的。
(6)更新请求顺序进行,来自同一个client的更新请求按其发送顺序依次执行。
(7)数据更新原子性,一次数据更新要么成功,要么失败。
(8)实时性,在一定时间范围内,client能读到最新数据。