一、介绍:
1、所谓HA(High Available),即高可用(7*24小时不中断服务)
2、实现高可用的关键是消除单点故障,即HDFS的nameNode和YARN的resourceManager,所以HA机制就是HDFS的HA和YARN的HA。
-
由于一个HDFS集群由一个NameNode节点和多个DataNode节点组成,一旦NameNode节点宕机,那么HDFS将不能进行文件的上传与下载。
-
由于一个Yarn集群由一个ResourceManager节点和多个NodeManager节点组成,一旦ResourceManager节点宕机,那么YARN集群将不能进行资源的调度。
3、HDFS-HA工作要点:
3.1. 双nameNode来消除单点故障
3.2. 元数据管理方式需要改变
- 内存中各自保存一份元数据;
- Edits日志只有Active状态的NameNode节点可以做写操作;两个NameNode都可以读取Edits;
- 共享的Edits放在一个共享存储中管理(qjournal和NFS两个主流实现);
3.3.需要一个状态管理功能模块
-
实现了一个zkfailover,常驻在每一个namenode所在的节点,每一个zkfailover负责监控自己所在NameNode节点,
-
利用zooKeeper进行状态标识,当需要进行状态切换时,由zkfailover来负责切换,切换时需要防止brain
splitnaolie脑裂现象的发生。
3.4.必须保证两个NameNode之间能够ssh无密码登录
3.5.隔离(Fence),即同一时刻仅仅有一个NameNode对外提供服务
4.HDFS-HA故障转移机制图解:
5、YARN-HA工作机制图解:
二、HA集群配置
1、在完全分布式集群的基础下
2、配置zooKeeper集群
(1)将zooKeeper压缩包上传到到 /opt/software/目录下
(2)解压Zookeeper安装包到/opt/module/目录下
[jh@Hadoop03 software]$ tar -zxvf zookeeper-3.4.10.tar.gz -C /opt/module/
(3)重命名/opt/module/zookeeper-3.4.10/conf 目录下的zoo_sample.cfg为zoo.cfg
[jh@Hadoop03 conf]$ mv zoo_sample.cfg zoo.cfg
(4)配置zoo.cfg文件
修改存储节点数据
dataDir=/opt/module/zookeeper-3.4.10/zkData
增加zooKeeper集群配置
#######################cluster##########################
server.1=Hadoop03:2888:3888
server.2=Hadoop04:2888:3888
server.3=Hadoop05:2888:3888
(5)在/opt/module/zookeeper-3.4.10/ 目录下创建zkData目录
[jh@Hadoop03 zookeeper-3.4.14]$ mkdir zkData
(6)在/opt/module/zookeeper-3.4.10/zkData目录下创建一个myid的文件
[jh@Hadoop03 zkData]$ touch myid
(7)编辑myid文件,在里面添加服务器ID,比如添加1
(8)分发配置好的zookeeper到其他机器上,并修改分发过去的服务器的myid文件,修改服务器ID
(9)分别启动zookeeper
[jh@Hadoop03 zookeeper-3.4.14]$ bin/zkServer.sh start
(10)查看状态
[jh@Hadoop03 zookeeper-3.4.14]$ bin/zkServer.sh status
3、配置HDFS-HA集群
(1)在/opt/module/目录下创建一个ha文件夹
(2)将/opt/module/下的 hadoop-2.7.2拷贝到 /opt/module/ha目录下
(3)配置hadoop-env.sh
export JAVA_HOME=/opt/module/jdk1.8.0_144
(4)配置core-site.xml
1 <configuration>
2 <!-- 把两个NameNode 的地址组装成一个集群mycluster -->
3 <property>
4 <name>fs.defaultFS</name>
5 <value>hdfs://mycluster</value>
6 </property>
7
8 <!-- 指定hadoop运行时产生文件的存储目录 -->
9 <property>
10