High Availability for the HDFS Namenode

限时加码!20+主流AI编程工具免费用 购周边加赠Coding Plan Lite,Claude Code、Cursor等即刻畅享,学习进阶更高效! 阅读详情

High Availability for the HDFS Namenode

Sanjay Radia, Suresh Srinivas

Yahoo! Inc

 (本文为namdnoe HA的设计文档翻译)

1.       问题阐述

有许多方法可以改善HDFS Namednoe(NN)的可用性,包括减少启动时间,更新配置而不需要重启集群,减少升级时间与提供一个手动或自动的NN故障切换等。本文主要关注于NN的故障切换以解决NN的单点故障问题。

 

有许多方法用以解决NN的失败,其中包括使用共享存储,使用虚拟IP与智能客户端。 可以使用Zookeeper用于领导者选举,或者其他架构类似Linux HA。 这些不同的解决方法可以共享一些框架部件, 本文的目的是定义这些框架部件并提供一些具体设计,用以建立一个机器故障切换的解决方案,以此提供HDFS Namenode的高可用性并隔离HDFS的服务。

 

2.       术语

1)         Active NN - 为客户端提供读写操作的服务的活动NN

2)         Standby NN - 这个NN等待并当Active NN死去的时候成为active

                         i.              BackupNode 在hadoop-0.21中可用于实现Standby的共享存储文件系统的名字空间。

3)         为了不导致混淆,我们不会使用Primary 或者 Secondary来代表Active和Standby,因为Secondary在老版本中是checkpoing 节点。

4)         Hot,Warm, Cold 的故障切换,Standby NN 存储正在运行的Active的子状态 。

                         i.              Cold Standby:Standby NN没有状态。

                       ii.              Warm Standby:Standby 有部分状态:

1.         它已加载fsImage和editLog但是没有收到块报告;

2.         它已加载fsImage和roolled logs与所有块报告。

5)         Hot Standby: Standby已经有Active的所有状态,并立刻启动。

3.       上层应用

1)         计划停机: 一个hadoop集群经常需要停止以升级软件或配置,一个4000节点的hadoop集群需要大约两个小时的时间重启。

2)         非计划停机或服务无响应: Namenode服务经常由于硬件,系统,NN进程失败或NN 进程程序几分钟无响应而出现故障, 然而这些有可能出乎意料的影响一些重要的上层应用。

以上两种情况下,一个warm或hot 故障切换可以减少停机时间, 事实上计划升级是影响HDFS服务不可用的最大因素, 因为HDFS Namenode 失败是很少的。(根据Yahoo 和Facebook的经验)。

4.       不考虑的情况

1)         Active-Active NNs -我们的初始设计是一个NN成为Active而另外一个standby(warm 或hot), 可选方案是可以考虑允许Standby提供读操作。 我们认为Active-Active 需要额外的工作, 也许需要重新设计。

2)         一个名字空间多于两个NN

3)         大面积的失败,这通常叫做BCP。

5.       支持的失败情况

1)         只要单HW失败(disks,NICs,links等),两个时不进行处理,但这种情况下保证数据不会损坏。

2)         软件失败:例如NN进程失败,或者NN 进程死锁。注意系统无法恢复当standby在刚变成Active的时候出现软件失败。

3)         NN GC是一个棘手的问题,如果一个NN进入GC并且不回复,它不能被认为死。

6.       需求

1)         只有一个NN处于Active

                         i.              只有Active能处理客户端的请求并答复。

                       ii.              只有Active能改变持久化状态;

                      iii.              可选: Standby处理读请求。

2)         第一步支持手动故障切换-一些组织希望使用故障切换仅仅在软件升级的时候,这是导致hadoop集群不可用的最大原因。、

3)         无法自动回滚,如果旧的Active重启或变成健康状态的时候。

4)         数据比可用性更重要

                         i.              手动或者自动故障切换不应该导致数据损坏

5)         尽量不用特殊硬件

6)         HA安装和失败管理应该简单,并得防止数据损坏即使在操作失误的情况下。

