在 Hadoop 1.X版本中,NameNode是整个HDFS集群的单点故障(single point of failure,SPOF):每一个HDFS集群只能有一个NameNode节点,一旦NameNode所在服务器宕机或者出现故障将导致整个集群都不可用,除非重启或者开启一个新的Namenode集群才能够恢复可用。
在Hadoop 2.X 版本中,HDFS引入了双NameNode架构,HA(High Available)通过将两个NameNode分别配置为Active/Passive状态来解决上述问题。处于Active状态的NameNode叫作Active Namenode,处于Passive状态的NameNode叫作Standby Namenode。 Standby Namenode作为Active Namenode的热备份,能够在NameNode发生故障或者由于日常服务器维护需要重启的时候以一种优雅的方式自动切换为Active Namenode。
Active Namenode处理客户端所有的操作请求(读写),Standby Namenode只是作为Active Namenode的Slave尽可能地与Active Namenode保持状态同步,使得在Active Namenode故障时能够快速完成切换。为了使Standby Namenode与Active Namenode数据保持同步,两个Namenode都需要与一组Journal Node进行通信。当Active Namenode执行的任务对namespace有所更改时,会确保将修改日志持久到Journal Node节点中的大部分。Standby Namenode持续监控这些Journal Node,当监测发现这些修改日志有变化时,就会将这些修改应用到自己的namespace,进而保持与Active Namenode中namespace元数据保持一致。当进行故障转移时,Standby Namenode在成为Active Namenode之前,会确保自己已经读取了Journal Node中的所有修改日志,从而保持数据状态与故障发生前一致。
为了确保故障转移能够快速完成,Standby Namenode需要维护最新的Block位置信息,即每个Block副本存放在集群中的哪些节点上。为了达到这一点,Datanode同时配置主备两个Namenode,并同时发送Block报告和心跳到两台Namenode。
任何时候只有一个Namenode处于活动状态对HA集群来说至关重要,否则可能出现数据丢失或者数据损坏。当两台Namenode都认为自己的Active Namenode时,会同时尝试写入数据(不会再去检测和同步数据)导致所谓的“裂脑现象”出现。为了达到这个目的并避免出现“裂脑现象”,管理员必须为共享存储配置至少一个(fencing)方法。在宕机期间,如果确定了之前的Active Namenode已经放弃活动状态,fencing进程将负责中断之前的Active Namenode对共享存储的访问和编辑,从而防止它继续对命名空间做出任何进一步的修改,使新的活动节点能够安全地进行故障转移。
2 简介及软件准备2.1 简介
HA(High Availability)指的是通过尽量缩短因日常维护操作(计划)和突发的系统崩溃(非计划)所导致的停机时间,以提高系统和应用的可用性。它与被认为是不间断操作的容错技术有所不同。HA系统是目前企业防止核心计算机系统因故障停机的最有效手段。
高可用性(High Availability)提供了解决一种最小化网络中由于单点故障而带来的风险的方法。如对于部署防火墙的企业,从网络安全方面考虑,所有进出信息流都必须经过防火墙。这时防火墙就是一个单点故障。对于很多企业来说,长时间的服务中断是不可接受的,这就引入了高可用性的需求。随着网络应用的增多和服务实时性需求的增加,用户对高可用性的需求也越来越强。作为网络中单点故障设备,防火墙有必要提供高可用性解决方案。
2.2 软件准备
2.2.1 CentOS 7的安装
- 安装VMware15.5
- 创建新的虚拟机
(自定义)下一步→下一步→(稍后安装操作系统)下一步→(Linux、CentOS 7 64位)下一步→(设置虚拟机名称master、选择安装位置)下一步→下一步→(虚拟机内存1024MB)下一步→(NAT)下一步→下一步→下一步→(创建新虚拟磁盘)下一步→(最大磁盘大小10GB、将虚拟机磁盘存储为单个文件)下一步→下一步→(自定义硬件,删去声卡、打印机;新CD/DVD中“使用ISO映像文件”选中CentOS-7-x86_64-Minimal-1908.iso)完成。
- 简介及软件准备
HA(High Availability)指的是通过尽量缩短因日常维护操作(计划)和突发的系统崩溃(非计划)所导致的停机时间,以提高系统和应用的可用性。它与被认为是不间断操作的容错技术有所不同。HA系统是目前企业防止核心计算机系统因故障停机的最有效手段。
高可用性(High Availability)提供了解决一种最小化网络中由于单点故障而带来的风险的方法。如对于部署防火墙的企业,从网络安全方面考虑,所有进出信息流都必须经过防火墙。这时防火墙就是一个单点故障。对于很多企业来说,长时间的服务中断是不可接受的,这就引入了高可用性的需求。随着网络应用的增多和服务实时性需求的增加,用户对高可用性的需求也越来越强。作为网络中单点故障设备,防火墙有必要提供高可用性解决方案。
2.2 软件准备 2.2.1 CentOS 7的安装- 安装VMware15.5
- 创建新的虚拟机
(自定义)下一步→下一步→(稍后安装操作系统)下一步→(Linux、CentOS 7 64位)下一步→(设置虚拟机名称master、选择安装位置)下一步→下一步→(虚拟机内存1024MB)下一步→(NAT)下一步→下一步→下一步→(创建新虚拟磁盘)下一步→(最大磁盘大小10GB、将虚拟机磁盘存储为单个文件)下一步→下一步→(自定义硬件,删去声卡、打印机;新CD/DVD中“使用ISO映像文件”选中CentOS-7-x86_64-Minimal-1908.iso)完成。
2.2.2 基本网络配置
2.2.3 FinalShell 与虚拟机连接 2.2.4 NTP 集群时间同步
3 JDK 的安装与配置 3.1 安装 JDK 3.2 JDK 的配置 4 ZOOKEEPER 的安装与配置 4.1 安装 ZOOKEEPER 4.2 ZOOKEEPER 的配置
4.3 ZOOKEEPERD 的启动
5 高可用 HADOOP 的安装与配置 5.1 安装 HADOOP 5.2 HADOOP 的配置
5.3 HADOOP 的启动
5.4 网页端查看状态
6 总结
1. 元数据管理方式需要发生如下的改变:
两个NameNode内存中各自保存一份元数据,原来只有一份,现在大家都有;
Edits日志只有Active(工作)状态的NameNode节点可以做写操作,卖呆的只能读;两个NameNode都可以读取Edits;共享的Edits放在一个共享存储中管理(qjournal和NFS两个主流实现),这样各个节点就都能看得到。
2. 需要一个状态管理功能模块:
每个NameNode节点都有一个zkfailover客户端,常驻在每一个NameNode所在的节点,每一个zkfailover负责监控自己所在NameNode节点,并且给自己的节点状态进行标识,将这个标识注册到zookeeper里,当需要进行状态切换时,由zkfailover来负责切换,切换时需要防止brain split(脑裂:即多个NameNode一起工作,造成数据不一致)现象的发生。
3. 必须保证两个NameNode间能够ssh无密码登录,两个节点要能够随时通信。
4. 隔离(Fence),即同一时刻仅仅有一个NameNode对外提供服务(两个同时则会脑裂)。
5. 若想手动验证查看主备节点是否能够切换,可使用kill -9命令杀死启用状态节点的NameNode进程,后在网页端刷新后查看原备用节点现在的状态。
点赞后评论留下邮箱,可获得文档版全部内容!



