2015-10-23 31 views
13

Hadoop的defintive指南说 -Hadoop Namenode故障转移过程如何工作?

每个的Namenode运行一个轻量级的故障转移控制器的过程,其 工作是监视其故障(使用简单 心跳机制)NameNode和触发故障切换应在namenode 失败。

怎么一个namenode可以运行某些东西来检测自己的失败?

谁给谁发心跳?

这个过程在哪里运行?

它如何检测namenode失败?

它通知过渡的人?

回答

27

Apache docs

ZKFailoverController(ZKFC)是一种新的组分,它是一个动物园管理员客户端也监视和管理名称节点的状态。每一个运行在的NameNode的机器还运行ZKFC,那ZKFC负责:

健康监测 - 有定期的ZKFC坪当地的NameNode健康检查命令。只要NameNode以及时响应且健康状态,认为节点健康。如果节点崩溃,冻结或以其他方式进入不健康状态,则健康监视器会将其标记为不健康。

ZooKeeper的会话管理 - 当本地NameNode的是健康的,在ZKFC持有ZooKeeper的开放的会话。如果本地NameNode处于活动状态,则它还包含一个特殊的“”znode。此锁使用ZooKeeper对“短暂”节点的支持;如果会话过期,锁定节点将被自动删除。

基于ZooKeeper的选 - 如果本地NameNode的是健康的,而ZKFC认为没有其他节点当前持有锁Z序节点,它会自己尝试获取锁。如果成功,则它有“赢得选举”,并负责运行故障转移以使其本地NameNode处于活动状态。

看一看这个Apache PDF是从

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

enter image description hereHDFS-2185 JIRA问题

幻灯片16部分:

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

在典型的HA群集中,两台独立的机器配置为NameNode。在任何时候,只有一个NameNodes处于Active状态,另一个处于Standby状态。活动NameNode负责群集中的所有客户端操作,而Standby仅充当从服务器,并保持足够的状态以在必要时提供快速故障转移。

为了使待机的Namenode,以保持其与Active的Namenode同步状态,两个节点与一组独立的守护进程称为JournalNodes(JNS)进行通信。

当活动节点执行任何名称空间修改时,它会将修改记录持久记录到大多数这些JN中。备用节点从JN读取这些编辑并应用于其自己的名称空间。

如果发生故障切换,备用服务器将确保在将自己提升为活动状态之前,它已从JounalNodes中读取所有编辑。这确保了在故障转移发生之前命名空间状态已完全同步。

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

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

enter image description here

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

+0

Awsome!谢谢。我认为书本文本不合适,它想convay每个namenode **(机器)**运行一个轻量级故障转移控制器进程,其工作是监视其名称节点**(守护进程)**失败 – K246

+0

我建议编辑您的问题更加通用,如:Hadoop Name节点故障转移过程如何工作? –