因为Hadoop的HA部分需要用到Zookeeper,所以我们先来看一下Zookeeper的相关知识,Hadoop的HA放到Zookeeper之后进行讲解。关注专栏《破茧成蝶——大数据篇》查看相关系列文章~
目录
一、概述
1.1 Zookeeper简介
1.2 Zookeeper工作机制
二、Zookeeper的特点
三、数据结构
四、应用场景
4.1 统一命名服务
4.2 统一配置管理
4.3 统一集群管理
4.4 服务器动态上下线
4.5 软负载均衡
五、官方网站
Zookeeper是一个开源的分布式的,为分布式应用提供协调服务的Apache项目。
在企业级应用系统中,随着信息化水平的不断提高,企业级系统变得越来越庞大臃肿,性能急剧下降。拆分系统是目前我们可选择的解决系统可伸缩性和性能问题的唯一行之有效的方法。但是拆分系统同时也带来了系统的复杂性——各子系统不是孤立存在的,它们彼此之间需要协作和交互,这就是我们常说的分布式系统。各个子系统就好比动物园里的动物,为了使各个子系统能正常为用户提供统一的服务,必须需要一种机制来进行协调——这就是ZooKeeper。
ZooKeeper是一个分布式小文件系统,并且被设计为高可用性。通过选举算法和集群复制可以避免单点故障,由于是文件系统,所以即使所有的ZooKeeper节点全部挂掉,数据也不会丢失,重启服务器之后,数据即可恢复。所有的一切ZooKeeper已经为开发者提供了保障,我们需要做的只是调用API。与此同时,随着分布式应用的的不断深入,需要对集群管理逐步透明化监控集群和作业状态,可以充分利ZK的独有特性。
ZooKeeper原本是Apache Hadoop的一个组件,现在被拆分为一个Hadoop的独立子项目,在HBase中也用到了ZooKeeper集群。Hadoop,使用Zookeeper的事件处理确保整个集群只有一个NameNode,存储配置信息等。HBase,使用Zookeeper的事件处理确保整个集群只有一个HMaster,察觉HRegionServer联机和宕(dàng)机,存储访问控制列表等。
Zookeeper从设计模式角度来说是一个基于观察者模式设计的分布式服务管理框架,它负责存储和管理大家都关心的数据,然后接收观察者的注册,一旦这些数据的状态发生变化,Zookeeper就将负责通知已经在Zookeeper上注册的那些观察者做出相应的反应。
以下是Zookeeper集群简图:
1、Zookeeper是一个领导者(leader),多个跟随者(follower)组成的集群。
2、集群中只要有半数以上的节点存活,Zookeeper集群就能正常服务。
3、全局数据一致:每个server保存一份相同的数据副本,Client无论连接到哪个server,数据都是一致的。
4、更新请求顺序进行,来自同一个Client的更新请求按其发送顺序依次执行。
5、数据更新原子性,依次数据更新要么成功,要么失败。
6、实时性,在一定时间范围内,Client能读到最新数据。
Zookeeper数据模型的结构整体上可以看做是一棵树,每个节点称作一个ZNode。每一个ZNode默认能够存储1MB的数据,每个ZNode都可以通过其路径唯一标识。
提供的服务包括:统一命名服务、统一配置管理、统一集群管理、服务器节点动态上下线、软负载均衡等。
在分布式环境下,经常需要对应用/服务进行统一命名,便于识别。
分布式环境下,配置文件同步非常常见。一般要求一个集群中,所有节点的配置信息是一致的,例如:Kafka集群。对配置文件修改后,希望可以尽快的同步到各个节点中。配置管理可交由Zookeeper实现。可将配置信息写入Zookeeper上的一个ZNode,各个客户端服务器监听这个ZNode,一旦ZNode中的数据被修改,Zookeeper将通知各个客户端服务器。
分布式环境中,实时掌握每个节点的状态是很有必要的,Zookeeper可以实现实时监控节点状态变化。可以将节点信息写入ZNode上,监听这个ZNode可获取它的实时状态变化。
Zookeeper能实时洞察到服务器上下线的变化。
在Zookeeper集群中记录每台服务器的访问数,让访问数最少的服务器去处理最新的客户端请求。
Zookeeper的官方网站地址如下所示:
https://zookeeper.apache.org/
本文到此也就结束了,你们在此过程中存在什么问题,欢迎留言,让我看看你们都遇到了什么问题~