一、HA简介

    在Hadoop2.x之前,HDFS集群中只有一个NameNode,若NameNode出现了故障,则整个集群将无法使用,直到NameNode重新启动。

    Hadoop2.x开始支持HA和Federation。HDFS HA功能通过配置Active/Standby两个NameNode实现集群中对NameNode的热备。如果Active出现故障,则Standby可快速替代Active,使得集群能够正常使用。

    NameNode影响HDFS集群的原因:

    1.NameNode机器发生意外。如宕机,集群无法正常使用,直到管理员重启;

    2.NameNode机器升级。包括软件、硬件升级,此时集群也无法使用。

二、安装zookeeper

    Zookeeper的安装有三种模式,参照https://www.cnblogs.com/lsdb/p/7297731.html

    这里采用集群模式。

三、免密码登录

    参照https://blog.csdn.net/u013168084/article/details/86476691

四、HA规划集群,配置HDFS

    1.HA规划集群(三台主机):

mengliu

mengliu1

mengliu2

192.168.1.128

192.168.1.129

192.168.1.130

NameNode

NameNode

 

ZKFC

ZKFC

 

JournalNode

JournalNode

JournalNode

DataNode

DataNode

DataNode

    2.配置HDFS文件

 (1)配置hdfs-site.xml文件

Hadoop2.x HDFS HA架构部署配置

Hadoop2.x HDFS HA架构部署配置

Hadoop2.x HDFS HA架构部署配置

(2)配置core-site.xml文件

Hadoop2.x HDFS HA架构部署配置

五、覆盖文件

Hadoop2.x HDFS HA架构部署配置

 六、启动HA

    1.在各个JournalNode节点上输入以下命令启动journalnode服务:

$sbin/hadoop-daemon.sh start journalnode

    2.在nn1上对其进行格式化,并启动:

$bin/hdfs namenode -format
$sbin/hadoop-daemon.sh start namenode

  3.在nn2上同步nn1的元数据信息:

$bin/hdfs namenode -bootstrapStandby

  4.启动nn2:

$sbin/hadoop-daemon.sh start namenode

  5.将nn1切换为Active:

$bin/hdfs haadmin -transitionToActive nn1

  6.在nn1上启动所有的datanode:

$sbin/hadoop-daemon.sh start datanode

    启动完成后,可以看到两台主机NameNode信息:

Hadoop2.x HDFS HA架构部署配置

    或登录网页:mengliu:50070与mengliu1:50070查看:

Hadoop2.x HDFS HA架构部署配置

Hadoop2.x HDFS HA架构部署配置

七、NameNode HA自动故障转移

    启动HA后,若Active主机发生故障时,需要手动进行切换,显得麻烦。因此使用ZKFC对每一个NameNode配置监控器,实现自动故障转移。

    1.配置HDFS文件

  (1)配置hdfs-site.xml文件

Hadoop2.x HDFS HA架构部署配置

  (2)配置core-site.xml文件

Hadoop2.x HDFS HA架构部署配置

  (3)覆盖文件

Hadoop2.x HDFS HA架构部署配置

    2.启动

  (1)关闭所有HDFS服务:

$sbin/stop-dfs.sh

  (2)在每台机器上启动zookeeper集群:

$bin/zkServer.sh start

  (3)初始化HA在zookeeper中状态:

$bin/hdfs zkfc -formatZK

  (4)启动HDFS服务:

$sbin/start-dfs.sh

  (5)在各个NameNode节点上启动DFSZK Failover Controller,先在一台机器上启动,那台机器的NameNode就是Active NameNode:

$sbin/hadoop-daemon.sh start zkfc

八、验证

    将Active NameNode进程kill,命令:

#kill -9 pid

    或者将Active NameNode机器断开网络,命令:

$service network stop

    查看两台机器NameNode状态。

    经过验证,当Active出现故障时,Standby会自动切换为Active,使NameNode正常工作。

相关文章: