Trafodion完全脱机备份/还原

Trafodion的完全脱机备份和还原操作通过 HBase快照特征来执行。快照是以轻量方式无需通过数据的复制从而保持表的当前状态。比如,一张更改后的表需要被还原,恢复快照就会给出此表的前一个状态。更多关于快照的介绍可以查找此链接:http://blog.cloudera.com/blog/2013/03/introduction-to-apache-hbase-snapshots/。

快照可用于Trafodion的所有表,包括Trafodion的元数据表,然后通过HBase ExportSnapshot Mapreduce job导出到HDFS。当我们需要从HDFS还原备份的文件时,快照同样通过ExportSnapshot MapReduce作业被导入到目标系统被还原。关于Trafodion完整的备份还原过程,如下所示:

完全脱机备份

  • 使用HBase shell snapshot命令来完成用于所有Trafodion表的备份快照。
  • 快照一经使用,将通过ExportSnapshot MapReduce作业逐个被导出到HDFS的文件夹,ExportSnapshot MapReduce作业为HBase安装基础的一部分。此MapReduce作业可使用 -m 选项并行执行。
  • 如需可存档或可移动到不同集群的备份文件,可使用hadoop distcp或其它可行方法。
  • Trafodion完全停止运行前需进行完整的脱机备份。

完全脱机还原

  • 若要还原保存于HDFS中的快照,可通过ExportSnapshot MapReduce作业将快照逐一导入到HBase。MapReduce任务可以并行运行。
  • 快照一经导入,可使用‘restore_snapshot’HBase shell命令进行还原。
  • Trafodion完全停止运行前需进行完整的脱机还原。

Trafodion表

在HBase中创建Trafodion表,表名需有一定的格式,如‘TRAFODION.< 架构名称 >.< 表名称 >;’。如若备份所有的Trafodion表,备份工具将选择和备份具有命名形式如TRAFODION.< 任何架构名称 >.< 任何表名称 >的表。除了用户表,元数据表(TRAFODION._MD_.< 表名称 >)和存储库表 (TRAFODION._REPOS_.< 表名称 >) 也应备份。

Sudo访问权限

备份和还原工具可用于开发和集群环境,Cloudera或Horton Works分布。如在集群环境中运行备份和还原脚本,运行脚本的用户需要sudo权限,以便能够作为HBase用户(用户在HBase服务器运行下),HDFS用户和Trafodion用户在无需输入密码的情况下运行脚本。但是在开发环境中运行脚本时,不需要sudo权限。

备份文件的安全性

备份还原操作需使用具有sudo访问权限的用户来执行,此用户可以sudo访问HBase用户。备份和还原都通过具有读和写权限的ExportSnapshot MapReduce作业来访问到这些位置:

  • HBase根目录由hbase.rootdir属性定义。此文件夹为HBase用户拥有。
  • 备份文件夹的所有者或者具有相应的读写权限的HBase用户可以访问此备份文件夹。如果HDFS目标文件夹不存在,备份脚本将试图创建目标HDFS文件夹。

脚本

备份脚本:run_full_trafodion_backup.sh。

/run_full_trafodion_backup.sh脚本执行所有trafodion表的完全脱机备份,并将备份文件复制到HDFS。

使用该脚本的命令如下所示:

./run_full_trafodion_backup.sh -b backup_folder -u trafodion_user -h HBase_user -d hdfs_user -m mappers -n

其中:

-b backup_folder

(可选)所有的Trafodion对象导出并保存于HDFS路径

HDFS路径要求的格式,如hdfs://<host>:<port>/<folder>/...

如果不提供路径,脚本会生成一个路径,格式如

hdfs://<host>:<port>/trafodion-backlups/backup_<timestamp> and unless -n

指示用户会被询问是否确认生成的

路径的使用。

-u trafodion 用户

(可选)在Trafodion服务器运行的用户。如果没有提供,而且

如果选项 -n 没有指示,用户会被询问是否使用默认的

trafodion用户‘trafodion'。若回答为yes,则

使用默认的trafodion用户,否则脚本退出。

-h hbase 用户

(可选)在HBase服务器运行的用户。如果没有提供,脚本

将试图计算,如果不成功,则使用默认

