Hadoop Namenode 故障转移过程如何工作?

How does Hadoop Namenode failover process works?

Hadoop 权威指南说 -

Each Namenode runs a lightweight failover controller process whose job it is to monitor its Namenode for failures (using a simple heartbeat mechanism) and trigger a failover should a namenode fail.

为什么名称节点可以 运行 检测到自己的故障?

谁向谁发送心跳?

这个进程在哪里 运行s?

它如何检测名称节点故障?

过渡通知给谁?

来自Apache docs

ZKFailoverController (ZKFC) 是一个新组件,它是一个 ZooKeeper 客户端,它还监视和管理 NameNode 的状态。每个运行 NameNode 的机器也运行 ZKFC,并且 ZKFC 负责:

健康监控 - ZKFC 定期 ping 其本地 NameNode health-check 命令。只要 NameNode 以健康状态及时响应,ZKFC 就认为该节点是健康的。如果节点崩溃、冻结或以其他方式进入不健康状态,健康监视器会将其标记为不健康。

ZooKeeper 会话管理 - 当本地 NameNode 健康时,ZKFC 在 ZooKeeper 中打开一个会话。如果本地 NameNode 处于活动状态,它还会持有一个特殊的“lock”znode。这个锁使用 ZooKeeper 对“ephemeral”节点的支持;如果session过期,锁节点会自动删除

ZooKeeper-based 选举 - 如果本地 NameNode 是健康的,并且 ZKFC 看到当前没有其他节点持有锁znode,它自己会尝试获取锁。 If it succeeds, then it has "won the election", and is responsible for 运行 a failover to make its local NameNode active .

看看这个 Apache PDF 它是 HDFS-2185 JIRA 问题

的一部分

幻灯片 16 来自

http://www.slideshare.net/cloudera/hdfs-update-lipcon-federal-big-data-apache-hadoop-forum

:

Hadoop 中的自动 Namenode 故障转移过程:

In a typical HA cluster, two separate machines are configured as NameNodes. At any point in time, exactly one of the NameNodes is in an Active state, and the other is in a Standby state. The Active NameNode is responsible for all client operations in the cluster, while the Standby is simply acting as a slave, maintaining enough state to provide a fast failover if necessary.

为了让备用名称节点保持其状态与活动名称节点同步,两个节点都与一组称为 JournalNodes (JNs) 的独立守护进程进行通信。

当 Active 节点执行任何名称space 修改时,它会持久地将修改记录记录到这些 JN 中的大多数。 Standby 节点从 JN 中读取这些编辑并应用到它自己的名称 space.

如果发生故障转移,备用节点将确保在将自身提升为活动状态之前已从 JounalNodes 读取所有编辑。这确保在发生故障转移之前名称space 状态完全同步。

对于 HA 集群来说,一次只有一个 NameNodes 处于活动状态是至关重要的。 ZooKeeper 已用于避免脑裂情况,因此名称节点状态不会因故障转移而发生分歧。

幻灯片 8 来自:http://www.slideshare.net/cloudera/hdfs-futures-world2012-widescreen

:

总结:名称节点是守护进程,故障转移控制器是守护进程。如果名称节点守护进程失败,故障转移控制器守护进程会检测并采取纠正措施。即使整个机器崩溃,ZooKeeper服务器检测到它并且锁定将过期并且其他备用名称节点将被选为活动名称节点。