在hadoop1中,namenode存在单点故障,每一个集群中只有一个namenode,如果namenode所在的机器出现了故障,那么将导致整个集群无法利用

主要在两方面影响了HDFS的可用性:

1)、在不可预测的情况下,如果namenode所在的机器崩溃了,整个集群将无法利用,直到namenode被重新启动;
2)、在可预知的情况下,比如namenode所在的机器硬件出错,将导致集群宕机。

HDFS的高可用性:在一个集群中运行两个namenode(active namenode & standby namenode)来解决上面两个问题,这种方案使得机器出现故障时可以快速地启用一个新的

namenode来恢复。

高可用性(High Availability),简称HA

在HA集群中,要有两台不同的机器充当namenode。在任何时间,只有一台机器处于Active状态;另一台机器是处于Standby状态。Active namenode负责集群中所有客户端的操

作;而Standby namenode主要用于备用,它维持足够的状态,如果必要,可以提供快速的故障恢复。

Standby namenode和Active namenode必须保持同步,即元数据保持一致,它们都会和JournalNode进程通信。当Active namenode执行任何有关命名空间的修改,它需要持久化到JournalNode上(通过edits log持久化存储),而Standby namenode负责观察edits log的变化,它能够从JournalNode中读取edits log的信息,并更新其内部的命名空间。一旦Active namenode出现故障,Standby namenode将迅速切换成Active状态。Standby namenode读取全部的edits log可确保发生故障时,是和Active namenode拥有完全相同的状态。

为了实现快速的故障恢复,Standby namenode也需要保存集群中各个文件块的存储位置。为了实现这个,集群中所有的Datanode向Active namenode和Standby namenode发送块文件所在的位置及心跳,如下图所示:

hadoop 高并发 hadoop集群高可用_守护进程


在任何时候,集群中只有一个namenode处于Active状态。

为了保证这种情况,在任何时间,JournalNode只允许一个 namenode充当writer。

注意以下事项:
1)、运行Active namenode和Standby namenode的机器需要相同的硬件配置;
2)、JournalNode守护进程相对来说比较轻量,所以该守护进程可以与其他守护线程(比如namenode,ResourceManager)运行在同一台机器上。在一个集群中,最少要运行3个JournalNode守护进程,这将使得系统有一定的容错能力。当然,你也可以运行3个以上的JournalNode,但是为了增加系统的容错能力,你应该运行奇数个JournalNode(3、5、7等),系统将最多容忍(N-1)/2个JournalNode崩溃。


HA中NameNode之间共享数据(NFS 、Journal Node(用得多))

NFS作为active namenode和standby namenode之间数据共享的存储。active namenode会把最近的edits文件写到NFS,而standby namenode从NFS中把数据读过来。这个方式的缺点是,如果active namenode或者standby namenode有一个和NFS之间网络有问题,则会造成他们之前数据的同步出问题。

Journal Node方式有容错的机制,可以容忍n个journalnode的失败。

两个NameNode为了数据同步,会通过一组称作JournalNode的独立进程进行相互通信。当active状态的NameNode的命名空间有任何修改时,会告知大部分的JournalNode进程。standby状态的NameNode有能力读取JournalNode中的变更信息,并且一直监控edit log的变化,把变化应用于自己的命名空间。standby可以确保在集群出错时,命名空间状态已经完全同步了。