HDFS高可用(HA)
为了整个系统的可靠性,我们通常会在系统中部署两台或多台主节点,多台主节点形成主备的关系,但是某一时刻只有一个主节点能够对外提供服务,当某一时刻检测到对外提供服务的主节点“挂”掉之后,备用主节点能够立刻接替已挂掉的主节点对外提供服务,而用户感觉不到明显的系统中断。这样对用户来说整个系统就更加的可靠和高效。
目录
1 HA机制产生的背景
高可用(High Availability ,简称HA)
为了整个系统的可靠性,我们通常会在系统中部署两台或多台主节点,多台主节点形成主备的关系,但是某一时刻只有一个主节点能够对外提供服务,当某一时刻检测到对外提供服务的主节点“挂”掉之后,备用主节点能够立刻接替已挂掉的主节点对外提供服务,而用户感觉不到明显的系统中断。这样对用户来说整个系统就更加的可靠和高效。
影响HDFS集群的可用性主要包括两种情况
(1)NameNode机器宕机,将导致集群不可用,重启NameNode之后才可使用;
(2)计划内的NameNode节点软件或硬件升级,导致集群在短时间内不可用。
这些问题给Hadoop的使用者带来困扰的同时,极大地限制了Hadoop的使用场景,使得Hadoop在很长的时间内仅能用作离线存储和计算,无法应用到对可用性和数据一致性要求很高的实时应用场景中。
为了解决上述问题,在Hadoop2.0中给出了HDFS的高可用(Hight Availability,HA )解决方案。
2 HDFS HA架构

从图中可以看出,HDFS的HA架构主要分为下面几个部分:
1)活跃的名字节点(Active NameNode)和备用的名字节点(Standby NameNode):两个NameNode形成互备,处于Active状态的是主NameNode,处于Standby的是备用NameNode,只有主NameNode才能对外提供读写服务。
2)主备切换控制器(ZKFailoverController,ZKFC):ZKFC作为独立的进程运行,对NameNode的主备切换进行总体控制。ZKFC能及时检测到NameNode的健康状况,在主NameNode故障时借助Zookeeper实现自动的主备选举和切换,当然NameNode目前也支持不依赖于Zookeeper的手动主备切换。
3)Zookeeper集群:为ZKFC提供主备选举支持。
4)共享存储系统:即图中存储共享数据的JournalNode集群(JournalNode即存储管理Editlog的守护进程)。JournalNode是实现NameNode的HA最为关键的部分,JournalNode集群保存了NameNode在运行过程中所产生的HDFS元数据。主备NameNode通过JournalNode集群实现元数据同步。在进行主备切换时,新的主NameNode确认元数据完全同步之后才能继续对外提供服务。
5)数据节点(DataNode):除了通过JournalNode集群共享HDFS的元数据信息之外,主备NameNode还需要共享HDFS的数据块与DataNode之间的映射关系。DataNode会同时向主NameNode和备NameNode上报数据块的位置信息。
3 HDFS HA机制

HDFS集群中通常由两台相互独立的机器来配置NameNode角色,无论在任何时候,集群中只能有一个NameNode是Active状态,而另一个NameNode则是Standby状态。
Active状态的NameNode作为主节点负责集群中所有客户端操作,Standby状态的NameNode仅仅扮演一个备用节点的角色,以便在Active NameNode故障时能够第一时间接替它的工作成为主节点,从而使NameNode达到一个热备份的效果。
为了让主备NameNode的元数据保持一致,它们之间的数据同步通过JournalNode集群来完成。当任何修改操作在主NameNode上执行时,它会将Editlog写到半数以上的JournalNode节点中。
当备用NameNode监测到JournalNode集群中的Editlog发生变化时,它会读取JournalNode集群中的Editlog,然后同步到FSImage中。
当发生故障造成主NameNode宕机后,备用NameNode在选举成为主NameNode之前会同步JournalNode集群中所有的Editlog,这样就能保证主备NameNode的FSImage一致。新的Active NameNode会无缝接替主节点的职责,维护来自客户端的请求并接收来自DAtaNode汇报的数据块信息,从而使NameNode达到高可用的目的。
为了实现主备NameNode故障自动切换,可以通过ZKFC对NameNode的住呗i耳环进行总体控制。每台运行NameNode的机器上都会运行一个ZKFC进程,ZKFC会定期检测NameNode的健康状况。当ZKFC检测到当前主NameNode发生故障时,会借助Zookeeper集群实现主备选举,并自动将备用NameNode切换为Active状态,从而接替主节点的工作对外提供服务。
更多推荐

所有评论(0)