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

K24*_*246 16 failover hadoop hdfs hadoop2 namenode

Hadoop权威指南说 -

每个Namenode都运行一个轻量级故障转移控制器进程,其工作是监视其Namenode的故障(使用简单的心跳机制),并在namenode失败时触发故障转移.

为什么namenode可以运行某些东西来检测自己的失败?

谁向谁发送心跳?

这个过程在哪里运行?

它如何检测namenode失败?

它向谁通知过渡?

Rav*_*abu 35

来自Apache文档

所述ZKFailoverController(ZKFC)是一种新的组分,它是一个动物园管理员的客户端,其还监视和管理的NameNode的状态.运行NameNode的每台机器也运行ZKFC,ZKFC负责:

运行状况监视 - ZKFC定期使用运行状况检查命令对其本地NameNode进行ping操作.只要NameNode及时响应健康状态,ZKFC就认为该节点是健康的.如果节点已崩溃,冻结或以其他方式进入不健康状态,则运行状况监视器会将其标记为运行状况不佳.

ZooKeeper会话管理 - 当本地NameNode运行正常时,ZKFC在ZooKeeper中保持会话打开.如果本地NameNode处于活动状态,它还拥有一个特殊的" 锁定 "znode.此锁使用ZooKeeper对" 短暂 "节点的支持; 如果会话过期,将自动删除锁定节点.

基于ZooKeeper的选举 - 如果本地NameNode是健康的,并且ZKFC发现没有其他节点当前持有锁znode,它将自己尝试获取锁.如果成功,那么它" 赢得了选举 ",并负责运行故障转移以使其本地NameNode处于活动状态.

看看这个Apache PDFHDFS-2185 JIRA问题的一部分

从中滑动16

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

在此输入图像描述 :

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

在典型的HA群集中,两台独立的计算机配置为NameNode.在任何时间点,其中一个NameNode处于活动状态,另一个处于待机状态.Active NameNode负责集群中的所有客户端操作,而Standby只是充当从属服务器,维持足够的状态以在必要时提供快速故障转移.

为了使备用Namenode保持其状态与Active Namenode同步,两个节点都与一组名为JournalNodes(JN)的独立守护进程通信.

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

如果发生故障转移,Standby将确保在将自身升级为Active状态之前已读取JounalNodes的所有编辑内容.这可确保在发生故障转移之前完全同步命名空间状态.

对于HA群集而言,一次只有一个NameNode处于活动状态至关重要.ZooKeeper已被用于避免裂脑情况,因此名称节点状态不会因故障转移而分歧.

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

在此输入图像描述 :

在摘要中: 名称节点是守护程序和故障转移控制器是一个守护程序.如果名称节点守护程序失败,则故障转移控制器守护程序会检测并采取纠正措施.即使整个机器崩溃,ZooKeeper服务器也会检测到它并且锁定将过期,其他备用名称节点将被选为Active Name节点.


Jim*_*son 0

根据您可以在此处找到的 hadoop 文档,为了实现自动故障转移,需要将一些内容添加到 HDFS 部署中:

1:Zookeeper 法定人数

2:ZKFailoverController流程。

要回答文档中的问题:

集群中的每台 NameNode 机器都在 ZooKeeper 中维护一个持久会话。如果机器崩溃,ZooKeeper会话将过期,通知其他NameNode应该触发故障转移

所以回答你的问题:

问:为什么名称节点可以运行某些东西来检测自己的故障?

答:每个名称节点通过在同一台计算机上运行的 ZKFailoverController (ZKFC) 服务在 ZooKeeper 上维护一个会话。当此会话到期时,将通知其他名称节点应触发故障转移。

ZKFC 健康监视器还会定期 ping 其本地名称节点(这是您的心跳),如果名称节点崩溃,则健康监视器会将该名称节点标记为不健康。

当发生故障的名称节点正常并且是活动名称节点时,它会维护一个特殊的“锁定”znode。当名称节点被标记为不健康时,该锁将被删除。当另一个名称节点发现当前没有其他节点持有锁 znode 时,它​​将尝试获取锁。如果它这样做,那么它就成为活动名称节点。

问:谁给谁发送心跳?它如何检测名称节点故障?

答:再来一次。动物园管理员会话。

问:这个进程在哪里运行?

答:ZooKeeper可以安装在单机上,也可以安装在集群上。您可以在此处阅读文档。

问:过渡通知谁?

答:这都是由每台机器上运行的 ZKFailoverController 进程处理的。

这里还有另一篇好文章,它比我的话更好地形象化了这一点。