@Author : Spinach | GHB
@Link : http://blog.csdn.net/bocai8058
概述
HA(High Available),高可用性集群,是保证业务连续性的有效解决方案,一般有两个或两个以上的节点,且分为活动节点及备用节点。两个NameNode为了数据同步,会通过一组称作JournalNodes的独立进程进行相互通信。
- 当active状态的NameNode的命名空间有任何修改时,会告知大部分的JournalNodes进程。
- standby状态的NameNode有能力读取JNs中的变更信息,并且一直监控edit log的变化,把变化应用于自己的命名空间。standby可以确保在集群出错时,命名空间状态已经完全同步了。
hadoop 1.x与2.x针对性对比
\ | hadoop 1.x | hadoop 2.x |
---|---|---|
节点 | 只有1个NameNode。HDFS集群的NN有单点故障问题。每个集群只有一个单独的NN,如果NN所在集群宕机或者进程不可用,整个集群也将不可用,直到NN被重启或者指定到别的主机。(如左下图) | 可以同时启动2个NameNode。 HDFS HA特性通过提供选项,允许在同一个集群以主动/被动方式,在线运行两个冗余的NN(一个处于工作状态,另一个处于随时待命状态),解决了hadoop1.x单点故障问题。这样,当一个NameNode所在的服务器宕机时,可以在数据不丢失的情况下,手工或者自动切换到另一个NameNode提供服务。在一个典型的HA集群中,每个NameNode是一台独立的服务器。在任一时刻,只有一个NameNode处于active状态,另一个处于standby状态。其中,active状态的NameNode负责所有的客户端操作,standby状态的NameNode处于从属地位,维护着数据状态,随时准备切换。 |
数据同步 | 将fsimage、edits文件通过SecondaryNameNode合并。 | 多个NameNode之间共享数据,可以通过Network File System或者Quorum JournalNode(前者是通过linux共享的文件系统,属于操作系统的配置;后者是hadoop自身的东西,属于软件的配置),来保持数据状态一致。(如右下图) |
同步过程 | 从 NameNode上下载元数据信息(fsimage、edits),然后利用SecondaryNameNode把二者合并,生成新的fsimage,在本地保存,并将其推送到NameNode,替换旧的fsimage。即是editlogs。 | ①两个NameNode为了数据同步,会通过一组称作JournalNodes的独立进程进行相互通信。任何执行在活动NN的editlogs,将持久地记录到大多数JN里。备用NN能够在这些JN里读取到editlogs,并且不断的监控记录的改变。当备用NN读取到这些editlogs时,就把它们执行一遍。当发现故障恢复时,备份NN在确保从JN中读取到所有editlogs后,就将自己提升为活动NN。这就确保了再发生故障恢复前命名空间已完全同步。②为了提供快速的故障恢复,备用NN拥有最新的块地址信息也是非常重要的。为了实现这个要求,DN同时配置有两个NN的地址,并且同时向两者发送块地址信息和心跳。③在同一时间里,保证高可用集群中只有一个活动NN是至关重要的。否则,两个NN的状态将很快出现不一致,数据有丢失的风险,或者其他错误的结果。为了确保这种属性、防止所谓的脑裂场景(split-brain scenario),在同一时间里,JN只允许一个NN写editlogs。故障恢复期间,将成为活动节点的NN简单的获取写editlogs的角色,这将有效的阻止其他NN继续处于活动状态,允许新活动节点安全的进行故障恢复。(如中下图) |
硬件资源要求
为了部署HA(High Available)集群,需要作如下准备:
- NameNode的要求:由HA的架构可知,存在两个NameNode主机,一个为现役NameNode主机,一个为待机NameNode主机,二者的硬件配置应该相同,同时还要有运行JournalNodes的主机。
- JournalNode的要求:由于JournalNode守护进程是相对轻量级的,那么这些守护进程可与其它Hadoop守护进程,如NameNode、JobTracker或者ResourceManager,运行在相同的主机上。由于edits日志的改变必须写入大多数(一半以上)JNs,所以至少存在3个JournalNodes守护进程,这样系统能够容忍单个主机故障。当然也可以运行多于3个JournalNodes,但为了增加系统能够容忍的故障主机的数量,应该运行奇数个JNs。当运行N个JNs时,系统最多可以接受(N-1)/2个主机故障并能继续正常运行。
参与的引用:https://my.oschina.net/u/189445/blog/661561 | http://hadoop.apache.org/docs/r2.5.1/hadoop-project-dist/hadoop-hdfs/HDFSHighAvailabilityWithQJM.html | http://blog.csdn.net/skywalker_only/article/details/40078219