下载安卓APP箭头
箭头给我发消息

客服QQ:3315713922

HBase中的备份与故障还原方法

作者:课课家教育     来源: http://www.kokojia.com点击数:1234发布时间: 2017-08-21 16:00:21

标签: 云计算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

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

HBase中的备份与故障还原方法_云计算_HBase_数据_课课家教育

  Snapshots(快照)

  HBase快照功能丰富,有很多特征,并且创建时不需要关闭集群。

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

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

  通过在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赋值是另外一个负载较轻的备份工具。总的来说,赋值被定义为列簇级别,可以工作在后台并且保证所有的编辑操作在集群复制链之间的同步。

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

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

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

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

  导出(Export)

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

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

  hbase org.apache.hadoop.hbase.mapreduce.Export

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

  拷贝表(CopyTable)

  这里做了基本的总结。和导出功能类似,拷贝表也使用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策略进行大规模测试,以确保它的在你的基础设施下的功能。并且,你应该是非常熟悉所有的故障恢复步骤。

  小分享:备份系统文件

  我们这里说的备份系统文件是通过创建紧急恢复盘来完成的,在计算机系统工作正常时,我们可以制作系统紧急恢复盘,以便在系统出现问题时,使用它来恢复系统文件,采用这种方法我们可以修复基本系统,包括系统文件、引导扇区和启动环境等。

  步骤如下:打开“开始”菜单,选择“程序”-->“附件”-->“系统工具”-->“备份”命令,打开“备份工具向导”窗口,可直接单击“高级模式”,打开“备份工具”窗口,在“欢迎”选项卡中,单击“自动系统恢复向导”按钮,将打开“自动系统故障恢复准备向导”对话框,单击“下一步”按钮,进入“备份目的地”对话框,在软驱中插入一张空白的软盘,然后单击“下一步”按钮,继续下去即可完成备份工作。

  目前比较常见的备份方式有:定期磁带备份数据。

  远程磁带库、光盘库备份。即将数据传送到远程备份中心制作完整的备份磁带或光盘。

  远程关键数据+磁带备份。采用磁带备份数据,生产机实时向备份机发送关键数据。

  远程数据库备份。就是在与主数据库所在生产机相分离的备份机上建立主数据库的一个拷贝。

  网络数据镜像,这种方式是对生产系统的数据库数据和所需跟踪的重要目标文件的更新进行监控与跟踪,并将更新日志实时通过网络传送到备份系统,备份系统则根据日志对磁盘进行更新。

  远程镜像磁盘。通过高速光纤通道线路和磁盘控制技术将镜像磁盘延伸到远离生产机的地方,镜像磁盘数据与主磁盘数据完全一致,更新方式为同步或异步。  数据备份必须要考虑到数据恢复的问题,包括采用双机热备、磁盘镜像或容错、备份磁带异地存放、关键部件冗余等多种灾难预防措施。

  这些措施能够在系统发生故障后进行系统恢复。但是这些措施一般只能处理计算机单点故障,对区域性、毁灭性灾难则束手无策,也不具备灾难恢复能力。

     以上为HBase中的备份与故障还原方法,大家懂了吗?相信大家一定学到了不少知识吧?当然如果还有什么不懂得地方,请登录课课家教育平台咨询哟~

赞(0)
踩(0)
分享到:
华为认证网络工程师 HCIE直播课视频教程