7)         短时间的NN垃圾收集不应该被认为失败与触发自动故障切换。

7.       具体用例

1)         单点NN配置,没有故障切换

2)         Active和Standby手动切换

                         i.              Standby可以是cold/warm/hot

3)         Active和Standby 自动切换

                         i.              两个NN启动,一个自动成为Active另外一个成为Standby

                       ii.              Active 和Standby 运行着

                      iii.              Active失败,或者不健康,Standby接替

                      iv.              Active和Standby运行, Active 手动停机

                       v.              Active和Standby运行,Standby失败,Active继续

                      vi.              Active运行,Standby停机维修,Active死并无法启动,Standby启动并成为Active

                    vii.              两个NN启动,只有一个起来,它成为Active

                   viii.              Active和Standby运行,Active状态未知,Standby接替。

 

8.       设计方案

下面我们描述一些设计方案。在许多地方都有一些选择,例如:是否存储NN的实时状态,如何进行领导者选举(使用zookeeper 或者Linux HA或者其它方法),或者如何实现隔离技术。然而其余的部分很简单。下面两个图表描述使用zookeeper 和Linux HA做共享存储的整体方针;设计可以扩展到BackupNode。

NN HA with Shared Storage and Zookeeper

v\:* {behavior:url(#default#VML);} o\:* {behavior:url(#default#VML);} w\:* {behavior:url(#default#VML);} .shape {behavior:url(#default#VML);}

 

NN HA with Shared Storage and Linux HA


1)    NN元数据的共享存储与无共享存储

Active与Standby既可以共享存储(例如NFS)或者Active把edits形成流发给Standby(就像0.21里BackupNode的实现)。其中一些考虑如下:

                         i.              共享存储成为单点故障,因此需要其高可用。Bookkeeper 是一个比较好的解决方法但是在prime time还未准备好,可以考虑成为长远的方法。使用bookkeeper ,NN不需要在本地磁盘保持状态,导致NN结束时‘无状态’。某些组织由于其他原因在其集群中已经存在HA NFS。

                       ii.              BackupNode更便宜,因为它不需要使用共享服务器。然而其不支持用例的第三条。

                      iii.              BackupNode不需要隔离技术,只要不必解决用例的第三条时。共享存储需要隔离。然而,如果我们使用Stonith来解决隔离问题,那么就能解决所有隔离需求。

                      iv.              BackupNode不具有对称性,因此不能接替除非有Active的完整状态。

                       v.              当BackupNode停机时,还是依赖于remote存储以存储Active的额外状态,这就转回到了共享存储。

 

2)   并行块报告给Active和Atandby

我们的设计中需要并行发送块报告给Active和Standby以保证warm或hot故障切换。块报告可以直接由datanode发送,也可以通过中间层把块报告发给Active和Standby。

3)   客户端在故障切换时重定向

当Active失败时,客户端需要重新连接到新的Active,这叫做客户端故障切换。有多种方法可以实现。

        i.      更改DNS的绑定:这不是一个好方法,因为操作系统以及许多库把DNS缓存着,因此不会立刻做相应的改变。

       ii.      智能客户端:基于服务器的重定向,重试或者重新查找Active。

1.   注意基于服务器的重定向需要注意脑裂,无论服务器是否重定向。这种情况下一个更好的隔离方法是需要共享存储,因此只有一端可以写editlog。

2.   是否可以在HTTP或JMX下工作。

3.   故障切换时间将更长,因为在找到新NN的地址前客户端总是需要与第一个NN(有可能已经死了)交互。

     iii.      使用一个负载平衡器来发送客户端的请求到正确的NN,但这在大规模的环境中(例如:10万客户端)是很困难的。

       iv.      IP故障切换-这在生产环境下经常用到。

1.   Namenode服务器使用虚拟IP地址,虚拟IP地址被Active使用。

2.   问题:在跨交换机的环境下是否工作,是否只能在VLAN中使用。

4)   客户端在NN启动时超时

