Hadoop 权威指南说 -
每个Namenode都运行一个轻量级故障转移控制器进程,其 工作是监控其Namenode是否出现故障(使用一个简单的 心跳机制)并在名称节点发生故障时触发故障转移 失败。
名称节点为什么可以运行某些东西来检测自己的故障?
谁向谁发送心跳?
这个进程在哪里运行?
它如何检测名称节点故障?
向谁通知过渡?
根据 hadoop 文档,您可以在here找到,为了实现自动故障转移,需要在 HDFS 部署中添加一些内容:
1:Zookeeper 法定人数
2:ZKFailoverController流程。
通过文档回答您的问题:
集群中的每台NameNode机器都在ZooKeeper中维护一个持久会话。如果机器崩溃,ZooKeeper 会话将过期,通知其他 NameNode 应触发故障转移
所以回答你的问题:
问:名称节点为什么可以运行一些东西来检测自己的故障?
A:每个名称节点通过在同一台机器上运行的 ZKFailoverController (ZKFC) 服务在 ZooKeeper 上维护一个会话。当此会话过期时,将通知其他名称节点应触发故障转移。
ZKFC 健康监视器还会定期 ping 其本地名称节点(这是您的心跳),如果名称节点崩溃,健康监视器会将该名称节点标记为不健康。
当发生故障的名称节点健康并且是活动名称节点时,它会维护一个特殊的“锁定”znode。当名称节点被标记为不健康时,该锁将被删除。当另一个名称节点发现当前没有其他节点持有锁 znode 时,它将尝试获取锁。如果它这样做,那么它就成为活动名称节点。
问:谁给谁发送心跳?它如何检测名称节点故障?
答:再说一遍。 ZooKeeper 会话。
问:这个进程在哪里运行?
A:ZooKeeper 可以安装在单机上,也可以安装在集群上。您可以阅读文档这里。
问:过渡通知谁?
A:这都是由每台机器上运行的 ZKFailoverController 进程处理的。
还有另一篇好文章这里,它比我的话更形象化地描述了这一点。