使用 pgBackRest 将 AlloyDB Omni RPM 备份和恢复到与 S3 兼容的存储空间

1. 简介

此 Codelab 演示了如何配置 pgBackRest,以使用与 S3 兼容的对象存储来备份和恢复 AlloyDB Omni RPM 部署。

注意:在此 Codelab 中,您将在虚拟机上部署独立的 MinIO 二进制文件,以充当本地轻量级 S3 兼容存储端点,用于教程和测试。对于生产工作负载,请始终使用受支持且积极维护的 S3 兼容存储解决方案或云对象存储。

前提条件

  • 通过 Cloud 控制台访问 Google Cloud 项目和 Cloud Shell。
  • 已安装并配置 Google Cloud SDK (gcloud)。

学习内容

  • 如何为 AlloyDB Omni RPM 设置 Compute Engine 虚拟机。
  • 如何在虚拟机上设置本地 S3 兼容的对象存储服务器。
  • 如何配置 pgBackRest 以使用与 S3 兼容的对象存储空间作为备份仓库。
  • 如何执行、列出和验证备份。
  • 如何从备份中恢复数据。

所需条件

  • 获取指向 AlloyDB Omni RPM 的网址链接。链接会发送到您的电子邮件地址,其中包含代码库网址服务器。初始化以下环境变量,以便在 Codelab 期间随时使用该网址。
    export ALLOYDB_OMNI_REPOSITORY_URL="..."
    
  • 可正常运行且可访问 Google Cloud 的终端。您可以使用 Cloud Shell 来实现这一目的。

2. 设置和要求

项目设置

创建 Google Cloud 项目

  1. 在 Google Cloud 控制台的项目选择器页面上,选择或创建一个 Google Cloud 项目。
  2. 确保您的 Cloud 项目已启用结算功能。了解如何检查项目是否已启用结算功能。

启动 Cloud Shell

虽然您可以通过笔记本电脑对 Google Cloud 进行远程操作,但在此 Codelab 中,您将使用 Google Cloud Shell,这是一个在云端运行的命令行环境。

用于激活 Cloud Shell 的图标

  1. 打开 Google Cloud 控制台,然后点击右上角工具栏中的 Cloud Shell 图标。您还可以通过以下任一方式打开 Cloud Shell:
    • 如果您使用的是 Google Cloud 控制台,请依次按下 G 键和 S 键。
    • 点击此链接。

预配并连接到环境通常需要一些时间。此操作完成后,您会看到类似如下内容:

Google Cloud Shell 终端显示环境已连接{: width="624"}

3. 创建 Compute Engine 虚拟机

在本部分中,您将使用 gcloud 命令行工具创建一个 Compute Engine (GCE) 虚拟机 (VM)。您使用的是 Rocky Linux 9 映像,该映像与 AlloyDB Omni RPM 完全兼容。

  1. 为项目 ID、虚拟机名称、机器类型、可用区和区域定义环境变量。
    export PROJECT="your-project-id"
    export INSTANCE_NAME="alloydb-omni-pgbackrest"
    export MACHINE_TYPE="e2-standard-4"
    export ZONE="us-central1-c"
    export REGION="us-central1"
    
  2. 使用您的 Google Cloud 账号用户登录,并配置默认项目。
    gcloud auth login
    gcloud config set project $PROJECT
    
  3. 创建防火墙规则,以允许通过 SSH 连接到您的虚拟机。
    gcloud compute firewall-rules create allow-ssh-alloydb-omni \
        --project=$PROJECT \
        --direction=INGRESS \
        --action=allow \
        --rules=tcp:22 \
        --source-ranges="0.0.0.0/0"
    
  4. 由于虚拟机是在没有公共 IP 地址的情况下创建的,因此请配置 Cloud Router 和 Cloud NAT 网关,以便虚拟机访问外部软件包代码库并下载所需软件。
    gcloud compute routers create alloydb-omni-router \
        --project=$PROJECT \
        --network=default \
        --region=$REGION
    
    gcloud compute routers nats create alloydb-omni-nat \
        --project=$PROJECT \
        --router=alloydb-omni-router \
        --region=$REGION \
        --nat-all-subnet-ip-ranges \
        --auto-allocate-nat-external-ips
    
  5. 确保您的 VPC 网络具有有效的默认互联网网关路由。在某些共享环境或实验环境中,清理脚本有时会移除默认路由。Cloud NAT 需要此路由才能将出站流量转发到互联网。
    gcloud compute routes create default-internet-route \
        --project=$PROJECT \
        --network=default \
        --destination-range=0.0.0.0/0 \
        --next-hop-gateway=default-internet-gateway
    
  6. 创建具有 Rocky Linux 9 和 20 GB 平衡永久性磁盘的 Compute Engine 虚拟机实例。为提高安全性,请使用 --no-address 标志,这样就不会为虚拟机分配公共 IP 地址。
    gcloud compute instances create $INSTANCE_NAME \
        --project=$PROJECT \
        --zone=$ZONE \
        --machine-type=$MACHINE_TYPE \
        --image-family=rocky-linux-9 \
        --image-project=rocky-linux-cloud \
        --boot-disk-size=20GB \
        --boot-disk-type=pd-balanced \
        --no-address
    
  7. 创建虚拟机后,验证虚拟机的状态。
    gcloud compute instances list --filter="name=$INSTANCE_NAME" --project=$PROJECT
    

