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

标签 hadoop hdfs hadoop2 failover namenode

Hadoop 权威指南说 -

Each Namenode runs a lightweight failover controller process whose job it is to monitor its Namenode for failures (using a simple heartbeat mechanism) and trigger a failover should a namenode fail.

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

谁向谁发送心跳?

这个进程在哪里运行?

它如何检测名称节点故障?

过渡通知给谁?

最佳答案

来自 Apache docs

ZKFailoverController (ZKFC) 是一个新组件,它是一个 ZooKeeper 客户端,它还监视和管理 NameNode 的状态。每个运行 NameNode 的机器也运行一个 ZKFCZKFC 负责:

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

ZooKeeper session 管理 - 当本地 NameNode 健康时,ZKFC 在 ZooKeeper 中保持一个打开的 session 。如果本地 NameNode 处于事件状态,它还会持有一个特殊的“lock”znode。这个锁使用了 ZooKeeper 对“ephemeral”节点的支持;如果 session 过期,锁节点将被自动删除。

基于 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

enter image description here :

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

In a typical HA cluster, two separate machines are configured as NameNodes. At any point in time, exactly one of the NameNodes is in an Active state, and the other is in a Standby state. The Active NameNode is responsible for all client operations in the cluster, while the Standby is simply acting as a slave, maintaining enough state to provide a fast failover if necessary.

为了让备用 Namenode 保持其状态与事件 Namenode 同步,两个节点都与一组称为 JournalNodes (JNs) 的独立守护进程进行通信。

当主动节点执行任何命名空间修改时,它会持久记录对这些 JN 中的大多数的修改记录。 Standby 节点从 JN 中读取这些编辑并应用到它自己的 namespace 。

如果发生故障转移,备用节点将确保在将自身提升为事件状态之前已从 JounalNodes 读取所有编辑。这可确保命名空间状态在发生故障转移之前完全同步。

对于 HA 集群来说,一次只有一个 NameNode 处于事件状态是至关重要的。 ZooKeeper 已用于避免脑裂情况,因此名称节点状态不会因故障转移而发生分歧。

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

enter image description here :

总结: 名称节点是守护进程,故障转移 Controller 是守护进程。如果名称节点守护进程失败,故障转移 Controller 守护进程会检测并采取纠正措施。即使整个机器崩溃,ZooKeeper 服务器检测到它并且锁定将过期并且其他备用名称节点将被选为事件名称节点。

关于hadoop - Hadoop Namenode 故障转移过程如何工作?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33311585/

相关文章:

本地文件系统上的 Hadoop

hadoop - Oozie示例 map 缩小作业失败,并出现java.lang.NoSuchFieldError:HADOOP_CLASSPATH

hadoop - hive 计数不匹配的原因

hadoop - 我如何在hadoop工作中通过Third Argument

bash - ssh 函数上的 bash 脚本中的意外行为

hadoop - IBUS警告**:/home/user/.config/ibus/bus的所有者不是root?

docker - 为Elasticsearch注册基于HDFS的快照存储库时出现连接拒绝错误

sql - Hive 加入理解问题

hadoop - 由启动集群的同一用户运行时,Pig MR作业失败

hadoop - 尝试从Hadoop URL读取数据,但无法读取错误信息