Hadoop权威指南说 -
每个Namenode都运行一个轻量级故障转移控制器进程 工作监控其Namenode的故障(使用简单的 心跳机制)并触发故障转移应该是namenode 失败。
为什么namenode可以运行某些东西来检测自己的失败?
谁向谁发送心跳?
这个过程在哪里运行?
它如何检测namenode失败?
向谁通知过渡?
答案 0 :(得分:33)
ZKFailoverController (ZKFC)是一个新组件,它是 ZooKeeper 客户端,它还监视和管理NameNode的状态。运行 NameNode 的每台计算机也运行 ZKFC ,而 ZKFC 负责:
运行状况监控 - ZKFC 使用运行状况检查命令定期ping其本地 NameNode 。只要NameNode及时响应健康状态, ZKFC 就会认为节点是健康的。如果节点崩溃,冻结或以其他方式进入不健康状态,健康监视器会将其标记为不健康。
ZooKeeper会话管理 - 当本地NameNode运行正常时, ZKFC 会在ZooKeeper中保持会话打开。如果本地NameNode处于活动状态,它还会保留一个特殊的“ lock ”znode。此锁使用ZooKeeper对“短暂”节点的支持;如果会话到期,锁定节点将被自动删除。
基于ZooKeeper的选举 - 如果本地 NameNode 运行正常,并且 ZKFC 发现当前没有其他节点拥有锁定znode,它本身会试图获得锁定。如果成功,则“赢得选举”,并负责运行故障转移以使其本地 NameNode 处于活动状态。
查看此Apache PDF,这是 HDFS-2185 JIRA问题的一部分
从
滑动16http://www.slideshare.net/cloudera/hdfs-update-lipcon-federal-big-data-apache-hadoop-forum
Hadoop中的自动名称节点故障转移过程:
在典型的HA群集中,两台独立的计算机配置为NameNode。在任何时间点,其中一个NameNode处于活动状态,另一个处于待机状态。 Active NameNode负责集群中的所有客户端操作,而Standby只是作为从属服务器,维护足够的状态以在必要时提供快速故障转移。
为了使备用Namenode保持其状态与Active Namenode同步,两个节点都与一组名为 JournalNodes (JN)的独立守护进程通信。
当Active节点执行任何名称空间修改时,它会将修改记录持久地记录到大多数这些JN中。 Standby节点从JN读取这些编辑并应用于自己的名称空间。
如果发生故障转移,Standby将确保在将自身升级为Active状态之前已读取JounalNodes的所有编辑内容。这可确保在发生故障转移之前完全同步命名空间状态。
对于HA群集而言,一次只有一个 NameNodes 处于活动状态至关重要。 ZooKeeper 已被用于避免裂脑情况,因此名称节点状态不会因故障转移而分歧。
幻灯片8:http://www.slideshare.net/cloudera/hdfs-futures-world2012-widescreen
摘要: 名称节点是守护程序&故障转移控制器是守护程序。如果名称节点守护程序失败,则故障转移控制器守护程序会检测并采取纠正措施。即使整个机器崩溃, ZooKeeper 服务器也会检测到它并且锁定将过期,其他备用名称节点将被选为Active Name节点。