备份与恢复
所有文档
menu
没有找到结果,请重新输入

PALO

备份与恢复

备份恢复功能主要用于快速的将集群快照备份到远端存储上,并且在需要的时候可以快速的从备份的数据中恢复。

不同于 数据导出 功能,备份功能是直接将数据文件拷贝到远端存储上,因此从整体速度上说优于导出功能,但备份的数据只能用于 Doris 自身的恢复功能,而导出的数据可以被其他系统读取和利用。

基本概念

  1. 仓库(Repository)

    在进行备份恢复操作前,用户需要先创建一个仓库(Repository)。仓库是一个远端存储系统上的目录在 Doris 中的映射。备份操作会将数据上传到这个路径中,而恢复操作则是从这个路径中下载数据。

    Doris 支持创建和删除仓库。具体帮助可参阅 CREATE REPOSITORY 以及 DROP REPOSITORY 命令手册。通过 SHOW REPOSITORIES 命令可以查看已经创建好的仓库。

  2. 备份(Backup)

    备份操作可以以最小分区粒度,直接以 Doris 存储的文件的形式,上传到远端仓库中进行存储。当用户提交 Backup 请求后,系统内部会做如下操作:

    1. 快照及快照上传

      快照阶段会对指定的表或分区数据文件进行快照。之后,备份都是对快照进行操作。在快照之后,对表进行的更改、导入等操作都不再影响备份的结果。快照只是对当前数据文件产生一个硬链,耗时很少。快照完成后,会开始对这些快照文件进行逐一上传。快照上传由各个 Compute Node 节点并发完成。

    2. 元数据准备及上传

      数据文件快照上传完成后,Leader Node 节点会首先将对应元数据写成本地文件,然后将本地元数据文件上传到远端仓库。完成最终备份作业。

    关于备份的具体操作,可以参阅 BACKUP 语法手册。备份操作是一个异步操作,可以通过 SHOW BACKUP 命令查看操作进度。同时,可以通过 CANCEL BACKUP 命令取消一个正在运行的备份操作。

  3. 恢复(Restore)

    恢复操作需要指定一个远端仓库中已存在的备份,然后将这个备份的内容恢复到本地集群中。当用户提交 Restore 请求后,系统内部会做如下操作:

    1. 在本地创建对应的元数据

      这一步首先会在本地集群中,创建恢复对应的表分区等结构。创建完成后,该表可见,但是不可访问。

    2. 下载快照

      下载远端仓库中的快照文件到各自对应的 Compute Node 节点上。

    3. 生效快照

      快照下载完成后,我们要将各个快照映射为当前本地表的元数据。然后重新加载这些快照,使之生效,完成最终的恢复作业。

    关于恢复的具体操作,可以参阅 RESTORE 语法手册。恢复操作是一个异步操作,可以通过 SHOW-RESTORE 命令查看操作进度。同时,可以通过 CANCEL RESTORE 命令取消一个正在运行的恢复操作。

操作示例

我们通过一个完整示例展示如果通过备份恢复操作,将 A 集群的数据迁移至 B 集群。

  1. 在 A 集群创建仓库

    CREATE REPOSITORY `bos_repo`
    WITH BROKER `bos`
    ON LOCATION "bos://my_bucket/doris_backup"
    PROPERTIES
    (
        "bos_endpoint" = "http://bj.bcebos.com",
        "bos_accesskey" = "xxxxxxxxxxxxxxxxxx",
        "bos_secret_accesskey"="yyyyyyyyyyyyyyy"
    );

    创建一个名为 bos_repo 的仓库,指向 doris_backup 目录。更多详细帮助,请参阅 CREATE REPOSITORY

  2. 在 A 集群进行备份数据操作

    BACKUP SNAPSHOT example_db.snapshot1
    TO `bos_repo`
    ON
    (
        example_tbl PARTITION (p1,p2),
        example_tbl2
    );

    指定 example_db 库中的 example_tbl 表的两个分区,以及 example_tbl2 表进行备份。备份到 bos_repo 这个仓库中。本次备份的名称为 snapshot1。关于备份操作的更多详细帮助,请参阅 BACKUP。

    备份操作是一个异步命令,具体进度须通过 SHOW BACKUP 命令查看。当返回结果中的 State 字段为 FINISHED,即表示备份完成。

  3. 在 B 集群创建相同的仓库:

    CREATE REPOSITORY `bos_repo`
    WITH BROKER `bos`
    ON LOCATION "bos://my_bucket/doris_backup"
    PROPERTIES
    (
        "bos_endpoint" = "http://bj.bcebos.com",
        "bos_accesskey" = "xxxxxxxxxxxxxxxxxx",
        "bos_secret_accesskey"="yyyyyyyyyyyyyyy"
    );
  4. 在 B 集群查看仓库中的备份快照

    SHOW SNAPSHOT ON `bos_repo`;

    更多帮助,可以查看 SHOW SNAPSHOT 语法手册。

  5. 在 B 集群执行恢复数据操作

    RESTORE SNAPSHOT example_db.`snapshot1`
    FROM `bos_repo`
    ON
    (
        `example_tbl2`
    )
    PROPERTIES
    (
        "backup_timestamp"="2020-05-04-16-45-08",
        "replication_num" = "1"
    );

    指定 bos_repo 中名称为 snapshot1 的备份数据,选择恢复其中的 example_tbl2 表。每个备份数据都有一个时间戳(backup_timestamp),需要显示指定。同时这里我们指定只恢复一个副本。

    恢复操作也是一个异步命令,具体进度须通过 SHOW RESTORE 命令查看。当返回结果中的 State 字段为 FINISHED,即表示恢复完成。

最佳实践

备份

当前我们支持最小分区(Partition)粒度的全量备份。如果需要对数据进行定期备份,首先需要在建表时,合理的规划表的分区及分桶,比如按时间进行分区。然后在之后的运行过程中,按照分区粒度进行定期的数据备份。

通过按分区粒度进行备份,可以起到增量备份的目的。

数据迁移

用户可以先将数据备份到远端仓库,再通过远端仓库将数据恢复到另一个集群,完成数据迁移。因为数据备份是通过快照的形式完成的,所以,在备份作业的快照阶段之后的新的导入数据,是不会备份的。因此,在快照完成后,到恢复作业完成这期间,在原集群上导入的数据,都需要在新集群上同样导入一遍。

建议在迁移完成后,对新旧两个集群并行导入一段时间。完成数据和业务正确性校验后,再将业务迁移到新的集群。

BI工具接入物化视图