NN在某些情况下花很长时间启动,加载image,应用edits恢复块位置信息。这有可能导致客户端超时并认为NN死了。因此,当Active启动的时候,应该在客户端的请求中返回“启动中”以表示客户端应该等待。这种模式是safemode的特殊例子。

5)   故障切换控制使用独立于NN进程的故障切换控制器(Watchdog)

我们的方法是使用独立于NN进程的故障切换控制器进程。这个故障切换控制器与Linux HA的资源管理器非常相似。在基于Linux HA的解决方法中,作为其一部分的RM可以直接使用。而zookeeper ,我们可以自己写一个,或者配置Linux HA的资源管理器使用zookeeper 。

故障切换控制器执行以下功能:

        i.      监控健康的NN,OS和HW,以及其他资源例如网络连接。

       ii.      使用heartbeat以此选举领导者。(heartbeat发送给zookeeper,使用zookeeper 选举领导者 )

     iii.      在领导选举中Active被选中。Active故障切换控制器指示其监控的NN从Standby转换为Active。(注意每个NN启动的时候都是Standby,只有在接到故障切换控制器的指示后才成为active)

使用独立的故障切换控制器进程有以下的优点:

        i.      把这个功能集成到NN会导致心跳机制患上GC的失败。

       ii.      故障切换控制器应该是写成紧凑的代码,从失败的应用中独立出来以增加容错。

     iii.      把选举机制做成插件形式。

6)   隔离(fencing)

在 故障切换的解决方案中,保证只有一个Active实例能更新共享状态是很重要的。即使有选举机制,旧的Active有可能被隔离,不可能立刻成为 Standby,有可能继续共享共享状态。Fencing是一种阻止旧Active继续写共享存储的方法。Fencing需要Active服务不重试,在 恢复对共享存储设备的控制时通过fenced设备返回IO错误;在这种情况下旧Active应该退出并附带错误信息(成为standby不是很好)。

下面的共享资源可以考虑:

        i.      作为NN元数据的共享存储器:保证只有Active写更新到edits logs。

       ii.      Datanode:保证只有一NN进行删除操做以移动/管理在datanode上的副本。

     iii.      客户端:客户端不严格的需要NN更新的共享状态,然而客户端发送更新命令到两个NN之一。需要保证只有Active NN给客户端回复。注意如果共享存储器fencing时,如果非active NN试图写将被fenced并且这种情况下不会返回成功给客户端。

2)   其他故障切换问题

        i.      故障切换时恢复租约-具体TBD。

       ii.      故障切换时Pipeline恢复

 

2.       具体设计

1)         Fencing

我们已经描述了fencing和需要fenced的共享资源/状态,以及NN应该在由于fencing写失败的时候退出的需求。

 

2)         Fencing 包含NN元数据的共享存储

在HDFS-1073中, fsImage和EditLogs已经脱离, 因此只有editlog需要fenced. 注意, 启动一个新的NN总会启动一个新的editlog. 一个需要防止的事情是防止旧的active 继续写旧的editlog并把这个结果告诉客户端.

                         i.              使用NFS, fencing的解决方案需要调查.

                       ii.              使用Bookeeper, 当前正在与bookkeeper团队讨论增加fencing解决方案.

                      iii.              使用共享磁盘(SCSI 或者 SAN), 共享磁盘提供一个已经解决的 fencing解决方案, 但不适合hadoop环境.

3)         Fencing Datanodes

两个解决方案:

1. 在heartbeat的答复中, NN返回自己状态: active或standby

 如果DN发现状态更改, 则向ZK询问谁是active.

 如果active由A改为B,然后改为A, DN应该然后能检测到.

 一个更好的解决方案, 故障切换控制器告诉DN, 但是过多的DN难以等待其确认, 因此需要在协议中解决.

2.

每个NN都有一个序列号, 这个序列号在nn状态更改时传递给DN.

   DN在运行时保持这个序列号, DN只听从最后一个从standby转换到active的NN.

   如果一个此前active的NN重新回来(类似GC), DN将拒绝它, 因为其序列号已经过时, 另外一个新NN已经使用新的序列号代替了它.

