Hadoop2.6 Namenode HA 原理

Hadoop2.6 Namenode的高可用原理可以表示为以下过程:

Hadoop2.6 Namenode HA 原理_第1张图片
NN-HA原理

下面把各个组件的作用说明如下:

  1. Active NameNode 和 Standby NameNode:两台 NameNode 形成互备,一台处于 Active 状态,为主 NameNode,另外一台处于 Standby 状态,为备 NameNode,只有主 NameNode 才能对外提供读写服务。主 NameNode 把EditLog写入 JN中,备 NameNode 从JN中获取EditLog合并到FSImage中。

  2. 主备切换控制器 ZKFailoverController:ZKFailoverController 作为独立的进程运行,对 NameNode 的主备切换进行总体控制。ZKFailoverController 能及时检测到 NameNode 的健康状况,在主 NameNode 故障时借助 Zookeeper 实现自动的主备选举和切换,当然 NameNode 目前也支持不依赖于 Zookeeper 的手动主备切换。
    ZKFailoverController 进程是HA中比较核心的组件,它一方面监控着NaneNode进程(通过HealthMonitor线程),另一方面监控这Zookeeper进程(通过ActiveStandbyElector线程)。涉及到监控就会有超时时间设置。在笔者运维过的Hadoop系统中,出现过NameNode的Active节点经常发生切换的现象,都是因为ZKFailoverController监控Zookeeper和NameNode的超时时间设置过短导致的。
    ZKFailoverController监控NameNode的超时配置项是:ha.health-monitor.rpc-timeout.ms,默认是50000ms,可以适当调长一些


    
        ha.health-monitor.rpc-timeout.ms
        300000
    

ZKFailoverController监控Zookeeper的超时配置项是:ha.zookeeper.session-timeout.ms,默认是5000ms,也可以适当调长一些


    
        ha.zookeeper.session-timeout.ms
        180000
    
  1. Zookeeper 集群:为主备切换控制器提供主备选举支持。

  2. 共享存储系统JournalNode:共享存储系统是实现 NameNode 的高可用最为关键的部分,共享存储系统保存了 NameNode 在运行过程中所产生的 EditLog。主 NameNode 和备NameNode 通过共享存储系统实现元数据同步。在进行主备切换的时候,新的主 NameNode 在确认元数据完全同步之后才能继续对外提供服务。

  3. DataNode 节点:除了通过共享存储系统共享 HDFS 的元数据信息之外,主 NameNode 和备 NameNode 还需要共享 HDFS 的数据块和 DataNode 之间的映射关系。DataNode 会同时向主 NameNode 和备 NameNode 上报数据块的位置信息。

Hadoop的ResourceManager也实现了HA的功能,但是相对比较简单:

Hadoop2.6 Namenode HA 原理_第2张图片
RM HA

RM的HA只是利用Zookeeper来实现主从切换,但是大体原理跟NameNode的原理差不多。

在自动故障转移方面,RM不需要运行单独的守护进程ZKFC,因为RM有内置的基于ZooKeeper的ActiveStandbyElector类用于在active RM宕机或者无响应时自动选择哪个standbyRM将做为active RM,因为该类实现了ZKFC的功能。

你可能感兴趣的:(Hadoop2.6 Namenode HA 原理)