Hadoop HDFS HA 高可用

2019-09-09 16:26:06 浏览数 (1)

1

在Hadoop 1.x 中,Namenode是集群的单点故障,一旦Namenode出现故障,整个集群将不可用,重启或者开启一个新的Namenode才能够从中恢复。

这里注意一下,SecondaryNamenode并没有提供故障转移的能力

那么这里怎么避免这种单点故障呢?不可否认我们会遇到这种突然在namenode节点上的主机突然down掉。或者在升级维护时,要停止一段时间namenoode。然而,namenode掌握着整个hdfs的元数据信息,一旦namenode挂掉,这个hdfs就无法访问,同时依赖于hdfs的各个组件也无妨正常工作。

于是在Hadoop2.0中,HDFS NameNode 和 YARN ResourceManger(JobTracker 在 2.0 中已经被整合到 YARN ResourceManger 之中) 的单点问题都得到了解决。

2

既然是解决单点故障,那么只要使用多个namenode不就可以了吗?但这里要保证多个namenode中只能有一个在工作,其他的不工作,但是要时时同步,工作的namenode节点上的元数据,以便在工作的namenode挂掉时候能够及时补上。这里两台 NameNode 形成互备,一台处于 Active 状态,为主 NameNode,另外一台处于 Standby 状态,为备 NameNode只有主 NameNode 才能对外提供读写服务

具体的结构请看。

主备切换控制器 ZKFailoverController:ZKFailoverController 作为独立的进程运行,对 NameNode 的主备切换进行总体控制。ZKFailoverController 能及时检测到 NameNode 的健康状况,在主 NameNode 故障时借助 Zookeeper 实现自动的主备选举切换,当然 NameNode 目前也支持不依赖于 Zookeeper 的手动主备切换。

Zookeeper 集群:为主备切换控制器提供主备选举支持。

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

这里再强调一次,NameNode 通过共享存储系统实现元数据同步。在进行主备切换的时候,新的主 NameNode 在确认元数据完全同步之后才能继续对外提供服务

3

这里看看主备切换流程。

NameNode 主备切换主要由 ZKFailoverController、HealthMonitor 和 ActiveStandbyElector 这 3 个组件来协同实现。

这边就不仔细讲述了。具体可见:https://www.ibm.com/developerworks/cn/opensource/os-cn-hadoop-name-node/,这个文章写得真的是好!!太详细了!!

0 人点赞