HA功能中ZKFC对NN状态的控制
Posted lxl
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了HA功能中ZKFC对NN状态的控制相关的知识,希望对你有一定的参考价值。
ZKFC : zookeeper FailoverController
NN : name node
Hadoop 2.0 HA架构图:
FC是要和NN一一对应的,两个NN就要部署两个FC。它负责监控NN的状态,并及时的把状态信息写入ZK。它通过一个独立线程周期性的调用NN上的一个 特定接口来获取NN的健康状态。FC也有选择谁作为Active NN的权利,因为最多只有两个节点,目前选择策略还比较简单(先到先得,轮换)。
ZKFC是Hadoop中通过ZK实现FC功能的一个实用工具。
ZKFC的主类是org.apache.hadoop.hdfs.tools.DFSZKFailoverController。
- formatZK
创建特定目录,作为后续写节点状态的父路径。如果该目录已经存在,清理原有目录为空目录。
- HealthMonitor
在一个独立线程中,通过RPC方式,周期性的调用HAServiceProtocol接口的monitorHealth方法,获取NN的状态。并把状态报告给ActiveStandbyElector 。
- ActiveStandbyElector
ActiveStandbyElector 负责判断哪个NN可以成为Active。它通过ZK,看哪个能够成功的创建一个特定的ephemeral lock file (znode),哪个就是Active,其它的成为Standby。在一个节点被通知变成Active后,它必须确保自己能够提供一致性的服务(数据一致性),否则它需要主动退出选举。
如果一个Active因HealthMonitor监控到状态异常,这里会作出判断,先通过Fenceing功能关闭它(确保关闭或者不能提供服务),然后在ZK上删除它对应ZNode。
发送上述事件后,在另外一台机器上的ZKFC中的ActiveStandbyElector 会收到事件,并重新进行选举(尝试创建特定ZNode),它将获得成功并更改NN中状态,从而实现Active节点的变更。
以上是关于HA功能中ZKFC对NN状态的控制的主要内容,如果未能解决你的问题,请参考以下文章
[Hadoop]Hadoop章3 NameNode的ZKFC机制
大数据 Hadoop 高可用HA(Journal,ZooKeeper)
解决HA is not enable for this namenode错误