HDFS 新特性-NameNode 高可用机制

在Hadoop 中,HDFS NameNode 所处的位置是非常重要的,整个HDFS文件系统的元数据信息都由NameNode 来管理,NameNode的可用性直接决定了Hadoop 的可用性,一旦NameNode进程不能工作了,就会影响整个集群的正常使用。

HDFS NameNode 高可用机制


在典型的高可用集群中,会使用两台独立的机器作为NameNode,任何时刻,只有一个NameNode 处于Active 状态。另外一个处于Standby 状态。而Standby NameNode 只是简单地充当Slave,它负责维护状态信息以便在需要时能够快速切换。

主备切换控制器ZKFailoverController:ZKFailoverController 作为独立的进程运行,对NameNode的主备切换进行总体控制。ZKFailoverController 能及时检测到NameNode 的健康状况,在主NameNode故障时借助ZooKeepper 实现自动的主备选举和切换。当然,也可以不借助ZooKeeper,进行手动的主备切换。

ZKFailoverController 的主要职责:

1)健康检测:周期性地向它监控的NameNode发送健康探测命令,从而来确定某个NameNode是否处于健康状态。如果机器宕机,心跳失败,则会被标记为不健康的状态。

2)master 选举:通过在ZooKeeper 中维持一个短暂类型的Znode,来实现抢占式的锁机制,从而判断哪一个NameNode 为Active 状态。(对znode 加锁吗?)

3)  会话管理:如果NameNode 是健康的,ZKFailoverController 就会在Zookepper 中保持一个打开的会话,如果同时NameNode 还是Active 状态的,那么ZKFailoverController 还会在Zookeeper 中占有一个类型为短暂类型的znode,当NameNode 挂掉时,这个NameNode 会被删除掉。然后备用的NameNode 将会获取到锁,升级为主NameNode,并被标记为Active 状态。当宕机的NameNode 重新启动时,它会再次注册Zookeeper,发现已经有znode 锁了,便会自动变为Standby状态。

共享存储系统(Quorum Journal Node):为了让Standby Node 与 Active Node 保持同步的状态,它们都要与Journal Node(一组独立的进程) 通信。Active Node 所做的任何对名字空间的修改,都会将修改记录的日志发送给大多数的JN,Standby Node 能够从JN 中读取 edit ,并时时监控它们对edit log 的修改。Standby Node 获取到edit 后,将它们应用到自己的名字空间。故障切换时,Standby 在提升自己为Active 状态前已经从JN中读完了所有的 edit,这就确保了故障切换发生前两个NameNode 名字空间的状态是完全同步的。

DataNode 节点:除了通过共享存储系统共享HDFS 的元数据信息之外,主NameNode 和 从NameNode 还要共享HDFS 的数据块 和 DataNode 之间的映射关系。DataNode 会 同时向主NameNode 和 从NameNode 上报 数据块的位置信息。

NameNode 的主备切换实现原理

NameNode 主备切换主要由ZKFailoverController、HealthMonitor 和 ActiveStandbyElector 这三个组件来协同实现。

ZKFailoverController作为NameNode 机器上的一个独立的进程启动(进程名为zkfc),启动的时候会创建HealthMonitor 和 ActiveStandbyElector 这两个主要的内部组件。ZKFailover 在创建HealthMonitor 和 ActiveStandbyElector 的同时,也会向HealthMonitor 和 ActiveStandbyElector 注册相应的回调方法。

HealthMonitor 主要负责检测NameNode 的健康状态,如果检测到NameNode 的健康状态发生变化,会回调ZKFailoverController 的相应方法进行自动的主备选举。

ActiveStandbyElector 主要负责完成自动的主备选举,内部封装了ZooKeepper 的处理逻辑,一旦 ZooKeeper 主备选举完成,会调用ZKFailoverController 的相应方法来进行NameNode的主备状态切换。

参考文献:https://www.cnblogs.com/hellochennan/p/5373177.html

猜你喜欢

转载自www.cnblogs.com/wbringarden/p/10252564.html