一、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文件
(2)配置core-site.xml文件
五、覆盖文件
六、启动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信息:
或登录网页:mengliu:50070与mengliu1:50070查看:
七、NameNode HA自动故障转移
启动HA后,若Active主机发生故障时,需要手动进行切换,显得麻烦。因此使用ZKFC对每一个NameNode配置监控器,实现自动故障转移。
1.配置HDFS文件
(1)配置hdfs-site.xml文件
(2)配置core-site.xml文件
(3)覆盖文件
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正常工作。