HBase中的备份和故障恢复方法,hbase备份故障恢复


本文将对Apache HBase可用的数据备份机制和大量数据的故障恢复/容灾机制做简要介绍。

随着HBase在重要的商业系统中应用的大量增加,许多企业需要通过对它们的HBase集群建立健壮的备份和故障恢复(backup and disaster recovery, BDR)机制来保证它们的企业(数据)资产。HBase和Apache Hadoop系统提供了许多内置的机制,可以快速而轻松的完成PB级数据的备份和恢复工作。

在这篇文章中,你将会对在HBase中可用的数据备份机制有一个高层次的简要了解,并且知道多种数据恢复/容灾机制。在阅读了这篇文章之后,你应该能对你的业务需要那种BDR策略有了自己的判断。你也应该明白各种机制各自的优缺点(适用于CDH 4.3.0/HBase 0.94.6及更高版本)。

备份

HBase是一个基于LSM树(log-structured merge-tree)的分布式数据存储系统,它使用复杂的内部机制确保数据准确性、一致性、多版本等。因此,你如何获取数十个region server在HDFS和内存中的存储的众多HFile文件、WALs(Write-Ahead-Logs)的一致的数据备份?

让我们从最小的破坏性,最小的数据占用空间,最小的性能要求机制和工作方式到最具破坏性的逐一讲述:

  • Snapshots
  • Replication
  • Export
  • CopyTable
  • HTable API
  • Offline backup of HDFS data

下面的表格提供了一个关于这些方法的快速比较,具体的细节在下面再详细描述。


Snapshots(快照)

HBase快照功能丰富,有很多特征,并且创建时不需要关闭集群。关于snapshot在文章《apache hbase snapshot介绍》中有更详细的介绍。

快照能通过在HDFS中创建一个和unix硬链接相同的存储文件,简单捕捉你的hbase表的某一时刻的信息(图1)。这些快照在几秒内就可以完成,几乎对整个集群没有任何性能影响。并且,它只占用一个微不足道的空间。除了在metadata文件中存储的极少目录数据,你的数据不会冗余,快照允许你的系统回滚到(创建快照)那个时刻,当然,你需要恢复快照。


图1

通过在HBase shell中运行如下命令来创建一个表的快照:

hbase(main):001:0>  snapshot 'myTable', 'MySnapShot'
在执行这条命令之后,你将发现在hdfs中有一些小的数据文件。在 /hbase/.snapshot/myTable (CDH4) 或者hbase/.hbase-snapshots (Apache 0.94.6.1),这些文件中存储着快照信息。想要恢复数据只需要执行在shell中执行如下命令:

hbase(main):002:0>  disable 'myTable'
hbase(main):003:0>  restore_snapshot 'MySnapShot'
hbase(main):004:0>  enable 'myTable'
正如你看到的,恢复快照需要对表进行离线操作。一旦恢复快照,那任何在快照时刻之后做的增加/更新数据都会丢失。如果你的业务需求是这样的:你必须有数据的异地备份,你可以用exportSnapshot命令赋值一个表的数据到你的本地HDFS或者你选择的远程HDFS中。

快照是你的表在某一个时刻的完整图像,目前没有增量快照功能可用。

HBase复制(HBase Relication)

HBase赋值是另外一个负载较轻的备份工具。文章《HBase复制概述》有对它的详细描述。总的来说,赋值被定义为列簇级别,可以工作在后台并且保证所有的编辑操作在集群复制链之间的同步。

复制有三种模式:主->从(master->slave),主<->主(master<->master)和循环(cyclic)。这种方法给你灵活的从任意数据中心获取数据并且确保它能获得在其他数据中心的所有副本。在一个数据中心发生灾难性故障的情况下,客户端应用程序可以利用DNS工具,重定向到另外一个备用位置。

复制是一个强大的,容错的过程。它提供了“最终一致性”,意味着在任何时刻,最近对一个表的编辑可能无法应用到该表的所有副本,但是最终能够确保一致。

注:对于一个存在的表,你需要通过本文描述的其他方法,手工的拷贝源表到目的表。复制仅仅在你启动它之后才对新的写/编辑操作有效。


表2 集群复制架构图

导出(Export)

