备份与恢复

          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工具接入
          下一篇
          物化视图