4)         Fencing 客户端

一个客户端发送更新命令到两个NN中的一个, 只有active NN回答给客户端. 这需要更深入的调查. 注意如果共享存储已经fenncing了, 那么非active NN试图写不会返回成功给客户端.

5)         使用stonith作为fencing的解决方案.

如果没有其他好的解决方案时, Stonith (Shoot the other node in the head) 经常被用于fencing解决方案, Stonith往往通过电源操作关闭其它节点.

6)         领导者选举和故障切换控制器进程

我们已经概括了把控制进程分离出来的好处, 它还有其它优势. 故障切换控制器进程在Linux HA中叫做资源管理器, zookeeper没有类似的看门狗进程, 因此建议使用LinuxHA的RM接口:

 因为LinuxHA使用Linux HA 资源管理器作为故障切换控制进程.

 为ookeeper写一个故障切换控制器作为测试是否健康, 直接使用Linux HA资源管理器和zookeeper, 这能有效的使用zookeeper 作为领导者选举器.

7)         故障切换控制器进程操作

                         i.              心跳, 用于保证active存活, 失去heartbeat时触发领导者选举.

如果是zookeeper , 故障切换控制器定期发送心跳给ZK.

LinuxHA, 其资源管理器管理发送Standby心跳的故障切换控制器. 

                       ii.              使用故障切换控制器监控是否健康.

处理NN的状态(ps命令)

 NN简单的需求(例如GC)

OS检测

Nic检测

交换机检测

                      iii.              故障切换控制器需要处理一系列命令, 无论是NN从Standby‐to‐Active 还是 Active‐to‐Standby. 这些操作需要配置, 例如Linux HA允许每个其管理的资源配置一系列的命令.

                      iv.              Standby‐to‐Active过程中, 需要以下过程:

Fenced共享存储和DN(如果没有其它资源, 可以使用Stonish)

更新共享客户端地址和/或虚拟IP

告诉NN转换为active

                       v.              Active‐to‐Standby转换中, 需要以下过程

更新客户端地址或放弃虚拟IP

告诉NN变成standby或退出, 如果NN无回应, 则kill之.

8)         NN启动和Active与standby状态更改

在启动NN是进入Standby, 只在接到故障切换控制器的命令后才能转为active.

9)         Standby的NN

                         i.              不向客户端提供服务

                       ii.              读取image并处理edits

                      iii.              接收BR并处理, 但不回复”删除”或”复制”命令给DN

10)     NN变为Active

当NN变为active时: 结束处理最新的edits; 告诉客户端它在启动模式.

问题: 如果NN仅仅是从Active转换为Standby或重启.

11)     客户端重定向

我们已经概括以上两种可行的方法. TBD

12)     智能客户端

TBD描述了智能客户端的方法, 当客户端连接NN失败时通过其它服务(如zookeeper ) 寻找active. 需要讨论其利弊.

13)     IP故障切换方法

生成领域标准方法, 如何工作: TBD

好处: 适合各种协议, HDFS, HTTP, JMX等

挑战: 虚拟IP跨网段.

14)     共享存储方法

Standby从共享存储器读取edits, 只有过时的写到当前未滚动的edits, 详情:TBD

Fencing已经在上文叙述

15)     非共享存储方法:使用Backup NN

描述BackupNN的工作以及这种方法: TBD

 

3.       附录

1)         自动故障回滚

描述问题以及其产生条件

2)         健忘症

失去已经和客户端此前的交流过的信息.

3)         GC

如何区别NN不回复的时候是否是GC? 需要调查

Hadoop HA(High Availability)介绍及集群的搭建 Hadoop HA(High Availability)介绍在 Hadoop 1.0 时代,Hadoop 的两大核心组件 HDFS NameNode 和 JobTracker 都存在着单点问题,这其中以 NameNode 的单点问题尤为严重。因为 NameNode 保存了整个 HDFS 的元数据信息,一旦 NameNode 挂掉,整个 HDFS 就无法访问,同时 Hadoop 生态系统中依赖于 HD 阅读详情

