HDFS 集群高可用(HA)
所谓的HA(High available),简称高可用(7*24不间断服务)
备份方式
主从方式(冷备)
准备两个相同的应用程序,一个对外提供服务,成为主程序,另外一个平时不运行(主要负责根对外提供服务的机器进行数据同步等操作),称之为从程序或备份程序,即从程序是主程序的一个备份,等主程序出现问题的时候,再顶上去。
双主互备(热备)
准备两个相同的应用程序,同时对外提供服务(这时两个主程序相互做对方的备份)当其中一个程序出现问题的时候,另外一个程序可以同样对外提供访问。
集群多备
跟双主互备一样,只不过备份的数量多一些而已。
为什么要HA
NameNode在Hadoop2.x之前HDFS中只有一个NameNode会对外提供访问,此时会出现一个致命问题, 就是单点故障和性能瓶颈(联邦)
NameNode在主要有以下两个方面影响
- NameNode机器发生了意外,宕机集群将无法在提供服务
- NameNode机器需要升级,包括软件,硬件等等.此时集群也无法使用
HDFS HA就是配置一个NameNode Active(活)和另外一个NameNode Standby(备份),如果Active节点 出现问题,standby的节点会继续提供服务,就可以防止单点故障.。
框架图图
原理
hadoop2.x之后,Clouera提出了QJM/QuromJournal Manager,这是一个基于Paxos算法实现的HDFS HA方案,它给出了一种较好的解决思路和方案
- 基本原理就是用2N+1台 JN 存储EditLog,每次写数据操作有大多数(>=N+1)返回成功时即认为该次写成功,数据不会丢失了。当然这个算法所能容忍的是多有N台机器挂掉,如果多于N台挂掉, 这个算法就失效了。这个原理是基于Paxos算法
- 在HA架构里面SecondaryNameNode这个冷备角色已经不存在了,为了保持standby NN时时的与主Active NN的元数据保持一致,他们之间交互通过一系列守护的轻量级进程JournalNode。
- 任何修改操作在 Active NN上执行时,JN进程同时也会记录修改log到至少半数以上的JN中,这时Standby NN 监测到JN 里面的同步log发生变化了会读取 JN 里面的修改log,然后同步到自己的的目录 镜像树里面
- 当发生故障时,Active的 NN 挂掉后,Standby NN 会在它成为Active NN 前,读取所有的JN里面 的修改日志,这样就能高可靠的保证与挂掉的NN的目录镜像树一致,然后无缝的接替它的职责,维护 来自客户端请求,从而达到一个高可用的目的。
- QJM方式来实现HA的主要优势:
- 不需要配置额外的高共享存储,降低了复杂度和维护成本
- 系统鲁棒性(Robust:健壮)的程度是可配置
- JN不会因为其中一台的延迟而影响整体的延迟,而且也不会因为JN的数量增多而影响性能(因为NN向JN发送日志是并行的)