为 AlloyDB Omni 设置 pgBackRest

选择文档版本:

本页面介绍了如何通过将 AlloyDB Omni 配置为与开源数据库备份服务器 pgBackRest 配合使用来保护数据。如需大致了解可用的备份解决方案,请参阅备份和恢复 AlloyDB Omni

如需了解基于 Kubernetes 的信息,请参阅在 Kubernetes 中备份和恢复

pgBackRest 是适用于 PostgreSQL 的灵活备份和恢复实用程序。由于 AlloyDB Omni 与 PostgreSQL 兼容,因此您可以使用 pgBackRest 通过手动备份、预定备份和持续备份来保护 AlloyDB Omni 数据。

pgBackRest 会将其备份数据写入本地、远程或云端仓库。建立至少一个仓库后,您可以使用 pgBackRest 通过各种方法(包括时间点恢复 [PITR])来恢复 AlloyDB Omni 数据。

AlloyDB Omni 在其 Docker 容器中包含 pgBackRest。这意味着,您可以使用 pgBackRest 备份和恢复 AlloyDB Omni 数据,而无需安装任何其他软件。

如需详细了解 pgBackRest,请参阅用户指南

准备工作

在将 AlloyDB Omni 配置为与 pgBackRest 配合使用之前,您需要在自己控制的服务器上安装并运行 AlloyDB Omni

关于文件系统路径的说明

AlloyDB Omni 附带的 pgBackRest 软件与 AlloyDB Omni 在同一 Docker 容器中运行。因此,您通过 pgBackRest 的配置文件或以命令行参数形式为其提供的所有文件系统路径都是容器文件系统中的位置,而不是宿主机文件系统中的位置。

本页面上的许多命令和示例都以 /var/lib/postgresql/data 的形式引用数据目录,无论数据目录在主机系统中的位置如何。这是因为 AlloyDB Omni 会将数据目录装载到其容器化文件系统中的 /var/lib/postgresql/data。因此,您可以使用数据目录作为存储 pgBackRest 配置和仓库的位置,而无需进行进一步设置。

如果您想将容器化 pgBackRest 配置为对宿主机文件系统上 AlloyDB Omni 数据目录之外的目录进行读取或写入,则需要将这些目录提供给容器

具有本地备份的基本配置

本部分中的步骤会引导您完成 pgBackRest 的基本设置,其中包括一个简短的配置文件,该文件会指示 pgBackRest 将持续备份数据写入到 AlloyDB Omni 数据目录的子目录。

由于 pgBackRest 是一款与 AlloyDB Omni 兼容的灵活第三方产品,因此您可以根据自己的需求和偏好适当修改其中的任何步骤。如果您确实更改了任何文件系统路径,请记住这些路径必须对容器可见;请参阅关于文件系统路径的说明

设置受信任的 Unix 套接字身份验证

允许您的 AlloyDB Omni 宿主机在不需要输入密码的情况下对数据库服务器的 postgres 用户进行身份验证。这有助于简化后续步骤。

  1. 将以下行添加到 DATA_DIR/pg_hba.conf 文件中:

    local       all      postgres       trust
    

    DATA_DIR 替换为数据目录的文件系统路径,例如 /home/$USER/alloydb-data

  2. 重启 AlloyDB Omni:

    Docker

    docker restart CONTAINER_NAME

    CONTAINER_NAME 替换为您在安装 AlloyDB Omni 容器时为其分配的名称,例如 my-omni

    Podman

    podman restart CONTAINER_NAME

    CONTAINER_NAME 替换为您在安装 AlloyDB Omni 容器时为其分配的名称,例如 my-omni

创建和配置备份仓库

本部分中创建的配置文件是一个示例,为本地存储的持续备份提供了最少量的设置。您可以根据需要以任何方式修改此文件。如需了解详情,请参阅配置集群节

  1. 在 AlloyDB Omni 数据目录中创建 backups 子目录:

    mkdir DATA_DIR/backups
  2. 在数据目录中创建名为 pgbackrest.conf 的文件,并将以下内容复制到其中:

    [global]
    
    # Paths (all mandatory):
    repo1-path=/var/lib/postgresql/data/backups
    spool-path=/var/lib/postgresql/data
    lock-path=/var/lib/postgresql/data
    
    # Retention details:
    repo1-retention-full=3
    repo1-retention-full-type=count
    repo1-retention-diff=16
    
    # Force a checkpoint to start backup immediately:
    start-fast=y
    
    # Logging parameters:
    log-path=/var/lib/postgresql/data/backups
    log-level-console=info
    log-level-file=info
    
    # Recommended ZSTD compression:
    compress-type=zst
    
    # Other performance parameters:
    archive-async=y
    archive-push-queue-max=1024MB
    archive-get-queue-max=256MB
    archive-missing-retry=y
    
    [global:archive-push]
    process-max=2
    
    [global:archive-get]
    process-max=2
    
    [omni]
    pg1-user=postgres
    pg1-socket-path=/var/lib/postgresql/data
    pg1-path=/var/lib/postgresql/data/data
    
  3. 使用 pgbackrest stanza-create 命令初始化备份位置:

    Docker

    docker exec CONTAINER_NAME pgbackrest --config-path=/var/lib/postgresql/data/backups --stanza=omni stanza-create

    CONTAINER_NAME 替换为您在安装 AlloyDB Omni 容器时为其分配的名称,例如 my-omni

    Podman

    podman exec CONTAINER_NAME pgbackrest --config-path=/var/lib/postgresql/data/backups --stanza=omni stanza-create

    CONTAINER_NAME 替换为您在安装 AlloyDB Omni 容器时为其分配的名称,例如 my-omni

