为 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 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 exec CONTAINER_NAME pgbackrest --config-path=/var/lib/postgresql/data/backups --stanza=omni stanza-create

配置数据库以进行持续备份

  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

运行 pgBackRest 命令

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

最佳实践是使用 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

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

设置定期备份

如需设置定期备份,请创建一个 Cron 作业,以根据需要运行 pgbackrest backup 命令。如需了解详情,请参阅安排备份

自定义配置和远程备份

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

这包括指定位于远程计算机或云端的其他备份代码库。如果您定义了多个代码库,则 pgBackRest 会将其作为默认备份操作同时写入到所有这些代码库。

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

使用 Cloud Storage 的示例配置

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

此示例中的自动身份验证方式要求 AlloyDB Omni 集群在 Compute Engine 虚拟机实例上运行。如果您未在 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 exec CONTAINER_NAME pgbackrest --config-path=/var/lib/postgresql/data/backups --stanza=omni stanza-create

使用 pgbackrest stanza-create 命令在 Cloud Storage 存储桶中初始化备份代码库后,pgBackRest 会将备份数据复制到以下两个位置:

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

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

后续步骤