HDFS作为Hadoop大数据生态下的分布式文件系统,在越来越大规模的数据场景下,HDFS历经考验,其性能也得到肯定。并且HDFS也针对不断变化的形式,推出了HA高可用机制。今天的大数据开发分享,我们就来具体讲讲,HDFS的HA原理。
HDFS的HA高可用,其实本质上是Namenode HA。NameNode作为HDFS底层的重要角色,如果挂掉会导致存储停止服务,无法进行数据的读写,基于此NameNode的计算(hbase,hive等)也无法完成。
HDFS Namenode HA如何实现?
首先,保持主和备NameNode的状态同步,并让Standby在Active挂掉后迅速提供服务。nameNode切换对外透明,主Namenode切换到另外一台机器时,不应该导致正在连接的客户端失败,主要包括Client,Datanode与NameNode的链接。
其次,脑裂(split-brain),指在一个高可用(HA)系统中,当联系着的两个节点断开联系时,本来为一个整体的系统,分裂为两个独立节点,这时两个节点开始争抢共享资源,结果会导致系统混乱,数据损坏。
HDFS HA架构原理
通常来说,非HA的Namenode架构,一个HDFS集群只存在一个NN,DN只向一个NN汇报,NN的editlog存储在本地目录。
HA的架构
简单介绍一下上面的组件:
Active NameNode和Standby NameNode:两台NameNode形成互备,一台处于Active状态,为主NameNode,另外一台处于Standby状态,为备NameNode,只有主NameNode才能对外提供读写服务;
ZKFailoverController(主备切换控制器,FC):ZKFailoverController作为独立的进程运行,对NameNode的主备切换进行总体控制。ZKFailoverController能及时检测到NameNode的健康状况,在主NameNode故障时借助Zookeeper实现自动的主备选举和切换(当然NameNode目前也支持不依赖于Zookeeper的手动主备切换);
Zookeeper集群:为主备切换控制器提供主备选举支持;
共享存储系统:共享存储系统是实现NameNode的高可用最为关键的部分,共享存储系统保存了NameNode在运行过程中所产生的HDFS的元数据。主NameNode和备NameNode通过共享存储系统实现元数据同步。
在进行主备切换的时候,新的主NameNode在确认元数据完全同步之后才能继续对外提供服务。共享存储系统可通过Network File System(NFS),Quorum Journal Node(QJN))2种方式实现,NFS是通过linux共享的文件系统,属于操作系统的配置;QJM是hadoop自身的东西,属于软件的配置。
DataNode节点:因为主NameNode和备NameNode需要共享HDFS的数据块和DataNode之间的映射关系,为了使故障切换能够快速进行,DataNode会同时向主NameNode和备NameNode上报数据块的位置信息。
HA关键问题的解决
1、主和备NameNode的保持状态同步,并让Standby在Active挂掉后迅速提供服务?
ZKFailoverController主备切换控制器,对NameNode的主备切换进行总体控制。
NameNode和备NameNode通过共享存储系统实现元数据同步。在进行主备切换的时候,新的主NameNode在确认元数据完全同步之后才能继续对外提供服务。
2、脑裂(split-brain)问题
主要是在以下三处采用隔离措施:
第三方共享存储:任一时刻,只有一个NN可以写入;
DataNode:需要保证只有一个NN发出与管理数据副本有关的删除命令;
Client:需要保证同一时刻只有一个NN能够对Client的请求发出正确的响应。
关于大数据开发,HDFS的HA原理,以上就为大家做了简单的介绍了。Hadoop HDFS的HA高可用,还是需要结合到具体场景下的需求去考虑,不建议盲目采用HA高可用模式。
网友评论