4. 设置与 S3 兼容的对象存储

在本部分中,您将连接到虚拟机,准备环境,并设置本地 S3 兼容的对象存储服务器 (minio) 以及 S3 客户端 (mc),以托管备份存储桶。

  1. 使用 Identity-Aware Proxy (IAP) 通过 SSH 连接到虚拟机。由于虚拟机没有公共 IP 地址,因此 gcloud 会自动通过 IAP 建立 SSH 连接隧道。
    gcloud compute ssh $INSTANCE_NAME --zone=$ZONE --project=$PROJECT --tunnel-through-iap
    
  2. 安装 policycoreutils-python-utils 软件包,以便日后在需要时配置 SELinux 政策。
    sudo dnf install -y policycoreutils-python-utils
    
  3. 下载兼容 S3 的服务器二进制文件 (minio)。
    curl -L -o minio \
        https://github.com/minio/minio/releases/download/RELEASE.2024-05-10T01-41-38Z/minio.linux-amd64.RELEASE.2024-05-10T01-41-38Z
    chmod +x minio
    sudo mv minio /usr/local/bin/
    
  4. 为对象存储服务器创建数据目录。
    sudo mkdir -p /var/lib/s3-storage/data
    
  5. 在后台启动与 S3 兼容的服务器,并使用示例凭据。请注意,密钥长度必须至少为 8 个字符。
    export MINIO_ROOT_USER="s3admin"
    export MINIO_ROOT_PASSWORD="s3password"
    
    nohup sudo env MINIO_ROOT_USER="$MINIO_ROOT_USER" \
        MINIO_ROOT_PASSWORD="$MINIO_ROOT_PASSWORD" \
        /usr/local/bin/minio server /var/lib/s3-storage/data \
        --console-address ":9001" \
        > s3-server.log 2>&1 &
    
  6. 验证与 S3 兼容的服务器是否正在运行。
    ps aux | grep minio
    
  7. 下载并安装 S3 客户端 (mc),以便管理存储桶。
    curl -L -o mc \
        https://github.com/minio/mc/releases/download/RELEASE.2024-05-09T17-04-24Z/mc.linux-amd64.RELEASE.2024-05-09T17-04-24Z
    chmod +x mc
    sudo mv mc /usr/local/bin/
    
  8. 配置 S3 客户端别名 (s3repo) 并创建一个名为 alloydb-backups 的存储桶。
    mc alias set s3repo http://localhost:9000 s3admin s3password
    mc mb s3repo/alloydb-backups
    

5. 安装 AlloyDB Omni

在本部分中,您将安装并配置 AlloyDB Omni。

  1. 在虚拟机上为数据目录、AlloyDB Omni 代码库网址和 PostgreSQL postgres 管理员用户设置安全系数高的密码,并定义相应的环境变量。将该网址替换为您从注册表单中收到的网址。
    export PGDATA="/var/lib/alloydbomni"
    export ALLOYDB_OMNI_REPOSITORY_URL="..."
    export PGPASSWORD="YourStrongPassword123!"
    
    注意:在此 Codelab 中,我们使用命令行上的环境变量(例如 PGPASSWORD=$PGPASSWORD)传递密码,以简化操作,但这样做可能会在进程列表中公开密码。在生产环境中,请使用更安全的方法,例如 .pgpass 文件或 Secret 管理器。
  2. 创建 AlloyDB Omni 将在其中存储数据库文件的数据目录。
    sudo mkdir -p $PGDATA
    
  3. 通过创建代码库配置文件,在虚拟机上配置 YUM 代码库。
    sudo tee /etc/yum.repos.d/alloydbomni.repo << EOF
    [alloydbomni]
    name=alloydbomni
    baseurl=$ALLOYDB_OMNI_REPOSITORY_URL
    enabled=1
    repo_gpgcheck=0
    gpgcheck=1
    gpgkey=https://dl.google.com/linux/linux_signing_key.pub
    EOF
    
  4. 更新 YUM 缓存。
    sudo yum makecache
    
  5. 安装 AlloyDB Omni RPM 软件包的版本 18。
    sudo dnf install -y alloydbomni18
    
  6. 初始化 AlloyDB Omni 数据库实例。
    sudo PGPASSWORD=$PGPASSWORD PGDATA=$PGDATA /usr/lib/postgresql/18/bin/alloydbomni18-setup initdb
    
  7. 暂时停用 SELinux 强制模式,以便于按照标准 Codelab 实践进行设置。
    sudo setenforce 0
    
  8. 准备 AlloyDB Omni 数据库实例。
    sudo PGPASSWORD=$PGPASSWORD PGDATA=$PGDATA /usr/lib/postgresql/18/bin/alloydbomni18-setup preparedb
    
  9. 启用并启动 AlloyDB Omni systemd 服务。
    sudo systemctl enable alloydbomni18
    sudo systemctl start alloydbomni18
    
  10. 验证 AlloyDB Omni 服务是否处于活跃状态并成功运行。
    sudo systemctl status alloydbomni18
    