HBase的导出工具是一个内置的实用功能,它使数据很容易从hbase表导入HDFS目录下的SequenceFiles文件。它创造了一个map reduce任务,通过一系列HBase API来调用集群,获取指定表格的每一行数据,并且将数据写入指定的HDFS目录中。这个工具对集群来讲是性能密集的,因为它使用了mapreduce和HBase 客户端API。但是它的功能丰富,支持制定版本或日期范围,支持数据的筛选,从而使增量备份可用。

下面是一个导出命令的简单例子:

hbase org.apache.hadoop.hbase.mapreduce.Export <tablename> <outputdir>
一旦你的表导出了,你就可以复制生成的数据文件到你想存储的任何地方(比如异地/离线集群存储)。你可以执行一个远程的HDFS集群/目录作为命令的输出目录参数,这样数据将会直接被导出到远程集群。使用这个方法需要网络,所以你应该确保到远程集群的网络连接是否可靠以及快速。

拷贝表(CopyTable)

拷贝表功能在文章《使用CopyTable在线备份HBase》中有详细描述,但是这里做了基本的总结。和导出功能类似,拷贝表也使用HBase API创建了一个mapreduce任务,以便从源表读取数据。不同的地方是拷贝表的输出是hbase中的另一个表,这个表可以在本地集群,也可以在远程集群。

一个简单的例子如下:

hbase org.apache.hadoop.hbase.mapreduce.CopyTable --new.name=testCopy test
这个命令将会拷贝名为test的表到集群中的另外一个表testCopy。

请注意,这里有一个明显的性能开销,它使用独立的“puts”操作来逐行的写入数据到目的表。如果你的表非常大,拷贝表将会导致目标region server上的memstore被填满,会引起flush操作并最终导致合并操作的产生,会有垃圾收集操作等等。

此外,你必须考虑到在HBase上运行mapreduce任务所带来的性能影响。对于大型的数据集,这种方法的效果可能不太理想。

HBase API(比如作为一个java应用)

由于总是这样使用hadoop,你可以使用公用的api写自己定制的客户端应用程序来直接查询表格。你也可以通过mapreduce任务的批量处理优势,或者自己设计的其他手段。然而,这个方法需要对hadoop开发以及因此对生产集群带来的影响有深入的理解。

离线备份原生的HDFS数据(Offline Backup of Raw HDFS Data)

最强力的备份机制,也是破坏性最大的一个。涉及到最大的数据占用空间。你可以干净的关闭你的HBase集群并且手工的在HDFS上拷贝数据。因为HBase已经关闭,所以能确保所有的数据已经被持久化到HDFS上的HFile文件中,你也将能获得一个最准确的数据副本。但是,增量的数据几乎不能再获得,你将无法确定哪些数据发生了变化。

同时也需要注意,恢复你的数据将需要一个离线的元数据因为.META.表将包含在修复时可能无效的信息。这种方法需要一个快速的,可信赖的网络来传输异地的数据,如果需要在稍后恢复它的话。

由于这些原因,Cloudera非常不鼓励在HBase中这种备份方法。

故障恢复(Disaster Recory)

HBase被设计为一个非常能容忍错误的分布式系统,假设硬件失败很频繁。在HBase中的故障恢复通常有以下几种形式:

  • 在数据中心级别的灾难性故障,需要切换到备份位置;
  • 需要恢复由于用户错误或者意外删除的数据的之前一个拷贝;
  • 出于审计目的,恢复实时点数据拷贝的能力

正如其他的故障恢复计划,业务需要驱动这你如何架构并且投入多少金钱。一旦你确定了你将要选择的备份方案,恢复将有以下几种类型:

  • 故障转移到备份集群
  • 导入表/恢复快照
  • 指向HBase在备份位置的根目录

如果你的备份策略是这样的,你复制你的HBase数据在不同数据中心的备份集群,故障转移将变得简单,仅需要使用DNS技术,转移你的应用程序。

请记住,如果你打算允许数据在停运时写入你的备份集群,那你需要确保在停运结束后,数据可以回到主机群。主<->主或循环的复制架构能自动处理这个过程,但对于一个主从结构来讲,你就需要手动进行干预了。

你也可以在故障时通过简单的修改hbase-site.xml的 hbase.root.dir属性来更改hbase根目录,但是这是最不理想的还原选项,因为你复制完数据返回生产集群时,正如之前提到的,可能会发现.META是不同步的。

