在Hadoop集群中,namenode管理整个hdfs系统的元数据信息,直接决定hdfs文件系统的可用性,那么在一个典型的Hadoop集群中,有两台机器被配置为namenode,一台为active,另一台为standy状态。工作中active负责工作,standy保持足够的状态来提供快速故障切换。

hdfs和zookeeper实现高可用机制

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-W0nV0eA8-1603113366622)(https://s1.ax1x.com/2020/09/18/wfHOpR.png)]

journalnode 为元数据的共享文件系统,用来同步active namenode和standby namenode两个机器之间的源数据同步,active向journalnode集群中写入日志数据,而standby只能读取journalnode集群中数据,且journalnode集群中也是高可用的,元数据在每个journnode机器中都是有备份的。

而zookeeper集群来调度和保证namenode的高可用。

hdfs高可用机制的工作原理

左边为namenode(active),下面为datanode集群。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-yD5ySe2b-1603113366627)(https://s1.ax1x.com/2020/09/18/wfq7W9.png)]

zookeeper组件介绍:

  • ZKFC:基于zookeeper的故障转移控制器,负责namenode之间的主备切换,ZKFC会检测namnode的健康状态,出现异常的时候会通过zookeeper集群进行一次新的选举,完成standby和active状态的切换。
  • HM:监控namenode的健康状态并向ZKFC反馈。
  • ASE: 接受ZKFC的选举请求通过zookeeper完成选举选举之后完成回调报告选举结果。
  1. HM组件心跳机制监控namenode的健康状况。
  2. HM向ZKFC汇报健康状况。
  3. ZKFC将namenode的宕机情况传递给ASE
  4. ASE将通知zookeeper集群选举出一个新的namenode
  5. zookeeper集群向ASE回复选举结果。
  6. ASE向ZKFC报告选举结果。
  7. ZKFC直接和namenode建立通信,改变namenode的状态。
  8. zookeeper通过ZKFC修改被选举出的namdenode机器的状态。

Hadoop的联邦机制(federation)

由于元数据都是保存在namenode的内存中,当集群足够大的时候,namenode机器的内存就是性能的瓶颈,联邦机制就是用来解决这个问题,一种namenode水平扩展的方案

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-0l3s8HTL-1603113366629)(https://s1.ax1x.com/2020/09/18/whSNbn.png)]

namespace命名空间之间是相互隔离的,且每一个命名空间对datanode中的元数据都是具有特定的编号进行管理的,也就是说namenode之间是共享datanode的。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-uDgU6Mza-1603113366633)(https://s1.ax1x.com/2020/09/18/whpPqs.png)]