为持续备份配置数据库

Docker

  1. 如需启用持续备份,请运行以下命令以设置多个 PostgreSQL 参数:

     docker exec CONTAINER_NAME psql -h localhost -U postgres \
     -c "ALTER SYSTEM SET archive_command='pgbackrest --config-path=/var/lib/postgresql/data/backups --stanza=omni archive-push %p';" \
     -c "ALTER SYSTEM SET archive_mode=on;" \
     -c "ALTER SYSTEM SET max_wal_senders=10;" \
     -c "ALTER SYSTEM SET wal_level=replica;"
  2. 重启 AlloyDB Omni:

     docker restart CONTAINER_NAME

Podman

  1. 如需启用持续备份,请运行以下命令以设置多个 PostgreSQL 参数:

     podman exec CONTAINER_NAME psql -h localhost -U postgres \
     -c "ALTER SYSTEM SET archive_command='pgbackrest --config-path=/var/lib/postgresql/data/backups --stanza=omni archive-push %p';" \
     -c "ALTER SYSTEM SET archive_mode=on;" \
     -c "ALTER SYSTEM SET max_wal_senders=10;" \
     -c "ALTER SYSTEM SET wal_level=replica;"
  2. 重启 AlloyDB Omni:

     podman restart CONTAINER_NAME

运行 pgBackRest 命令

完成上一部分中的步骤可将 pgBackRest 配置为与 AlloyDB Omni 服务器配合使用。如需检查备份状态、创建手动备份和执行其他任务,请参阅命令参考文档

Docker

最佳实践是使用 docker exec 命令直接从安装 AlloyDB Omni 容器的宿主机运行 pgBackRest 命令。例如,如需创建手动备份,请使用 pgbackrest backup 命令。进行修改,使其在 docker exec 命令中运行,并引用您之前创建的配置文件:

   docker exec CONTAINER_NAME pgbackrest --config-path=/var/lib/postgresql/data/backups --stanza=omni --type=full backup

Podman

最佳实践是使用 podman exec 命令直接从安装 AlloyDB Omni 容器的宿主机运行 pgBackRest 命令。例如,如需创建手动备份,请使用 pgbackrest backup 命令。进行修改,使其在 podman exec 命令中运行,并引用您之前创建的配置文件:

   podman exec CONTAINER_NAME pgbackrest --config-path=/var/lib/postgresql/data/backups --stanza=omni --type=full backup

您还可以使用环境变量来设置 pgBackRest 配置文件的位置。如需了解详情,请参阅配置路径选项

设置预定备份

如需设置预定备份,请创建 Cron 作业,以按照所需频率运行 pgbackrest backup 命令。如需了解详情,请参阅安排备份

自定义配置和远程备份

基本配置正常运行后,您可以使用 pgBackRest 配置参考中记录的选项调整配置文件,以满足您的需求和偏好。

其中包括指定位于远程机器或云端的其他备份仓库。如果您定义了多个仓库,pgBackRest 的默认备份操作是向所有仓库同时写入。

例如,pgBackRest 支持将 Cloud Storage 存储桶用作备份仓库,并提供多种相关的配置选项。以下部分演示了使用这些选项的一种方法。

使用 Cloud Storage 的示例配置

本部分中的步骤基于具有本地备份的基本配置中介绍的配置文件。对该文件进行的这些修改会在 Cloud Storage 存储桶中定义第二个备用存储库,并通过 Identity and Access Management (IAM) 进行访问。

此示例中的自动身份验证方式要求在 Compute Engine 虚拟机实例上运行 AlloyDB Omni 集群。如果您未在 Compute Engine 虚拟机实例上运行 AlloyDB Omni,则仍可以使用其他身份验证方法(例如保存到本地文件系统的 Google Cloud 服务账号密钥)将数据备份到 Cloud Storage 存储桶。

如需扩展之前的配置文件以定义基于 Cloud Storage 的 pgBackRest 仓库,请按照以下步骤操作:

  1. 配置存储桶权限,以允许附加到虚拟机实例的服务账号向存储桶写入数据。这需要对该服务账号设置 Storage Object User IAM 角色

  2. 将以下行添加到 pgbackrest.conf 文件中:

    # Cloud Storage access details:
    repo2-type=gcs
    repo2-gcs-key-type=auto
    repo2-storage-verify-tls=n
    
    # Cloud Storage bucket and path details:
    repo2-gcs-bucket=BUCKET_NAME
    repo2-path=/pgbackrest
    
    # Cloud Storage backup retention parameters:
    repo2-retention-full=8
    repo2-retention-full-type=count
    

    BUCKET_NAME 替换为您希望 pgBackRest 将备份存储到其中的 Cloud Storage 存储桶的名称。

  3. 使用 pgbackrest stanza-create 命令初始化云端备份位置:

    Docker

     docker exec CONTAINER_NAME pgbackrest --config-path=/var/lib/postgresql/data/backups --stanza=omni stanza-create

    CONTAINER_NAME 替换为您在安装 AlloyDB Omni 容器时为其分配的名称,例如 my-omni

    Podman

     podman exec CONTAINER_NAME pgbackrest --config-path=/var/lib/postgresql/data/backups --stanza=omni stanza-create

    CONTAINER_NAME 替换为您在安装 AlloyDB Omni 容器时为其分配的名称,例如 my-omni

使用 pgbackrest stanza-create 命令初始化 Cloud Storage 存储桶中的备份仓库后,pgBackRest 会将备份存储到以下两个位置:

  • 本地文件系统中的位置,在配置文件中的其他位置定义为 repo1-path

  • Cloud Storage 存储桶,使用此示例设置的 repo2- 配置指令进行定义。

后续步骤