Hadoop Start(3) ——HDFS原理: HDFS HA高可用集群

  • HDFS HA简介

    在完全分布式HDFS集群中,即使通过namenode备份还是无法做到及时的文件系统高可用,namenode存在单点故障(SPOF,Single Point Of Failure)。
    对于一个大型集群来说,冷启动的时间乐观情况下一般都需要半个小时以上,甚至更多。因此,Hadoop2增加了HDFS的高可用HA(High Availability)的支持。

    HDFS HA有两种方案:

    • NFS
    • QJM

    一般使用QJM(群体日志管理)

    为了保障HDFS集群的高可用,需要实现主备(active-standby) namenode。

  • HDFS HA架构

    image

    ZKFC(失效检测控制)是 Hadoop 里的一个 Zookeeper 客户端,在每一个 NameNode 节点上都启动一个 ZKFC 进程,来监控 NameNode 的状态,并把 NameNode 的状态信息汇报给 Zookeeper 集群,其实就是在 Zookeeper 上创建了一个 Znode 节点,节点里保存了 NameNode 状态信息。

    当 NameNode 失效后,ZKFC 检测到报告给 Zookeeper,Zookeeper把对应的 Znode 删除掉,Standby ZKFC 发现没有 Active 状态的 NameNode 时,就会用 shell 命令将自己监控的 NameNode 改为 Active 状态,并修改 Znode 上的数据。Znode 是个临时的节点,临时节点特征是客户端的连接断了后就会把 znode 删除,所以当 ZKFC 失效时,也会导致切换 NameNode。

    • 基于QJM的HDFS HA实现

    QJM,Quorum Journal Manager,也就是群里日志管理器。它是一个专用的HDFS实现,为提供一个高可用编辑日志而设计,应用于大多数的HDFS部署。QJM包含一组日志节点(Journal Node),NameNode每次写入的时候必须写入多数的日志节点。

    典型的情况,有三个日志节点,系统能够容忍任何一个节点的失效。NameNode就是通过一组JournalNodes的独立进程进行相互通信,来实现数据的同步。

    实现原理: 当Active状态的NameNode的命名空间有任何修改时,会通知大部分的JournalNodes进程。Standby状态的NameNode会读取JournalNodes中的变更信息,并且一直监控editlog的变化,把变化应用于自己的命名空间。Standby节点可以确保在集群出错时,命名空间状态已经完全同步了。

你可能感兴趣的:(Hadoop Start(3) ——HDFS原理: HDFS HA高可用集群)