相关推荐

【操作系统一】操作系统概述

南航操作系统刘老师课

Cherry0030的博客 368

【甘道夫】Hadoop2.2.0 NN HA详细配置+Client透明性试验【完整版】

【甘道夫】Hadoop2.2.0 NN HA详细配置+Client透明性试验【完整版】

甘道夫的大数据进化论 4501

Health Monitor简介

1. Health Monitor简介     Health Monitor是11g里新增加的特性,用于数据库的各层和各个组建的诊断检查。例如可以检查:文件损坏、物理逻辑块损坏、redo和undo故障、数据字典损坏等。HM可以根据检查的结果产生一个报表,并提供解决问题的建议。    1.1 运行方式:     1). Reactive          Fault diagnosabili

gxftry1st的专栏 1715

【伊利丹】Hadoop2.0 NN HA实验记录

Hadoop2.0主备NameNode自动切换实验

FBI启示录 4833

Namenode HA原理详解

hadoop1中NameNode存在一个单点故障问题,也就是说如果NameNode所在的机器发生故障,那么整个集群就将不可用(hadoop1中有个SecorndaryNameNode,但是它并不是NameNode的备份,它只是namenode的一个助理,协助namenode工作,对fsimage和edits文件进行合并,并推送给NameNode,防止因edits文件过大,导致NameNode重启

daydayup_668819的博客 9107

High Availability for the HDFS Namenode(翻译)

转载自:http://www.blogjava.net/shenh062326/archive/2012/03/24/yuling111.html High Availability for the HDFS Namenode Sanjay Radia, Suresh Srinivas Yahoo! Inc  (本文为namdnoe HA的设计文档翻译) 1.

hellohadoop的专栏 429

Hadoop NameNode 高可用 (High Availability) 实现

Hadoop 的整个生态系统中,HDFS NameNode 处于核心地位,NameNode 的可用性直接决定了 Hadoop 整个软件体系的可用性。从内部实现的角度对 NameNode 的高可用机制进行详细的分析,主要包括 NameNode 的主备切换实现分析和 NameNode 的共享存储实现分析 在 Hadoop 1.0 时代,Hadoop 的两大核心组件 HDFS NameNode 和...

lsp的博客 3891

HDFS High Availability Using the Quorum Journal Manager

目的 本指南提供一个HDFS HA特性的综述,描述了如何使用QJM配置和管理一个HA HDFS集群。 本文档假设读者对于HDFS中的通用组件和节点类型有一个大体的认识。请参考HDFS架构指南获取更多信息。 注意:使用QJM或者传统的共享存储 本文档讨论了如何用QJM配置和使用HDFS HA在Active NameNode和Standby NameNode共享edit日志文件

来啊 快活啊 1869

HDFS High Availability(HA)高可用

在HA集群中,脑裂指的是当联系主备节点的"心跳线"断开时(即两个节点断开联系时),本来为一个整体、动作协调的HA系统,就分裂成为两个独立的节点。当发生故障Active NN挂掉后,Standby NN 会在它成为Active NN 前,读取所有的JN里面的修改日志,这样就能高可靠的保证与挂掉的NN的目录镜像树一致,然后无缝的接替它的职责,维护来自客户端请求,从而达到一个高可用的目的。:都认为对方是故障的,自己是主角色。可以看出,9越多,系统的可靠性越强,能够容忍的业务中断时间越少,但是要付出的成本更高。

金州饿霸吃不饱的博客 1522

HDFS High Availability体系介绍(Using the Quorum Journal Manager)

一、背景HDFS集群中只有一个Namenode,这就会引入单点问题;即如果Namenode故障,那么这个集群将不可用,直到Namenode重启或者其他Namenode接入。 有两种方式会影响集群的整体可用性: 1. 意外的突发事件,比如物理机器crash,集群将不可用,直到管理员重启Namenode。 2. 系统维护,比如软件升级等,需要关闭Namenode,也会导致集群暂时性的失效。

Lnho的专栏 1万+

HDFS High Availability

1. 背景 在Hadoop 2.0.0 之前,namenode 一直是单节点运行,存在单点故障。若是在namenode 节点出现问题,则会导致整个hdfs 集群均不可用。直到namenode进程恢复,或是在另一备用节点上启动namenode进程。 HDFS 的高可用(high availability)提供了配置一主(active)一备(standby)namenode 的功能,用于...

weixin_30426957的博客 312

Hadoop NameNode 高可用 (High Availability HA配置实现)

Hadoop 1.0 时代,Hadoop 的两大核心组件 HDFS NameNode 和 JobTracker 都存在着单点问题,这其中以 NameNode 的单点问题尤为严重。因为 NameNode 保存了整个 HDFS 的元数据信息,一旦 NameNode 挂掉,整个 HDFS 就无法访问,同时 Hadoop 生态系统中依赖于 HDFS 的各个组件,包括 MapReduce、Hive、Pi...

没有合适的昵称 2288

Namenode HA原理详解(脑裂)

Namenode HA原理详解 社区hadoop2.2.0 release版本开始支持NameNode的HA,本文将详细描述NameNode HA内部的设计与实现。   为什么要Namenode HA? 1. NameNode High Availability即高可用。 2. NameNode 很重要,挂掉会导致存储停止服务,无法进行数据的读写,基于此NameNode的计算(MR,

Better Me的博客 2万+

震惊!原来 HDFS 的高可用原理这么简单

写在前面 本文隶属于专栏《1000个问题搞定大数据技术体系》,该专栏为笔者原创,引用请注明来源,不足和错误之处请在评论区帮忙指出,谢谢! 本专栏目录结构和文献引用请见1000个问题搞定大数据技术体系 解答 解读 NameNode Standby 在 Hadoop2.x出来之前,集群中只有一个 NameNode,所以存在单点故障问题(即使存在 SecondaryNameNode、 CheckpointNode、 BackupNode,但是本质上不能解决单点故障问题)。 在 Hadoop2.x后引入了 Hi

Shockang的博客 3万+

Hadoop NameNode 高可用 (High Availability) 实现解析

Hadoop 的整个生态系统中,HDFS NameNode 处于核心地位,NameNode 的可用性直接决定了 Hadoop 整个软件体系的可用性。本文尝试从内部实现的角度对 NameNode 的高可用机制进行详细的分析,主要包括 NameNode 的主备切换实现分析和 NameNode 的共享存储实现分析。文章的最后在结合作者自身实践的基础上,列举了一些在高可用运维过程中需要注意的事项。

学不死 680

hadoop官网翻译之HDFS High Availability Using the Quorum Journal Manager

原文https://blog.csdn.net/duheaven/article/details/17038679 HDFS High Availability Using the Quorum Journal Manager Purpose Note: Using the Quorum Journal Manager or Conventional Shared Storage Back...

xiaoliuyiting的博客 405

Hadoop High Availability

一、 Hadoop High Availability HA(High Available), 高可用,是保证业务连续性的有效解决方案,一般有两个或两个以上的节点,分为活动节点(Active)及备用节点(Standby)。通常把正在执行业务的称为活动节点,而作为活动节点的一个备份的则称为备用节点。当活动节点出现问题,导致正在运行的业务(任务)不能正常运行时,备用节点此时就会侦测到,并立...

dingqiu6346的博客 115

Namenode的Ha机制、HDFS读写数据的过程

为什么要Namenode HA? 前言:在Hadoop 1.x版本,HDFS集群NameNode一直存在单点故障问题:集群只存在一个NameNode节点,它维护了HDFS所有的元数据信息,当该节点所在服务器宕机或者服务不可用,整个HDFS集群都将处于不可用状态,极大限制了HDFS在生产环境的应用场景。直到Hadoop 2.0版本才提出了高可用 (High Availability, HA) 解...

. 2221
上一篇: Ubuntu下Hadoop快速安装手册
下一篇: HBase机制介绍
bless_love
博客等级 码龄15年 14粉丝 0原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值