翻译一篇关于HBase MTTR的文章介绍,转载请注明出处。
原文的地址
http://hortonworks.com/blog/introduction-to-hbase-mean-time-to-recover-mttr/
Hbase 是一个always-available的服务,在机器故障的时候保持可用性,集群中的机器都运行regionserver daemons。但一个regionserver出现故障,或者机器掉线,那么保存在上面的regions也同样掉线。Hbase中MTTR的能够检测异常,尽可能早的恢复对掉线region的访问。
文章解释了hbase如何管理MTTR,并且介绍了一些hbase和hdfs的设置。
Hbase是一致性时对故障的如何保持弹性
Hbase通过让一个单独的server负责数据的子集,也就是说,一个region在同一时刻只能被一个region server进行管理。
Hbase对失败的弹性,归功于hdfs,因为在写数据的时候,数据会被复制到到不通的节点。
Hbase将数据写入到hfiles中,hfile保存在hdfs上面,hdfs完成对hfiles的block的副本(replica)。默认情况下是副本数是3.
Hbase使用commit log(或者称之为Write-Ahead-log,WAL),提交日志也同样写在HDFS上面,默认副本数为3.
Hbase在故障检测以及访问恢复的步骤:
识别宕机的节点(Identifying that a node is down):由于过载或者直接死掉,节点会不再响应。
在write操作进行中的时候进行恢复(Recovering the writes in progress):通过读取commit log,恢复还没有被flush的edit。
重新分配region:失败的regionserver之前在正在处理一些region,这些region需要被重新分配给其他的RS(regionSever),这个分配过程要根据每台RS不通的workload的情况
那上面三个过程中哪一个步骤最痛苦?在检测以及恢复步骤发生的时候,客户端会被阻塞。MTTR的作用就是加速这个处理过程,让客户端对数据downtime的感知时间尽可能的短。
检测失败节点:
一个RS的失败原因很多:正常的情况下,可能是由于clean stop,比如管理员关闭了某个节点,这就允许RS能安全适当的关闭region,然后告诉HMaster,正在关闭。这种情况下,commit log会被清除,然后HMaster会立刻安排region的重新分配。
另外的regionserver关闭的的情况:比如运行RS的计算机静默死亡(silent death),比如网络原因。导致region server不能够发出告警,这种情况有Zookeeper进行处理。 每一个RS都会连接到Zookeeper上面,而Master监测这些连接,Zookeeper自己管理heartbeat。所以timeout出现的时候,Hmaster会申明region server 已经死亡,启动一个恢复处理过程
恢复正在进行中的写操作。
当一个RS 出现了宕机,那么commit logs的恢复工作就发生了。这个恢复工作是并行开始的。
第一步:随机的RS会提取commit logs(从设置好的commit log 目录中),并且按照region来分割日志成多个文件,保存在HDFS上面,然后region会被重新分配给其他任意的RS,
然后每一个被分配的RS的都会去读取已经前面分割好的对应的region 日志文件,并且进行将该region恢复到正确状态。
当出问题的是一个node 失败了,而不是一个进程崩溃了,那么问题就会出现了。
出现进程崩溃的的regionserver,会将数据写入到处于同一台机上面的datanode上面。假设副本因素为3,那么当一个node丢失的时候,你丢失的不仅仅是一个region server,并且还有这个数据的一个副本。 进行split,就意味着要读取block,而1/3的副本已经死了,那么对于每一个block,你会有三分之一的几率被引导到错误的副本上面。还有,split操作需要创建新的文件。每一个文件都会有3个副本,这些副本可能会被指派给已经丢失的datanode,而这个write数据的过程由于datanode已经死亡,会在经过一个timeout之后失败,而重新回转到另外一个datanode上面,这就延缓了数据的恢复的过程。
重新分配region
分配region的工作会进行的很快,这依赖于Zookeeper,需要通过Zookeeper完成master和region server的异步工作。
MTTR带来的提升(The MTTR improvements)
检测失败节点:
首先,可以减小默认的timeout时间。Hbase 被配置成3分钟的Zookeepertimeout时间,这就保证了GC不会介入进来(GC parse会导致ZK的timeout,会导致错误的failure检测。)
对于生产系统,关注MTTR的话,设置timeout时间为1分钟,或者30秒,是很有必要的。
一个合理的最小设置时20秒。所以你可以设置hbase.zookeeper.timeout=60000
你同样设置你GC(incremental, generational GC with good figures for the young and old generations, etc., this is a topic by itself) ,这样使GC的暂停时间不要超过ZK timeout。
恢复正在进行中的写操作。
在正常情况下,会有足够的活跃的RS来并行的完成commit log files的split工作,所以问题的就转到能否直接找到HDFS上面仅存的副本。该问题的解决方案是,配置HDFS,是hdfs对于故障的检测快于hbase的检测。那就是说,如果hbase的timeout为60s,HDFS应该设置成20s(就是设置成20s之后就认为node已经死亡)。在这里我们要描述一下HDFS是如何处理dead node。HDFS的故障检测也同样是依赖于heartbeat和timeout,在HDFS中,如果一个node被申明为dead,那么保存在该datanode上面的replicas将会被复制到其他活跃的datanode上面去,而这个是一个消耗很大的过程,并且,如果多个datanode同事死亡,那么这就会引发“replication storms”,replication storms指所有的副本被重新拷贝,这会加剧系统负载,从而导致某些节点不响应,进而导致这些节点被NN视为已经死亡,而这些节点上面block又要重新被复制,周而复始,这样的replication storms实在是可怕了。
因此,HDFS在开始恢复过程之前会等待一段时间,会比10分钟长一点。而这一点,对于低延时系统来说就是一个问题:访问dead datanode就会促发timeout。在HDFS versions 1.0.4 or 1.2, and branches 2 and 3中,引入一个新的状态:stale。当一个datanode不再发送hearbeat,并且这个时间持续到一个指定的时间,那么datanode处于stale状态。 处于stale状态的节点就是在读写过程中最后一个选择(a last resort for reads),所以启用这种性质,会是恢复更加快。
设置启用stale的方法:修改hdfs-site.xml
<!-- stale mode - 1.2+ -->
<property>
<name>dfs.namenode.avoid.read.stale.datanode</name>
<value>true</value>
</property>
<property>
<name>dfs.namenode.avoid.write.stale.datanode</name>
<value>true</value>
</property>
<property>
<name>dfs.namenode.write.stale.datanode.ratio</name>
<value>1.0f</value>
</property>
<!-- stale mode - branch 1.1.1+ -->
<property>
<name>dfs.namenode.check.stale.datanode</name>
<value>true</value>
</property>
注:我在cloudera cdh-4.1.2 提供的doc的配置项目文档中没有找到该参数,看了源码才找到这些参数。
具体参考HDFS-3912, HDFS-4350:
重新分配region
Region分配的是纯粹hbase的内部实现,在Hbase 0.94+的版本中,region 分配过程的处理被优化了,允许在很短的时间异步分贝更多的region。
具体可以参考[example - Apache jira HBASE-7247].
结论。
在Hbase中没有global failure,如果一个region server 失败了,其他的region server 仍然可用,对于给定的一个数据集,MTTR 通常是 10分钟左右。
该经验数值是从是从比较普遍的情况是中得到的,因为需要使用dead datanode的节点上面副本数,恢复就需要时间。HDFS需要花费10分钟的时间来申明datanode死亡了。 当引入了stale状态的时候,这就不再是一个问题了。这个时候恢复时间就变成Hbase本身的问题,如果你需要考虑MTTR,那么你采用这里的设置,从节点真的出现失败,到数据在其他RS上面又重新变得可用,这个过程只需要2分钟,或者更少。
分享到:
相关推荐
【HBase介绍】 HBase是一种NoSQL数据库,它基于Apache Hadoop构建,设计为高度分布式、多版本的列式存储系统。HBase旨在处理大型数据集,提供对这些数据的实时读写访问,尤其适用于大数据量存储和具有特定查询模式...
### HBase技术详解 #### 一、HBase概述 **HBase**,全称为Hadoop Database,是一款构建在Hadoop之上、面向列的分布式数据库系统。它具备高可靠性、高性能和可扩展性等特点,能够在成本相对低廉的硬件设备上构建大...
在本分享总结中,我们将深入探讨“HBase_介绍”和“HBase云存储”的相关主题,这将涵盖HBase的基础知识、其架构原理、在云计算环境中的应用以及相关的源码解析。首先,我们从HBase的基本概念和功能入手。 HBase是一...
HBase 是一个分布式的、基于列族的NoSQL数据库,它是Apache软件基金会的顶级项目,设计用于处理海量数据。HBase构建在Hadoop之上,旨在为非结构化或半结构化数据提供高吞吐量的随机读写能力,特别适合大规模大数据...
【HBase技术介绍】 HBase,全称是Apache HBase,是一个分布式的、面向列的开源数据库,基于Google的Bigtable设计思想构建于Hadoop文件系统(HDFS)之上。它是Apache软件基金会Hadoop项目的一部分,专为处理大规模...
下面详细介绍HBase的核心知识点。 ### 入门 入门部分包括了介绍和快速开始两小节。在介绍中,对HBase进行了基础的定义和描述,提到其作为一种NoSQL数据库,如何使用它存储和处理数据。快速开始则会指导新用户如何...
在IT行业中,尤其是在大数据处理领域,HBase是一个广泛使用的分布式、高性能、列式存储的NoSQL数据库。HBase是建立在Hadoop文件系统(HDFS)之上,为处理大规模数据提供了一个高效的数据存储解决方案。而Spring Data...
### HBase技术深入解析 #### 引言 HBase,作为大数据领域中一款重要的分布式数据库系统,基于Hadoop生态系统构建,旨在提供高可靠、高性能的数据存储与查询服务。本文将全面解析HBase的核心概念、技术架构及应用...
### HBase技术介绍与NoSQL数据库入门 #### HBase概述 HBase,全称为Hadoop Database,是一款基于Apache Hadoop生态系统的开源、分布式、面向列的NoSQL数据库系统。它被设计用于提供高可靠性、高性能的数据存储解决...
### HBase Java API类介绍 #### 一、概述 HBase是一个分布式的、面向列的开源数据库,基于Google的Bigtable论文实现。它适合于非结构化数据存储,并且能够实时处理PB级别的数据。HBase提供了Java API供开发者使用...
标题与描述均提及了“HBase基础知识”,这指向了对HBase这一分布式数据库系统的全面解析。以下是对HBase的关键知识点的深入阐述: ### HBase是什么? HBase是一种分布式、面向列、多维度、稀疏、高扩展、高性能、...
HBase是一种基于Hadoop生态系统的分布式列式存储系统,它主要设计用于处理大规模的数据存储,尤其是在廉价的PC服务器集群上构建大规模结构化数据仓库。HBase借鉴了Google Bigtable的设计理念,但它是开源的,因此...
### HBase基本知识介绍 #### 一、HBase概述 HBase是Apache Hadoop生态系统中的一个重要的组件,它提供了一种分布式、可扩展的大规模数据存储解决方案。HBase基于Google Bigtable论文设计,并且利用Hadoop HDFS作为...
腾讯云-云数据库对Hbase的独家介绍,介绍腾讯云HBase的使用。 腾讯云-云数据库对Hbase的独家介绍,介绍腾讯云HBase的使用。 腾讯云-云数据库对Hbase的独家介绍,介绍腾讯云HBase的使用。
介绍基本Hadoop体系,全面入门介绍Hbase,主要用于初次对Hbase的入门ppt介绍,ppt页面精美。。。
通过上述内容可以看出,《HBase权威指南》全面而深入地介绍了HBase的相关知识和技术要点,无论是对于初次接触HBase的新手还是想要深入了解其内部机制的资深开发者来说,都是一本不可多得的好书。该书不仅详细解释了...
### HBase 命令原理介绍 #### HBase 概述 HBase 是一个分布式、宽列存储的 NoSQL 数据库,基于 Google Bigtable 的设计理念构建而成。HBase 提供了高可靠性、高性能、面向列的数据存储功能,特别适用于非结构化和半...
### HBase基础应用介绍 #### 一、HBase概述 HBase是Apache Hadoop生态系统中的一个重要的组件,它提供了一种分布式、可扩展的大规模数据存储解决方案。HBase基于Google Bigtable论文的思想实现,旨在为海量结构化...
### HBase 配置内置 ZooKeeper 的详细步骤与解析 #### 一、配置背景与目的 在 HBase 的部署环境中,ZooKeeper 起着非常重要的作用,它主要用于协调...此外,本文还简要介绍了如何通过 HBase shell 进行基本的表操作。
搭建pinpoint需要的hbase初始化脚本hbase-create.hbase