总结

综上所述,从某种损失或中断中恢复数据需要一个精心设计的BDR计划。强烈建议你彻底明白你的业务需求,然后明白数据精确度/可用性以及故障恢复的最大时间。有了这些知识,你才能更好的选择满足这些需求的工具。

选择工具仅仅是个开始,你应该对你的BDR策略进行大规模测试,以确保它的在你的基础设施下的功能。并且,你应该是非常熟悉所有的故障恢复步骤。

(翻译的不是很好,请如有错误之处,请见谅。)

原文地址:http://blog.cloudera.com/blog/2013/11/approaches-to-backup-and-disaster-recovery-in-hbase/

转载请注明出处:http://blog.csdn.net/iAm333


怎应对恢复故障过程中的各项问题

许多灾难恢复(DR)规划旨在当灾难事故发生后,将关键的系统和数据恢复(或称故障切换)到另一个站点,并在之后恢复(或称故障恢复)至原来系统的原始运营状态。而当系统恢复到其原始运营状态时,企业就能够恢复业务运作。故障切换和故障恢复流程相当之复杂,并且必需在事先仔细规划并测试。当切换到一个备用站点,相应的技术应当能够接管应用,尤其是运营系统、网络访问以及带宽、足够的数据存储、数据库、文件和设备。不过,在切换回原系统之前必需解决一些额外的情况。本篇将分析在故障切换和恢复系统至主站点之前所要解决的各项问题。如果企业规模较大,有诸多办公室和完善的IT部门,那么在你故障切换和故障恢复时可能不会遇到太大的障碍。这是因为你在仓库中应当会留有备份资源,比如服务器、桌面系统、笔记本电脑和其它设备,在恢复站点可以进行快速地替换。不过如果你的企业规模较小并且没有这种额外的资源,你的恢复选择可能会比较局限。对于中小型企业(SMB),有许多种灾难恢复可供选择,不过必需在财务资源、员工、物理空间、已有系统和所需数据之间进行平衡。不过当你准备恢复(故障恢复)至原系统时,事故发生后的环境可能和之前一样,但也可能不一样。在故障恢复时,你通常有两种可能性:你之前的办公环境(假如和事故前没什么两样);抑或是一个不同的场所,部分或甚至全部失去了你原有的办公空间。在故障切换时,应当将以下问题作为整体解决的一部分加以考虑确认:现有系统和相关软件可以复制在备用站点中(物理设备和基于云的解决方案)。所有的重要数据(例如日常工作文件)和信息(例如用户记录)可以复制在备用站点中,并且时间节点尽可能接近事故发生时。特定的故障切换软件(例如Double-Take)在两个站点都可用来启动故障切换作业。有足够的网络带宽(例如通过因特网)传输数据至进行故障切换的备用站点。 当准备恢复至原站点时,测试系统和基础架构来确保其工作正常;确保有足够的存储容量处理返回的系统和数据;并且确保有足够的网络带宽来用于故障恢复。现在,如果你的原站点并不可用,你的灾难恢复规划必须启动如下步骤:获取新的硬件(例如服务器、存储和路由器)和软件(例如操作系统和应用程序)来支持你实现和原环境类似的运作环境。确保空间来放置新的IT设备。获取新的桌面系统和周边设备。安装故障切换/故障恢复软件,如果在你的恢复规划中有这部分策略的话。确保网络带宽足以支持故障恢复工作。再次提醒下,如果你是中小型企业,请考虑购买数TB的外部存储来备份你的系统和数据。这些存储设备可以在许多办公供应商那里购得。同时,部署“第二层备份”也是个不错的作法,以防你的故障切换和故障恢复部署没有如期工作。好消息是市场上有大量用于中小型企业(以及大型企业)的故障切换和故障恢复工具。无论部署何种策略,你需要牢记以下关键点:确保灾难恢复规划中的故障切换和故障恢复活动的正常运作。和已确定的数据恢复供应商协作安排应急备份和恢复。将灾难恢复规划文档化,其中清晰地概括故障切换到备用站点以及故障恢复回主站点或新站点的各项步骤(例如具体脚本)。建立IT硬件和软件的主和备用源。每年测试故障切换和故障恢复流程和系统,确保其工作正常。(最好每周末时进行一次测试,不过桌面的演练同样有效)明确灾难事故中员工的角色和职责。培训IT员工故障切换和故障恢复的流程内容总结确保在进行灾难恢复规划时,你会考虑将IT运营故障切换至另一个备用站点,并且你如何恢复(故障恢复)至原始站点或可能的新站点。很有可能你的故障恢复会比故障切换更为复杂,因此准备好仔细检验所有的可用方式。
 

