High Availability for the HDFS Namenode(翻译)

Cloudera CDP实战指南:HDFS可靠性、YARN调优与混合治理 Cloudera Data Platform(CDP)已超越传统Hadoop发行版,演进为面向企业数据治理的操作系统。其核心在于统一元数据管理、动态安全策略与存储计算解耦架构,支撑金融、制造等关键行业对高可用、强合规与弹性扩展的刚性需求。HDFS底层可靠性设计决定集群容灾能力,YARN资源调度真实瓶颈直接影响Spark作业稳定性;而CDP Public Cloud与Private Cloud的混合治理逻辑,则解决了多云/本地数据协同、租户隔离与联邦查询等现实挑战。本文聚焦生产级CDP部署、HDFS脑裂防控、 阅读详情

转载自: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.       问题阐述

有许多方法可以改善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与Hive面试核心知识点全面解析 简介:Hadoop和Hive是大数据处理领域的核心技术工具。Hadoop通过HDFS实现高容错性分布式存储,利用MapReduce实现并行计算;Hive则构建于Hadoop之上,提供类SQL查询语言HQL,将查询自动转换为MapReduce任务,简化大数据分析。 阅读详情

相关推荐

High Availability for the HDFS Namenode

High Availability for the HDFS Namenode Sanjay Radia, Suresh Srinivas Yahoo! Inc  (本文为namdnoe HA的设计文档翻译) 1.       问题阐述 有许多方法可以改善HDFS Namednoe(NN)的可用性,包括减少启动时间,更新配置而不需要重启集群,减少升级时间与提供一个手动或自动的NN故障切换

bless_love的专栏 986

Health Monitor简介

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

gxftry1st的专栏 1715

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

南航操作系统刘老师课

Cherry0030的博客 368

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

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

甘道夫的大数据进化论 4501

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

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

FBI启示录 4833

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

HDFS HA(High Availability)高可用性

HDFS HA(High Availability)高可用性 参考文献: 官方文档 全文翻译 Hadoop组件之-HDFS(HA实现细节) 这张图片的个人理解 由于NameNodeHadoop1只有一个节点,可能存在(SPOF)single point of file单节点故障。包括机器故障,软件硬件升级等。 在Hadoop2砍死你使用两台机器配置为NameNode,在任何时候,只有一个处于A...

weixin_30631587的博客 210

hdfs高可用性(HDFS High Availability

Hadoop2.2.0中HDFS的高可用性实现原理 http://www.iteblog.com/archives/833 官方文档 http://www.cloudera.com/content/cloudera-content/cloudera-docs/CDH4/latest/CDH4-High-Availability-Guide/cdh4hag_topic_2_1.html ht...

weixin_34255055的博客 251

NameNode HA(翻译

官方文档High Availability With QJM的翻译

人是有思想的芦苇 1556

HDFS QJM的架构设计

概述 背景 HDFS-1623和其他相关的JIRA在现有HDFSNameNode基础上增加了HA的支持,但是他们需要依赖一个存放editlog文件的共享存储目录.而且这个共享存储必须也是高可用的,它们会被集群中所有NameNodes同时访问. 目前对于共享的editlog存储目录,一个推荐的做法是通过一个NAS(Network-attached storage,网络相关联的存储)

走在前往架构师的路上 4838

Hadoop NameNode单点问题解决方案之一 AvatarNode

本文转自:http://weilaiyxj.iteye.com/blog/979003   翻译自Facebook Hadoop架构师(Dhruba Borthakur)的一篇文章  我们遇到的情况  Hadoop NameNode存在单点问题。这个问题会影响分布式平台24*7运行。先说说我们的情况吧。  我们的团队负责管理一个1200节点的集群(总大小12PB),目前是运行版本为H

厚积而薄发 4436

使用QJM的高可用HDFS

这个指南提供了一个 HDFS 高可用(HA)特征的概览,和如何使用Quorum Journal Manager (QJM) 特征来配置和管理 HA HDFS 集群。 这个文档假定读者对 HDFS 集群中的通用组件和节点类型有一个整体理解。请参考 HDFS 架构指南来获详细信息。

Dobbin 898

2014-01-14---Hadoop的基础学习(八)---HDFS的HA机制及Hadoop集群搭建

2019独角兽企业重金招聘Python工程师标准>>> ...

weixin_34198583的博客 164

Hadoop工程师校招硬核考点:从HDFS到Spark生态全解析

在大数据领域,分布式存储与计算是技术体系的基石,而Hadoop正是理解这一体系的最佳入口。无论是HDFS的副本放置策略与读写链路,还是MapReduce的Shuffle机制与Join优化,都直接决定了海量数据的处理效率。掌握这些底层原理,不仅能应对面试中的高频追问,更能为后续学习Spark、Hive等上层组件打下扎实基础。本文以一套经典校招笔试题为线索,覆盖Zookeeper高可用、数据倾斜治理、Hive分区表设计等核心场景,并结合伪分布式搭建、Docker镜像部署等实战经验,帮助读者构建从存储、计算到调度

weixin_33979203的博客 359

hadoop HA----Quorum Journal 设计

本文是hadoop HA 方案Quorum Journal设计的翻译。原文参考这个链接中的附件:https://issues.apache.org/jira/browse/HDFS-3077 1 概述 1.1 背景   HDFS-1623和相关的JIRAs加入了对HDFS NameNode高可用性的支持,但是依赖一个共享存储目录,在里面存储共享的edit log。这个共享存储

喔瓣泥的专栏 3417

Hadoop 权威指南学习1 (主要框架)

Hadoop 权威指南学习1 (主要框架) 1. Hadoop 最出名的是MapReduce和 HDFS,不过也有很多其他有用的子项目。 技术栈如下: Core 一系列分布式文件系统和通用I/O的组件和接口(序列化、Java RPC和持久化数据结构) Avro 一种提供高效、跨语言RPC的数据序列系统,持...

weixin_34185512的博客 77
上一篇: Apache Hadoop 0.23 HDFS Federation介绍
hellohadoop
博客等级 码龄14年 0粉丝 0原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值