08-永不停歇的大象-Hadoop高可用与自动故障转移

Hadoop高可用与自动故障转移

本章目标

  1. 什么是Hadoop高可用
  2. 什么是故障转移
  3. 自动故障转移

1 什么是Hadoop高可用

在Hadoop2.0之前,也就是Hadoop1.0面临NameNode的单点故障( single point of failure,SPOF)问题。这就意味着,如果NameNode失效则整个系统将失去功能,此时就需要人为介入,在宕机时间,利用secondary NameNode来承担Hadoop集群功能。到了Hadoop2.0,我们有了一个standby node(备用节点)利用它完成故障自动转移,而到了Hadoop3.0,则支持多个standby node,系统变得更加高可用。

我们本节将讨论各种故障类型,并且讨论Zookeeper组件是如何提供自动故障转移的。

到了Hadoop2.0,我们支持多个NameNode,而Hadoop3.0,我们有了standby node(备用节点)。通过额外的NameNode进行故障自动转移,我们就解决了单点故障问题。这就是Hadoop的高可用。

2 什么是故障转移

故障转移是指当发生故障事件时,将系统控制转移到后备系统的过程。

有两种类型的故障转移:

  • 平稳故障转移(Graceful Failover):这种类型的故障转移是由管理员手动实现的。我们通过平稳故障转移来实现常规的系统维护。它需要手工将控制转换到备用NameNode,这不是一个自动过程。
  • 自动故障转移(Automatic Failover):在自动故障转移模式下,系统无需人工干预自动切换到备用NameNode。如果没有自动故障转移,当整个系统瘫痪时NameNode也会跟着瘫痪。因此,仅有在自动故障转移有效时,Hadoop的高可用性才是有效的。它为单点故障提供一个保障作用。

3 自动故障转移

Hadoop中的自动故障转移在Hadoop HDFS部署上添加了如下组件:

  • ZooKeeper quorum(['kwɔːrəm] 法定人数)
  • ZKFailoverController (ZKFC)

3.1 Zookeeper Quorum

Zookeeper quorum是为维护少量数据的协调、配置和命名的集中服务。它提供了分组和同步的服务。它将数据改变通知到客户端,并且跟踪客户端的故障。HDFS自动故障转移需要依赖Zookeeper的如下特性:

  • 故障侦测:Zookeeper为NameNode维护一个会话,当发生故障时,这个会话就会过期,zookeeper会通知其他NameNode启动故障转移过程。
  • Active NameNode选举:Zookeeper提供了一种方法来选举某个节点作为活动节点。因此,当NameNode活动节点故障时,另外一个节点会获得一个排他锁,成为下一个NameNode活动节点。

3.2 ZKFailoverController (ZKFC)

ZKFC是Zookeeper用来监控和管理namenode状态的客户端。因此,每一个运行namenode服务的机器都会运行一个ZKFC。

ZKFC负责处理:

  • 健康监控:ZKFC会周期性地使用健康检查命令去ping活动的NameNode节点,如果NameNode不及时回应,该节点就会被标记为非健康的。这也是经常发生的情况,因为Name可能崩溃或者冻结。
  • Zookeeper会话管理:如果本地NameNode是监控的,Zookeeper会保持一个开放的会话(session)。如果本地NameNode是活动的,它会保持一个特殊的znode锁。当会话过期,这个锁会自动删除。
  • 基于Zookeeper的选举:如果存在这样一个情形,本地节点是健康的,而且ZKFC又知道另外一个节点正持有znode锁,那么ZKFC自己就会试图去获得那把锁。如果成功获取,那么它就赢得了选举,又它来负责运行故障转移。这个故障转移过程和手工进行故障转移类似,首先,如果有必要,上一个活动节点会被隔离,然后本地节点成为活动节点。

总结

上面介绍的就是Hadoop的高可用。由于Zookeeper不会占用太多资源,因此它会和HDFS Namenode或者standy Namenode运行在一起。很多操作者会选择在运行YARN Resource Manager的节点上部署第三方Zookeeper程序。但是,我们建议把Zookeeper数据和HDFS元数据分开存放,比如放到不同的磁盘上,这样会具有更佳的性能。

你可能感兴趣的:(08-永不停歇的大象-Hadoop高可用与自动故障转移)