的HBase用户 'hbase'。除非指定-n 选项,则会要求用户

确认之后的选择。

-d hdfs 用户

(可选)在HDFS服务器运行的用户。如果没有提供,脚本

将试图计算,如果不成功,则建议使用默认

的HDFS用户 'hdfs'。除非指定-n 选项,则会要求用户

确认之后的选择。

-m mappers

(可选)mappers的数目,默认为2.

-n

(可选)非交互模式。使用此选项,脚本不会提示

用户确认使用的计算或默认值参数,

如trafodion用户,HBase用户,HDFS用户或不提供备份路径。

示例:./run_full_trafodion_backup.sh -b hdfs://<host>:<port>/<hdfs-path> -m 4

在Trafodion表备份之前执行检查

备份脚本在开始实际备份之前执行以下检查:

  • 确保Trafodion完全停止。
  • 确保备份文件夹存在,为空,且HBase用户具有对其进行写入的权限。如果它不存在,将试图创建。
  • 确保启用了HBase快照。
  • 确保运行脚本的用户拥有sudo访问权限。
  • 创建HBase主目录,如果它不存在。
  • 试图找出HBase和HDFS的用户,如果这些用户没有提供。

还原:run_full_trafodion_restore.sh。

./run_full_trafodion_restore.sh脚本从HDFS执行所有的trafodion表的完全脱机还原。

使用该脚本的命令如下所示:

./run_full_trafodion_restore.sh -b backup_folder -b backup_dir -u trafodion_user -h hbase_user -m mappers -n

其中:

-b backup_folder

(非可选)HDFS路径,所有的Trafodion对象导出并保存于此,

而HDFS路径需有特定的格式,如:hdfs://<host>:<port>/<folder>/...

-u trafodion 用户

(可选)在Trafodion服务器运行的用户。如果没有提供,而且

选项 -n 没有指定,用户则会被询问是否使用默认的

trafodion用户‘trafodion'。若回答为yes,则

使用默认的trafodion用户,否则脚本退出。

-h hbase 用户

(可选)在HBase服务器运行的用户。如果没有提供,脚本

将试图计算,如果不成功,则建议使用默认

的HBase用户 'hbase'。除非指定-n 选项,则会要求用户

确认之后的选择。

-d hdfs 用户

(可选)在HDFS服务器运行的用户。如果没有提供,脚本

将试图计算,如果不成功,则建议使用默认

的HDFS用户 'hdfs'。除非指定-n 选项,则会要求用户

确认之后的选择。

-m mappers

(可选)mappers的数目,默认为2.

-n

(可选)非交互模式。使用此选项,脚本不会提示

用户确认使用的计算或默认值参数,

如trafodion用户,HBase用户,HDFS用户或不提供备份路径。

示例:./run_full_trafodion_restore.sh -b hdfs://<host>:<port>/<hdfs-path> -m 4

在开始还原之前执行检查

备份脚本在开始实际备份之前执行以下检查:

  • 确保Trafodion完全停止。
  • 确保备份文件夹存在,为空,且HBase用户具有对其进行写入的权限。如果它不存在,将试图创建。
  • 确保启用了HBase快照。
  • 确保运行脚本的用户拥有sudo访问权限。
  • 创建HBase主目录,如果它不存在。
  • 试图找出的HBase和HDFS的用户,如果这些用户没有提供。

辅助脚本

备份与还原脚本使用一套共享的脚本和功能,介绍如下:

  • backup_restore_functions.sh :作为一套辅助函数

示例

集群上备份与还原

备份

在Cloudera或者Hortonworks的集群上执行备份。我们可以:

./run_full_trafodion_backup.sh -b hdfs://<host>:8020/bulkload/backup -m 16

其中,hdfs://<host>:8020/bulkload/backup是此示例中我们希望备份快照存在的hdfs地址。

还原

在Cloudera和Horton Works distributions上执行还原。 可以这样:

./run_full_trafodion_restore.sh -b /bulkload/backup -m 4

在开发工作站上备份还原

关于ExportSnapshot在开发环境中的工作,我们需要从$MY_SQROOT/sql/local_hadoop/hbase/lib 目录下复制几个jar文件。否则当运行ExportSnapshot MapReduce作业时,会得到异常错误。这些措施表明,在工作站上测试时,可能有其他的方式来避免异常。

