前言
Hadoop的三大件(HDFS、MapReduce和Yarn)基本上是学完了,剩下时间就是把《Hadoop权威指南》多啃几遍就行了。
今天开干ZooKeeper!尽管最近是考试周,但是丝毫挡不住学习新知识的热情,干就完了!
ZooKeeper入门
**1.1 ****概述 **
Zookeeper 是一个开源的分布式的,为分布式框架提供协调服务的 Apache 项目,**它是一个为分布式系统解决数据一致性方案的中间件,它致力于分布式应用中的一些高性能的、高可用的并且具有严格访问顺序控制的能力模型,实现分布式的协调服务**。
ZooKeeper主要是为了解决分布式架构下数据一致性问题,典型的应用场景有分布式配置中心、分布式注册中心、分布式锁、分布式队列、集群选举、分布式屏障、发布/订阅等场景。
1.2 ZooKeeper的特点
- Zookeeper:一个领导者(Leader),多个跟随者(Follower)组成的集群。
- 集群中只要有半数以上节点存活,Zookeeper集群就能正常服务。所 以Zookeeper适合安装奇数台服务器。
- 全局数据一致:每个Server保存一份相同的数据副本, Client无论连接到哪个Server,数据都是一致的 。
- 更新请求顺序执行,来自同一个Client的更新请求按其发送顺序依次执行。
- 数据更新原子性,一次数据更新要么成功,要么失败。
- 实时性,在一定时间范围内,Client能读到最新数据。(当一个客户端节点对数据进行写操作后,ZooKeeper很快就可以将更新同步,使得别的服务端很快就可以读取到更新后的数据)
1.3 数据结构
ZooKeeper提供了一个类似于Linux文件系统的层次结构,可以被用来管理分布式系统中的配置信息、命名服务、分布式锁等,它整体上可以看作是一棵树,每个节点称做一个 ZNode。每一个ZNode 默认能够存储
1MB 的数据(存储内容有限),每个 ZNode 都可以
通过其路径唯一标识。
Znode是Zookeeper分布式协调服务中的一个基本数据结构,用于存储和维护节点信息。这些节点信息可以包括分布式系统中各个节点的元数据、配置信息、状态信息以及锁等。
通过Znode可以实现分布式系统中的节点注册、状态变化通知、选举协调以及数据同步等功能。
1.4 应用场景
提供的服务包括:统一命名服务、统一配置管理、统一集群管理、服务器节点动态上下线、软负载均衡、master选举以及分布式锁等。
统一配置管理
我们的集群配置信息都是基本都是要求一致的,比如我们之前学过的Hadoop集群,以及以后要学的 kafka 集群。所以我们希望对配置文件修改完毕之后,可以快速同步配置信息到所有节点。
ZooKeeper帮我们实现了这一过程:
- ZooKeeper将我们的配置信息写入到ZooKeeper上的一个Znode上。
- 各个节点会监听Znode的变化来完成自己的更新。
- 一旦Znode中的数据被修改,ZooKeeper就会通知相关的节点。
统一集群管理
在多个节点组成的集群当中,为了保证集群HA的特性,每个节点都回去冗余一份数据副本,这就需要保证客户端访问集群中任意一个节点的数据,都必须是最新的数据。
ZooKeeper可以实时监控节点状态的变化,根据节点的状态做出一些调整(所有节点的状态信息都被写入到ZooKeeper上的一个Znode上,ZooKeeper可以实时监控这些节点的状态变化,而且我们的客户端也可以通过注册来获取所有节点的实时状态变化信息。)
Hadoop集群中的各个组件(如NameNode、ResourceManager、DataNode、NodeManager等)的状态信息,都需要Zookeeper进行管理和协调。例如,Zookeeper可以维护当前活跃的NameNode节点,监控DataNode节点的健康状态,监控ResourceManager节点和NodeManager节点的状态等。
服务器节点动态上下线
- 节点启动上线后会去ZooKeeper去注册自己的信息到ZooKeeper的一个Znode上。
- 客户端就可以获取到当前在线的节点列表并注册监听。
- 注册监听后的客户端能实时洞察到服务器上下线的变化。
软负载均衡
根据每个节点的负载压力,将客户端请求发送到压力小的节点。
分布式锁
如何保证跨进程的共享资源的并发安全性,对于分布式系统,必须使用跨进程的锁(分布式锁)来实现。
Master选举
在多个节点组成的集群中,为了降低集群数据同步的复杂度,一般都会存在Master和Salve两种角色的节点,Master负责去做事务和非事务的请求处理,Salve专门去做非事务请求处理,这就需要一个中间件(zookeeper)来专门协调分布式系统中的问题。
版权归原作者 让线程再跑一会 所有, 如有侵权,请联系我们删除。