背景
分布式文件系统中( HDFS,Hadoop Distributed File System ),NameNode在内存中存储着整个文件系统的元数据信息,如文件数据块的地址映射、文件系统的命名空间、文件操作权限等。倘若NameNode节点主机一旦宕机,整个集群即将瘫痪
高可用的Hadoop集群
在搭建Hadoop集群时,通常需要搭建多个NameNode,这样可以保证如果其中一个NameNode发生宕机,另一个NameNode可以迅速的补充,保证集群7*24小时的不间断工作。通常,NameNode有两个状态,分别是active(响应客户端请求)与standby(待命状态,在active状态的NameNode宕机时迅速切换)
这里需要区分的是NameNode与SecondaryNameNode之间的关系,SecondaryNameNode只作为分担NameNode工作压力的角色,并不能在NameNode宕机时替代NameNode。为简短篇幅,NameNode以下简称“nn”
高可用HDFS工作原理
HA自动切换机制流程
- HealthMonitor监控nn健康状况,将结果反馈给ZKFC
- 若nn状态出现异常,ZKFC将nn异常状况报告给ASE
- ASE通知Zookeeper选举出新的NameNode
- Zookeeper将选举结果返回给ASE
- ASE向ZKFC报告选举结果
- ZKFC完成nn间的状态切换
下面对各个模块进行说明
元数据共享存储系统
元数据共享存储系统由多个JournalNode构成。JournalNode中主要存放文件元数据信息,active-nn通过edits往JournalNode中写入日志数据,standby-nn负责从JournalNode中读取日志信息并生成元数据。为了保证数据不丢失,active-nn与standby-nn的元数据读写操作必须是同步的
ZKFC
ZKFC是基于Zookeeper的故障转移控制器,运行在每个nn中,用来监控nn的健康状态并在Active-nn出现连接超时,宕机等连接失败的情况下通知ZooKeeper进行新的选举,完成active-nn与standby-nn间的主备切换,下面介绍ZKFC中的重要组件
1. HealthMonitor
ZKFC定期通过HealthMonitor对nn进行健康诊断,HealthMonitor负责记录nn的健康状态并向ZKFC进行反馈(nn状态正常或异常)
2. ActiveStandbyElector
ActiveStandByElector主要完成nn与Zookeeper间的交互,当nn在Zookeeper上的节点状态发生变化时,ASE负责将结果返回给ZKFC,与此同时,如果nn出现宕机,也由ASE通知Zookeeper完成选举
3. ZKFailoverController
ZKFailoverController负责协调HealthMonitor和ActiveStandbyElector对象,完成nn状态切换过程
DataNode
存储文件信息,定期向nn发送数据块信息,与nn建立心跳感知(向nn报告健康状况)
Hadoop的联邦机制(Federation)
图源:https://blog.csdn.net/haveanybody/article/details/115616992
背景
虽然高可用HDFS解决了nn单点故障问题,但是实际业务需求中随着业务量的增大,内存中的元数据会越来越多最终导致内存不足等问题
联邦机制
为了解决内存不足的问题,Hadoop允许对nn进行横向扩展,也就是拥有多个nn,每个nn管理着各自的数据块。DataNode中不同的存储数据块由不同的nn进行管理,但因此也产生了问题,即联邦机制不能解决nn单点故障问题。所以,在部署环境时,应采用高可用(HA)+联邦机制的部署方案来搭建集群。