在shell窗口中,当sqenv.sh初始化后,我们需要在执行备份或还原之前执行下面的命令。

cd $MY_SQROOT/sql/local_hadoop
cp ./hadoop-2.4.0/share/hadoop/yarn/*.jar ./hbase/lib
cp ./hadoop-2.4.0/share/hadoop/mapreduce/hadoop-mapreduce-client*.jar ./hbase/lib/

在开发环境中实行备份,我们首先需要确定hdfs的端口(工作站不总是使用标准端口)。我们可以从位于$MY_SQROOT/sql/local_hadoop/hadoop/etc/hadoop/的core-site.xm的配置文件中找到端口号。在此示例中,端口号是28400:

bash-4.1$ cat $MY_SQROOT/sql/local_hadoop/hadoop/etc/hadoop/core-site.xml

<?xml version="1.0"?>
<?xml-stylesheet type="text/xsl" href="configuration.xsl"?>
<!-- Put site-specific property overrides in this file. -->
<configuration>
    <property>
        <name>fs.default.name</name>
     <value>hdfs://localhost:28400</value>
    </property>

备份

使用上面的端口号来备份,命令是:

./run_full_trafodion_backup.sh -b hdfs://localhost:<port-number>/bulkload/backup -m 4

还原

执行还原:

run_full_trafodion_restore.sh -b hdfs://localhost:<port-number>/bulkload/backup -m 4

测试

目前为止进行的测试用例包括:

拥有HBase 0.98的系统上的备份/恢复

在HBase0.98中创建的所有的Trafodion表备份并导出到hdfs。然后所有的Trafodion表被删除。接下来,备份文件从备份地址到原来被创建的HBase.98中得到还原。对这种类型的测试:

  • 装有Trafodion 0.9的工作站,与装有Cloudera distribution的HBase 0.98(开发环境),测试通过。
  • 装有Trafodion 0.9与HBase 0.98(HortonWorks distribution)的4个节点的集群。测试通过。
  • 装有Trafodion 0.9与HBase 0.98(Cloudera distribution)的2个节点的集群。测试通过。

使用两个不同的拥有Trafodion 0.9和HBase 0.98的系统的备份/还原

在这些测试中所涉及的步骤如下:

  • Trafodion源到HDFS地址的备份
  • 从hdfs文件移动到有HBase.98的系统。此步骤涉及到从HDFS的备份文件复制到本地磁盘,然后使用scp linux命令将文件移动到目标系统中,然后将备份文件复制到目标系统上的HDFS地址。另一种移动备份文件的方式是使用hadoop distcp,但目前它无法工作,因为与distcp相关的IP端口没有开放。
  • 从备份文件还原目标系统上的备份

这种类型的测试:

  • 从装有Horton works的4节点的集群到装有Cloudera的2节点集群。测试通过
  • 从一个工作站到另一个都装有Cloudera的HBase的工作站(开发环境)。测试通过

使用两个不同的都有Trafodion0.9的系统备份/还原,其中源系统是HBase0.94.6,目标系统为 HBase0.98。

在此测试中我们所面临的主要问题如下:

  • 导出快照是空的(表为空),从而造成HBase.94.6失败,并产生异常。这是一个已经知道的问题,在https://issues.apache.org/jira/browse/HBASE-8199中有描述。这个问题在HBase 0.94.7中得到了修复,在HBse0.94.6没有。
  • 在HBase中间,一般来说(包括快照)是在HBase.94.6和更高版本包括0.98之间,存在兼容性的问题。由于此问题的存在,从HBase.94.6快照到HBase .98的导入无法正常工作。
  • 一种解决此兼容性问题的方法,如果要还原到0.98 HBase,是在备份之前,将系统从HBase 0.94.6升级到0.98.x。从HBase 0.94.6到HBase 0.98的升级本身需要2个步骤:从HBase 0.94.6升级到HBase 0.96,然后从 HBase 0.96 升级到HBase 0.98。升级步骤可以在此找到http://HBase.apache.org/book/ch03s04.html
  • 由于上面列出的受限制的问题,此测试用例未成功。
  • No labels