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 PDF是HDFS-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节点.
根据您可以在此处找到的 hadoop 文档,为了实现自动故障转移,需要将一些内容添加到 HDFS 部署中:
1:Zookeeper 法定人数
2:ZKFailoverController流程。
要回答文档中的问题:
集群中的每台 NameNode 机器都在 ZooKeeper 中维护一个持久会话。如果机器崩溃,ZooKeeper会话将过期,通知其他NameNode应该触发故障转移
所以回答你的问题:
问:为什么名称节点可以运行某些东西来检测自己的故障?
答:每个名称节点通过在同一台计算机上运行的 ZKFailoverController (ZKFC) 服务在 ZooKeeper 上维护一个会话。当此会话到期时,将通知其他名称节点应触发故障转移。
ZKFC 健康监视器还会定期 ping 其本地名称节点(这是您的心跳),如果名称节点崩溃,则健康监视器会将该名称节点标记为不健康。
当发生故障的名称节点正常并且是活动名称节点时,它会维护一个特殊的“锁定”znode。当名称节点被标记为不健康时,该锁将被删除。当另一个名称节点发现当前没有其他节点持有锁 znode 时,它将尝试获取锁。如果它这样做,那么它就成为活动名称节点。
问:谁给谁发送心跳?它如何检测名称节点故障?
答:再来一次。动物园管理员会话。
问:这个进程在哪里运行?
答:ZooKeeper可以安装在单机上,也可以安装在集群上。您可以在此处阅读文档。
问:过渡通知谁?
答:这都是由每台机器上运行的 ZKFailoverController 进程处理的。
这里还有另一篇好文章,它比我的话更好地形象化了这一点。
归档时间: |
|
查看次数: |
17272 次 |
最近记录: |