A-A+

从零学习Hadoop之HDFS的HA机制

2016年04月15日 Hadoop 评论 1 条 阅读 905 views 次

Hadoop2.0.0版本之前,NameNode是HDFS集群的单点故障点,每一个集群只有一个NameNode,如果这个机器或者进程不可用,整个集群则无法使用,直到重启NameNode或者新启动一个NameNode节点。

那么,导致HDFS集群不可用的两种主要情况:

  • 类似机器宕机,Hadoop1解决方式:重启NameNode。
  • 计划内的软件或者硬件升级(NameNode节点),将导致集群在段时间范围内不可用。

HDFS的高可用性(High Availablity)就可以解决上述问题,通过提供选择运行在同一集群中的一个热备用的“主/备”两个冗余NameNode,允许在机器宕机或者系统维护的时候,快速的转移到另一个NameNode。

HA集群

一个典型的HA集群,连个单独的机器配置为NameNode,在任何时候:

  • 一个NameNode处于活动状态->负责处理集群中所有的客户端操作
  • 一个NameNode处于待机状态->待机时,作为Slave;另一个不可用时,活动起来。

要求:保持备用节点和活动节点状态同步,保证两节点信息一致性。

实现方式:需要两个节点同时访问一个共享存储设备(例如从NAS、NFS挂载)到一个目录。

备用节点未启用时,监听共享目录(活动节点对名字节点的任何修改修改都会写入此共享目录),将修改内容同步到自己的名字空间。-->针对NameNode

备用节点启用时,为了保证提供快速的故障转移,必须保证备用节点有最新的集群中块的位置信息,为了达到这一点,DataNode节点需要配置两个NameNode的位置,同时发送块的位置信息和心跳信息到NameNode。-->针对DataNode

前提:任何时候只有一个NameNode处于活动状态,防止产生冲突、数据丢失或者其他不正确结果。为了达到这个目的或者所谓的“脑裂清静”出现,管理员必须为共享存储配置至少一个fencing方法。在宕机期间,如果不能确定之间的活动节点已经放弃活动状态,fencing进程负责中断以前的活动节点编辑存储的共享访问。这可以防止任何进一步的修改名字空间,允许新的活动节点安全地进行故障转移。

目前,只有手动故障转移。也就是说不能自动检测活动节点NameNode的失败。

HA架构

HA架构

对上图的解释:

  • 只有一个NameNode是Active的,只有此活动的NameNode提供服务,改变NameSpace。
  • 提供手动Failover。在升级过程中,Failover在NameNode-DataNode之间写不变的情况下才能生效。
  • 在之前的NameNode重新恢复后,不能提供Failback。
  • 数据一致性比Failover重要。
  • 尽量少用特殊的硬件。
  • HA的设置和Failover都应该保证在两者操作错误或者配置错误的时候,不得导致数据损坏。
  • NameNode的短期垃圾回收不应该触发Failover。
  • DataNode会同时想NameNode Active和NameNode Standby汇报块的信息。NameNode Active和NameNode Standby通过NFS备份Metadata信息到一个磁盘上面。

为什么会有HA机制

1、Hadoop1中的几个试图解决单点故障问题的方法:

  • Secondary NameNode
  • Backup NameNode
  • 手动把name.dir指向NFS
  • Facebook AvatarNode

还有一些依赖于外部呃HA机制,在这就不做描述。

2、集群容量和集群性能

集群规模变大后,NameNode成为性能的瓶颈。

参考资料

书名:Hadoop应用开发技术详解

作者:刘刚

 

 

1 条留言  访客:0 条  博主:0 条

  1. 123

    写得好!!

给我留言

*

Copyright © If Coding 保留所有权利.   Theme  Ality   

用户登录