怎还原备份系统

备份系统文件 还原法:
1、备份系统文件
我们这里说的备份系统文件是通过创建紧急恢复盘来完成的,在计算机系统工作正常时,我们可以制作系统紧急恢复盘,以便在系统出现问题时,使用它来恢复系统文件,采用这种方法我们可以修复基本系统,包括系统文件、引导扇区和启动环境等。
步骤如下:打开“开始”菜单,选择“程序”-->“附件”-->“系统工具”-->“备份”命令,打开“备份工具向导”窗口,可直接单击“高级模式”,打开“备份工具”窗口,在“欢迎”选项卡中,单击“自动系统恢复向导”按钮,将打开“自动系统故障恢复准备向导”对话框,单击“下一步”按钮,进入“备份目的地”对话框,在软驱中插入一张空白的软盘,然后单击“下一步”按钮,继续下去即可完成备份工作。
2、备份硬件配置文件
硬件配置文件可在硬件改变时,指导Windows XP加载正确的驱动程序,如果我们进行了一些硬件的安装或修改,就很有可能导致系统无法正常启动或运行,这时我们就可以使用硬件配置文件来恢复以前的硬件配置。建议用户在每次安装或修改硬件时都对硬件配置文件进行备份,这样可以非常方便地解决许多因硬件配置而引起的系统问题。
步骤如下:鼠标右键单击“我的电脑”,在弹出的快捷菜单中选择“属性”命令,打开“系统属性”对话框,单击“硬件”标签,在出现的窗口中单击“硬件配置文件”按钮,打开“硬件配置文件”对话框,在“可用的硬件配置文件”列表中显示了本地计算机中可用的硬件配置文件清单,在“硬件配置文件选择”区域中,用户可以选择在启动Windows XP时(如有多个硬件配置文件)调用哪一个硬件配置文件。要备份硬件配置文件,单击“复制”按钮,在打开的“复制配置文件”对话框中的“到”文本框中输入新的文件名,然后单击“确定”按钮即可。

3、备份注册表文件
注册表是Windows XP系统的核心文件,它包含了计算机中所有的硬件、软件和系统配置信息等重要内容,因此,我们很有必要做好注册表的备份,以防不测。
步骤如下:首先在“运行”命令框中输入“Regedit.exe”打开注册表编辑器,如果要备份整个注册表,请选择好根目录(我的电脑节点),然后在菜单中选择“导出”命令,打开“导出注册表文件”对话框,在“文件名”文本框中输入新的名称,选择好具体路径,点击“保存”按钮即可。

注意在默认情况下,注册表编辑器会将我们选择的注册表子树或整个树作为保存对象,如果要备份整个注册表,在“导出范围”中选择“全部”单选按钮;如果只备份注册表中的某一分支,选择“所选分支”单选按钮,然后输入要导出的分支名称即可。
4、制作系统的启动盘
对于不能从光盘引导启动的计算机,为了防止系统出现故障而无法引导,我们还应该制作用来引导计算机的启动盘,当系统不能启动时,用启动盘引导启动计算机后,可以使用“恢复控制台”、“紧急修复磁盘”和“自动系统恢复”等功能来恢复系统。准备4张空白的、格式化好的3.5英寸软盘,分别标注为“启动盘1”、“启动盘2”、“启动盘3”和“启动盘4”来方便区分,在Windows XP安装时,根据安装向导可以很方便地制作启动盘。
5、备份整个系统
在我们计算机系统中,往往存放着一些非常重要的常规数据,它们有的甚至比系统数据都重要,比如公司的财务数据和业务数据等。因此我们在备份系统数据的同时,还应该注意备份一些常规重要数据。
要备份整个系统数据请按如下步骤进行:打开“开始”菜单,选择“程序”、“附件”、“系统工具”、“备份”命令,打开“备份工具”窗口中的“欢迎”选项卡,单击“备份”按钮,......余下全文>>
 

相关内容