Namenode HA框架

非HA的Namenode架构

一个HDFS集群只存在一个Namenode,Datanode只向一个Namenode汇报 ,Namenode的edit log存储在本地目录

HA架构:

包含两个Namenode,主(active)与备(standby),ZKFC(Zookeeper Failover Controller),ZK, share editlog(可以是NFS和QJM)

editlog
Namenode记录了HDFS的目录文件等元数据,客户端每次对文件的增删改等操作,Namenode都会记录一条日志,叫做editlog

ZKFC
Zookeeper故障转移控制器控制Namenode故障转移过程,每个Namenode对应一个ZKFC

NFS: Network File System
NameNode之间通过NAS进行元数据同步,有一定局限性

QJM: Quorum Journal Manager
(Quorum一致性:w+r>n r>n-w)
由JournalNode(JN)组成,一般是奇数个节点。JournalNode保存共享的编辑日志。每个JournalNode对外有一个简易的RPC接口,以供NameNode读写EditLog到JN本地。

流程:

集群启动后,一个Namenode处于active状态,并提供服务,处理客户端和datanode请求,并把editlog写到share editlog(JournalNode)和本地。

另一个Namenode处于Standby状态,它启动时从fsimage(File System Image)(保存了HDFS中文件名称,目录结构,文件权限等信息)加载HDFS元数据到内存,然后周期性地从share editlog(JournalNode)获取editlog,保持与active的状态同步。

为了实现standby在active挂掉后迅速提供服务,需要Datanode同时向两个Namenode发送心跳(block report 块状态报告)(健康状态和块位置),因为Namenode启动中最费时的工作是处理所有的datanode的block report。

ZKFC与ZK通信,通过ZK选主,ZKFC通过RPC让Namenode转换为active或standby。

NN HA

防止脑裂

  • 使用QJM实现共享同存储的fencing,以确保只有一个Namenode能写成功

  • Datanode fencing,只有一个Namenode能命令Datanode

  • 客户端fencing,确保只有一个Namenode能相应客户端请求,让访问standby的Namennode的客户端直接失败。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容