6. 配置 pgBackRest

在此部分中,您将从 AlloyDB Omni Common 代码库安装 pgBackRest,配置 /etc/pgbackrest/pgbackrest.conf 以使用与 S3 兼容的对象存储桶作为备份仓库,并在 AlloyDB Omni 中启用 WAL 归档。

  1. 在虚拟机上为 AlloyDB Omni Common 代码库网址定义一个环境变量。将该网址替换为您从注册表单中收到的网址。
    export ALLOYDB_OMNI_COMMON_REPOSITORY_URL="..."
    
  2. 配置 pgBackRest YUM 存储区并安装 pgbackrest-2.58.0。
    sudo tee /etc/yum.repos.d/pgbackrest.repo <<EOF
    [pgbackrest]
    name=Google Alloydb Omni Orchestrator
    baseurl=$ALLOYDB_OMNI_COMMON_REPOSITORY_URL
    enabled=1
    repo_gpgcheck=0
    gpgcheck=0
    gpgkey=https://dl.google.com/linux/linux_signing_key.pub
    EOF
    
    sudo dnf install -y pgbackrest-2.58.0
    
  3. 为 pgBackRest 创建后台处理目录和日志目录,并将所有权分配给 postgres 用户。
    sudo mkdir -p /var/log/pgbackrest
    sudo mkdir -p /var/lib/pgbackrest
    
    sudo chown -R postgres:postgres /var/log/pgbackrest
    sudo chown -R postgres:postgres /var/lib/pgbackrest
    
  4. 创建 /etc/pgbackrest/pgbackrest.conf 并配置严格的文件权限。
    sudo mkdir -p /etc/pgbackrest/conf.d
    
    sudo tee /etc/pgbackrest/pgbackrest.conf <<EOF
    [global]
    spool-path=/var/lib/pgbackrest
    lock-path=/var/lib/pgbackrest
    
    # S3 Repository details
    repo1-type=s3
    repo1-s3-endpoint=http://localhost:9000
    repo1-s3-bucket=alloydb-backups
    repo1-s3-key=s3admin
    repo1-s3-key-secret=s3password
    repo1-s3-region=us-east-1
    repo1-s3-uri-style=path
    repo1-path=/pgbackrest
    
    # Retention policy
    repo1-retention-full=3
    repo1-retention-full-type=count
    repo1-retention-diff=16
    
    # Force immediate checkpoint during backup start
    start-fast=y
    
    # Logging
    log-path=/var/log/pgbackrest
    log-level-console=info
    log-level-file=info
    
    # Compression
    compress-type=zst
    
    # Asynchronous WAL archiving
    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=/tmp
    pg1-path=$PGDATA
    EOF
    
    sudo chown postgres:postgres /etc/pgbackrest/pgbackrest.conf
    sudo chmod 640 /etc/pgbackrest/pgbackrest.conf
    
  5. 以 postgres 用户身份初始化 pgBackRest stanza。
    sudo -u postgres pgbackrest --stanza=omni stanza-create
    
    确认输出中显示了 stanza-create command end: completed successfully。
  6. 使用 psql 配置 AlloyDB Omni 归档参数。
    sudo -u postgres /usr/lib/postgresql/18/bin/psql \
        -c "ALTER SYSTEM SET archive_mode = 'on';" \
        -c "ALTER SYSTEM SET archive_command = 'pgbackrest --stanza=omni archive-push %p';" \
        -c "ALTER SYSTEM SET wal_level = 'replica';" \
        -c "ALTER SYSTEM SET max_wal_senders = 10;"
    
  7. 重启 AlloyDB Omni 服务以应用归档更改。
    sudo systemctl restart alloydbomni18
    
  8. 验证 pgBackRest 配置完整性和连接性。
    sudo -u postgres pgbackrest --stanza=omni check
    
    确认输出中显示了 check command end: completed successfully。

