备份与恢复
备份恢复功能主要用于快速的将集群快照备份到远端存储上,并且在需要的时候可以快速的从备份的数据中恢复。
不同于 数据导出 功能,备份功能是直接将数据文件拷贝到远端存储上,因此从整体速度上说优于导出功能,但备份的数据只能用于 PALO 自身的恢复功能,而导出的数据可以被其他系统读取和利用。
基本概念
-
仓库(Repository)
在进行备份恢复操作前,用户需要先创建一个仓库(Repository)。仓库是一个远端存储系统上的目录在 PALO 中的映射。备份操作会将数据上传到这个路径中,而恢复操作则是从这个路径中下载数据。
PALO 支持创建和删除仓库。具体帮助可参阅 CREATE REPOSITORY 以及 DROP REPOSITORY 命令手册。通过 SHOW REPOSITORIES 命令可以查看已经创建好的仓库。
-
备份(Backup)
备份操作可以以最小分区粒度,直接以 PALO 存储的文件的形式,上传到远端仓库中进行存储。当用户提交 Backup 请求后,系统内部会做如下操作:
-
快照及快照上传
快照阶段会对指定的表或分区数据文件进行快照。之后,备份都是对快照进行操作。在快照之后,对表进行的更改、导入等操作都不再影响备份的结果。快照只是对当前数据文件产生一个硬链,耗时很少。快照完成后,会开始对这些快照文件进行逐一上传。快照上传由各个 Compute Node 节点并发完成。
-
元数据准备及上传
数据文件快照上传完成后,Leader Node 节点会首先将对应元数据写成本地文件,然后将本地元数据文件上传到远端仓库。完成最终备份作业。
关于备份的具体操作,可以参阅 BACKUP 语法手册。备份操作是一个异步操作,可以通过 SHOW BACKUP 命令查看操作进度。同时,可以通过 CANCEL BACKUP 命令取消一个正在运行的备份操作。
-
-
恢复(Restore)
恢复操作需要指定一个远端仓库中已存在的备份,然后将这个备份的内容恢复到本地集群中。当用户提交 Restore 请求后,系统内部会做如下操作:
-
在本地创建对应的元数据
这一步首先会在本地集群中,创建恢复对应的表分区等结构。创建完成后,该表可见,但是不可访问。
-
下载快照
下载远端仓库中的快照文件到各自对应的 Compute Node 节点上。
-
生效快照
快照下载完成后,我们要将各个快照映射为当前本地表的元数据。然后重新加载这些快照,使之生效,完成最终的恢复作业。
关于恢复的具体操作,可以参阅 RESTORE 语法手册。恢复操作是一个异步操作,可以通过 SHOW-RESTORE 命令查看操作进度。同时,可以通过 CANCEL-RESTORE 命令取消一个正在运行的恢复操作。
-
操作示例
我们通过一个完整示例展示如果通过备份恢复操作,将 A 集群的数据迁移至 B 集群。
-
在 A 集群创建仓库
SQL1CREATE REPOSITORY `bos_repo` 2WITH BROKER `bos` 3ON LOCATION "bos://my_bucket/doris_backup" 4PROPERTIES 5( 6 "bos_endpoint" = "http://bj.bcebos.com", 7 "bos_accesskey" = "xxxxxxxxxxxxxxxxxx", 8 "bos_secret_accesskey"="yyyyyyyyyyyyyyy" 9);
创建一个名为
bos_repo
的仓库,指向doris_backup
目录。更多详细帮助,请参阅 CREATE REPOSITORY。 -
在 A 集群进行备份数据操作
SQL1BACKUP SNAPSHOT example_db.snapshot1 2TO `bos_repo` 3ON 4( 5 example_tbl PARTITION (p1,p2), 6 example_tbl2 7);
指定
example_db
库中的example_tbl
表的两个分区,以及example_tbl2
表进行备份。备份到bos_repo
这个仓库中。本次备份的名称为snapshot1
。关于备份操作的更多详细帮助,请参阅 BACKUP。备份操作是一个异步命令,具体进度须通过 SHOW BACKUP 命令查看。当返回结果中的
State
字段为 FINISHED,即表示备份完成。 -
在 B 集群创建相同的仓库:
SQL1CREATE REPOSITORY `bos_repo` 2WITH BROKER `bos` 3ON LOCATION "bos://my_bucket/doris_backup" 4PROPERTIES 5( 6 "bos_endpoint" = "http://bj.bcebos.com", 7 "bos_accesskey" = "xxxxxxxxxxxxxxxxxx", 8 "bos_secret_accesskey"="yyyyyyyyyyyyyyy" 9);
-
在 B 集群查看仓库中的备份快照
SQL1SHOW SNAPSHOT ON `bos_repo`;
更多帮助,可以查看 SHOW SNAPSHOT 语法手册。
-
在 B 集群执行恢复数据操作
SQL1RESTORE SNAPSHOT example_db.`snapshot1` 2FROM `bos_repo` 3ON 4( 5 `example_tbl2` 6) 7PROPERTIES 8( 9 "backup_timestamp"="2020-05-04-16-45-08", 10 "replication_num" = "1" 11);
指定
bos_repo
中名称为snapshot1
的备份数据,选择恢复其中的example_tbl2
表。每个备份数据都有一个时间戳(backup_timestamp
),需要显示指定。同时这里我们指定只恢复一个副本。恢复操作也是一个异步命令,具体进度须通过 SHOW RESTORE 命令查看。当返回结果中的
State
字段为 FINISHED,即表示恢复完成。
典型实践
备份
当前我们支持最小分区(Partition)粒度的全量备份。如果需要对数据进行定期备份,首先需要在建表时,合理的规划表的分区及分桶,比如按时间进行分区。然后在之后的运行过程中,按照分区粒度进行定期的数据备份。
通过按分区粒度进行备份,可以起到增量备份的目的。
数据迁移
用户可以先将数据备份到远端仓库,再通过远端仓库将数据恢复到另一个集群,完成数据迁移。因为数据备份是通过快照的形式完成的,所以,在备份作业的快照阶段之后的新的导入数据,是不会备份的。因此,在快照完成后,到恢复作业完成这期间,在原集群上导入的数据,都需要在新集群上同样导入一遍。
建议在迁移完成后,对新旧两个集群并行导入一段时间。完成数据和业务正确性校验后,再将业务迁移到新的集群。
备份任务管理
前置说明:
- 通过管理页面进行备份与恢复功能,需要由 PALOFullControlAccessPolicy 权限的用户进行授权。
- PALO 产品默认将数据备份到 百度对象存储 BOS,因此PALO需要创建独立子用户,并仅用于百度数据仓库 PALO 创建备份仓库、写入备份文件、恢复备份文件等与BOS交互场景鉴权,请勿修改及删除子用户,以免影响功能正常使用。
数据备份任务创建
- 进入Palo控制台,在集群管理界面单击集群名称进入集群详情。在侧边导航选择备份恢复进入备份任务管理界面。
- 单击创建任务按钮,进入任务创建流程。注意:在创建任务前需指定bos存储桶。若需修改bos存储桶,单击修改bos存储桶按钮可修改。如没有存储桶,单击去创建BOS存储桶去创建。
- 填写备份任务基本信息和数据范围,填写完成后提交。备份任务开始后,可以在变更记录中查询任务详细进度。
表一 参数说明
配置项名称 | 说明 |
---|---|
任务名称 | 填写任务名称。默认为“BACKUP_{“当前日期”+“时间”+“分钟”}”。 |
BOS存储桶 | 自动填充。不可在创建任务流程中进行修改。 |
任务类型 | 支持单次备份。 |
执行方式 | 定时执行、立即执行。 |
执行时间 | 选择备份执行时间。当选择立即执行时不可选择时间。 |
备份方式 | 选择全量备份、按库备份或按表备份。 |
库表选择 | 在搜索框中搜索表名或库名,选择需要恢复的表或库。 |
备份任务列表
列表支持通过任务类型和最近一次任务状态筛选,状态类型有未开始、备份中、取消中、备份失败、备份成功、备份恢复中。并且可对任务进行删除、编辑和快照操作。
表二 备份任务操作详细说明
操作名称 | 说明 |
---|---|
快照 | 单击快照按钮进入备份详情界面,可查看快照列表,列表可查看当前任务的快照名称、状态、存储桶、备份大小、对应内核版本和生成时间。另外,在备份任务列表单击任务名称也可查看快照列表。 |
编辑 | 对于单次备份任务,在任务未开始执行前,允许进行编辑。不允许修改任务名称和任务类型。 |
删除 | 任务允许删除,删除任务不影响已经生成的快照。 |
快照管理
快照列表
- 进入Palo控制台,在集群管理界面单击集群名称进入集群详情。
- 在备份恢复界面单击快照列表标签页,进入快照列表。
- 列表支持通过时间范围搜索,同时还可支持输入快照名称、任务名称和BOS存储桶搜索。
- 删除快照:单击快照删除按钮,即可删除快照。但删除快照记录,BOS存储桶对应文件不会删除,
数据恢复
- 在快照列表界面,单击需要数据恢复的快照按钮,进入数据恢复界面。
- 选择数据恢复方式和选择库表后单击确定,数据开始恢复。数据恢复开始后,可以在变更记录中查询任务详细进度。
需要注意的是:
- 备份数据会按备份表的原名称恢复到当前集群的当前数据库
- 数据恢复过程中如果存在与已经备份表名称相同的表,恢复任务会失败,如存在同名表,建议修改或删除同名表
- 数据恢复后,将沿用备份表的配置,包括表副本数,动态分区开启状态等
- 如果开启动态分区,可能导致历史分区被删除。若不沿用备份表配置,默认恢复为表1副本