Hadoop2.2.0中HDFS的高可用性实现原理

Hadoop2.0.0以前,NameNode(NN)在HDFS集群中存在单点故障(single point of failure),每个集群中存在一个NameNode,若是NN所在的机器出现了故障,那么将致使整个集群没法利用,直到NN重启或者在另外一台主机上启动NN守护线程。
  主要在两方面影响了HDFS的可用性:
  (1)、在不可预测的状况下,若是NN所在的机器崩溃了,整个集群将没法利用,直到NN被从新启动;
  (2)、在可预知的状况下,好比NN所在的机器硬件或者软件须要升级,将致使集群宕机。
  HDFS的高可用性将经过在同一个集群中运行两个NN(active NN & standby NN)来解决上面两个问题,这种方案容许在机器破溃或者机器维护快速地启用一个新的NN来恢复故障。
  在典型的HA集 群中,一般有两台不一样的机器充当NN。在任什么时候间,只有一台机器处于Active状态;另外一台机器是处于Standby状态。Active NN负责集群中全部客户端的操做;而Standby NN主要用于备用,它主要维持足够的状态,若是必要,能够提供快速的故障恢复。
  为了让Standby NN的状态和Active NN保持同步,即元数据保持一致,它们都将会和JournalNodes守护进程通讯。当Active NN执行任何有关命名空间的修改,它须要持久化到一半以上的JournalNodes上(经过edits log持久化存储),而Standby NN负责观察edits log的变化,它可以读取从JNs中读取edits信息,并更新其内部的命名空间。一旦Active NN出现故障,Standby NN将会保证从JNs中读出了所有的Edits,而后切换成Active状态。Standby NN读取所有的edits可确保发生故障转移以前,是和Active NN拥有彻底同步的命名空间状态。
  为了提供快速的故障恢复,Standby NN也须要保存集群中各个文件块的存储位置。为了实现这个,集群中全部的Database将配置好Active NN和Standby NN的位置,并向它们发送块文件所在的位置及心跳,以下图所示:
oop

Hadoop2.2.0中HDFS的高可用性实现原理

Hadoop2.2.0中HDFS的高可用性实现原理spa


  在任什么时候候,集群中只有一个NN处于Active 状态是极其重要的。不然,在两个Active   NN的状态下NameSpace状态将会出现分歧,这将会致使数据的丢失及其它不正确的结果。为了保证这种状况不会发生,在任什么时候间,JNs只容许一个 NN充当writer。在故障恢复期间,将要变成Active 状态的NN将取得writer的角色,并阻止另一个NN继续处于Active状态。
  为了部署HA集群,你须要准备如下事项:
  (1)、NameNode machines:运行Active NN和Standby NN的机器须要相同的硬件配置;
  (2)、JournalNode machines:也就是运行JN的机器。JN守护进程相对来讲比较轻量,因此这些守护进程能够可其余守护线程(好比NN,YARN ResourceManager)运行在同一台机器上。在一个集群中,最少要运行3个JN守护进程,这将使得系统有必定的容错能力。固然,你也能够运行3 个以上的JN,可是为了增长系统的容错能力,你应该运行奇数个JN(三、五、7等),当运行N个JN,系统将最多容忍(N-1)/2个JN崩溃。
  在HA集群中,Standby NN也执行namespace状态的checkpoints,因此没必要要运行Secondary NN、CheckpointNode和BackupNode;事实上,运行这些守护进程是错误的。线程

相关文章
相关标签/搜索