7. 执行备份

在本部分中,您将使用 pgBackRest 对 AlloyDB Omni 数据库执行完整备份和差异备份,并将备份存储到与 S3 兼容的对象存储空间。

  1. 使用 pgbackrest 触发完整备份。
    sudo -u postgres pgbackrest \
        --stanza=omni \
        --type=full backup
    
  2. 使用 pgbackrest 触发差分备份。
    sudo -u postgres pgbackrest \
        --stanza=omni \
        --type=diff backup
    
    注意:其他支持的备份类型包括 incr(增量)。

8. 列出和验证备份

在本部分中,您将列出备份并验证它们是否已成功完成。

  1. 使用 pgbackrest info 命令列出备份。
    sudo -u postgres pgbackrest \
        --stanza=omni info
    
    确认输出显示 status: ok 以及您执行的每个备份命令的备份信息:
    • 完整备份: full backup: F(例如,20260908-093545F)
    • 差异备份: diff backup: F_D(例如,20260908-093545F_20260908-094016D)
  2. 使用 S3 客户端 (mc) 验证存储桶中存储的备份文件。
    mc ls s3repo/alloydb-backups/pgbackrest/
    
    您应该会在输出中看到 backup、archive 和 stanza.info。

9. 从备份恢复数据

在本部分中,您将停止 AlloyDB Omni 数据库服务,并使用 pgbackrest 从特定备份恢复数据。

注意:恢复操作会停止数据库并覆盖所有数据库数据。

  1. 为要从中恢复的备份 ID 定义一个环境变量。将该值替换为 pgbackrest info 输出中显示的备份 ID。
    export BACKUPID="20260908-093545F"
    
  2. 停止 AlloyDB Omni 服务,并验证该服务是否处于非活动状态。
    sudo systemctl stop alloydbomni18
    sudo systemctl status alloydbomni18
    
    确认输出显示 Active: inactive。
  3. 运行带有 --delta 选项的 pgbackrest restore,以从所选备份中恢复数据库。
    sudo -u postgres pgbackrest \
        --stanza=omni \
        --set=$BACKUPID \
        --delta restore
    
    确认输出中显示了 restore command end: completed successfully。
  4. 启动 AlloyDB Omni 服务,并验证该服务是否处于活跃状态且正在运行。
    sudo systemctl start alloydbomni18
    sudo systemctl status alloydbomni18
    
    确认输出显示 Active: active (running)。

10. 清理和调查

完成本 Codelab 后,您可以清理 Google Cloud 资源,以免产生不必要的费用。

  1. 断开与虚拟机的 SSH 会话,返回到本地 Cloud Shell 终端。
    exit
    
  2. 删除 Compute Engine 虚拟机实例。
    gcloud compute instances delete $INSTANCE_NAME --zone=$ZONE --project=$PROJECT --quiet
    
  3. 删除为 SSH 访问创建的防火墙规则。
    gcloud compute firewall-rules delete allow-ssh-alloydb-omni --project=$PROJECT --quiet
    
  4. 删除 Cloud NAT 网关和 Cloud Router 路由器。
    gcloud compute routers nats delete alloydb-omni-nat --router=alloydb-omni-router --region=$REGION --project=$PROJECT --quiet
    gcloud compute routers delete alloydb-omni-router --region=$REGION --project=$PROJECT --quiet
    
  5. 删除自定义路线。
    gcloud compute routes delete default-internet-route --project=$PROJECT --quiet
    

11. 恭喜

恭喜您完成此 Codelab!您已成功配置 pgBackRest,以使用与 S3 兼容的对象存储来备份和恢复 AlloyDB Omni RPM 部署。

所学内容

  • 如何为 AlloyDB Omni RPM 设置 Compute Engine 虚拟机。
  • 如何设置与 S3 兼容的对象存储桶。
  • 如何使用兼容 S3 的仓库配置 pgBackRest。
  • 如何执行、列出和验证完整备份和差分备份。
  • 如何使用 pgBackRest 从备份中恢复数据。

如需了解详情,请参阅 AlloyDB Omni 概览。

12. 调查问卷

您打算如何使用本教程?

仅通读 阅读并完成练习