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