Hadoop-2.7.0中HDFS NameNode HA实现综述

一、原理

      HDFS中NameNode等的HA是基于ZooKeeper实现的。它应用了ZooKeeper集群的如下功能或特性:

      1、只要半数以上节点还存活,就继续能对外提供服务;

      2、ZooKeeper通过Paxos算法提供了leader选举功能,其它follower learn leader;

      3、ZooKeeper提供了watcher机制,只要ZooKeeper上znode增减,或内容发生变化,或其子znode有增减,客户端都可以通过注册的watcher获得通知;

      4、ZooKeeper提供了持久化节点和临时节点,尤其是临时节点EPHEMERAL,其在ZooKeeper客户端连接断掉后,会自动删除。

      正是基于ZooKeeper的上述特性,HDFS的NameNode实现了HA,NameNode的状态大致可分为Active和Standby两种,NameNode竞争在ZooKeeper指定路径上注册临时节点,将自己的host、port、nameserviceId、namenodeId等数据写入节点,哪个NameNode争先写入成功,哪个就成为Active NameNode。然后,会有后台工作线程周期性检查NameNode状态,并在一定条件下(比如Active NameNode节点发生故障等)发生竞选,由NameNode再去竞争,实现故障转移和状态切换。

      上述就是HDFS NameNode HA实现的大体思路。而HDFS NameNode HA的架构和实现细节是怎么样的?下面我来介绍下。

二、实现

      首先上一张Hadoop HDFS NameNode HA的设计图,如下:


        简单描述下这张图:

        首先,NameNode(NN)、DataNode(DN)均是HDFS中的组件或节点,NN有两个,分为Active和Standby状态,DN有多个,DN周期性向Active和Standby做数据块汇报;

        其次,处于中间位置的,实现HDFS NameNode HA最关键的组件是FailoverController,它是运行在NameNode节点上的守护进程,将Active NN节点的信息通过竞争的方式注册到ZooKeeper上,并实现以下三个基本功能:

            1)有一个后台线程,周期性的检查NameNode的健康状况,即粗的红色拐弯箭头的Monitor Health,触发状态选举等;

            2)定期保持与ZooKeeper的心跳,完成Leader选举(即Active节点选举)和检查Active NN ZNode节点状态等工作,即最上面与ZooKeeper交互的蓝色箭头;

            3)向NameNode发送一些命令,完成状态切换。

        所以,NN HA的主体思路就是:

        1、NN竞争在ZooKeeper上注册,即create一个临时节点,写入NN的host、port、nameserviceId、namenodeI等信息,那个写入成功,那个就是Active状态;

        2、注册成功后,通过create后的watcher机制,FailoverController会发送命令给各个NN,让其确定各自状态和职责;

        3、Monitor Health会周期性连接NN,检查NN状态,并由可能触发重新选举,即重复1-2;

        4、FailoverController会与ZooKeeper保持心跳,注册的临时节点消失后,也会触发重新选举。


        那么,HDFS是如何实现NameNode HA的呢?对应上图,Hadoop中实现了以下模型:


        上图的三个关键组件即是:

        1、DFSZKFailoverController(继承自抽象类ZKFailoverController):ZKFC,故障转移控制器,守护进程,负责总体故障转移和命令发布;

        2、ActiveStandbyElector:Active、Standby选举器,实现选举功能;

        3、HealthMonitor:健康监视器,实现NN状态的定时监控。


        上述组件各自是如何实现的,请关注后续文章。


优秀的个人博客,低调大师

微信关注我们

原文链接:https://yq.aliyun.com/articles/245566

转载内容版权归作者及来源网站所有!

低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。

相关文章

发表评论

资源下载

更多资源
优质分享Android(本站安卓app)

优质分享Android(本站安卓app)

近一个月的开发和优化,本站点的第一个app全新上线。该app采用极致压缩,本体才4.36MB。系统里面做了大量数据访问、缓存优化。方便用户在手机上查看文章。后续会推出HarmonyOS的适配版本。

Mario,低调大师唯一一个Java游戏作品

Mario,低调大师唯一一个Java游戏作品

马里奥是站在游戏界顶峰的超人气多面角色。马里奥靠吃蘑菇成长,特征是大鼻子、头戴帽子、身穿背带裤,还留着胡子。与他的双胞胎兄弟路易基一起,长年担任任天堂的招牌角色。

Apache Tomcat7、8、9(Java Web服务器)

Apache Tomcat7、8、9(Java Web服务器)

Tomcat是Apache 软件基金会(Apache Software Foundation)的Jakarta 项目中的一个核心项目,由Apache、Sun 和其他一些公司及个人共同开发而成。因为Tomcat 技术先进、性能稳定,而且免费,因而深受Java 爱好者的喜爱并得到了部分软件开发商的认可,成为目前比较流行的Web 应用服务器。

Java Development Kit(Java开发工具)

Java Development Kit(Java开发工具)

JDK是 Java 语言的软件开发工具包,主要用于移动设备、嵌入式设备上的java应用程序。JDK是整个java开发的核心,它包含了JAVA的运行环境(JVM+Java系统类库)和JAVA工具。