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 项目
- 在 Google Cloud 控制台的项目选择器页面上,选择或创建一个 Google Cloud 项目。
- 确保您的 Cloud 项目已启用结算功能。了解如何检查项目是否已启用结算功能。
启动 Cloud Shell
虽然您可以通过笔记本电脑对 Google Cloud 进行远程操作,但在此 Codelab 中,您将使用 Google Cloud Shell,这是一个在云端运行的命令行环境。

- 打开 Google Cloud 控制台,然后点击右上角工具栏中的 Cloud Shell 图标。您还可以通过以下任一方式打开 Cloud Shell:
- 如果您使用的是 Google Cloud 控制台,请依次按下 G 键和 S 键。
- 点击此链接。
预配并连接到环境通常需要一些时间。此操作完成后,您会看到类似如下内容:
{: width="624"}
3. 创建 Compute Engine 虚拟机
在本部分中,您将使用 gcloud 命令行工具创建一个 Compute Engine (GCE) 虚拟机 (VM)。您使用的是 Rocky Linux 9 映像,该映像与 AlloyDB Omni RPM 完全兼容。
- 为项目 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" - 使用您的 Google Cloud 账号用户登录,并配置默认项目。
gcloud auth login gcloud config set project $PROJECT - 创建防火墙规则,以允许通过 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" - 由于虚拟机是在没有公共 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 - 确保您的 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 - 创建具有 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 - 创建虚拟机后,验证虚拟机的状态。
gcloud compute instances list --filter="name=$INSTANCE_NAME" --project=$PROJECT
4. 设置与 S3 兼容的对象存储
在本部分中,您将连接到虚拟机,准备环境,并设置本地 S3 兼容的对象存储服务器 (minio) 以及 S3 客户端 (mc),以托管备份存储桶。
- 使用 Identity-Aware Proxy (IAP) 通过 SSH 连接到虚拟机。由于虚拟机没有公共 IP 地址,因此
gcloud会自动通过 IAP 建立 SSH 连接隧道。gcloud compute ssh $INSTANCE_NAME --zone=$ZONE --project=$PROJECT --tunnel-through-iap - 安装
policycoreutils-python-utils软件包,以便日后在需要时配置 SELinux 政策。sudo dnf install -y policycoreutils-python-utils - 下载兼容 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/ - 为对象存储服务器创建数据目录。
sudo mkdir -p /var/lib/s3-storage/data - 在后台启动与 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 & - 验证与 S3 兼容的服务器是否正在运行。
ps aux | grep minio - 下载并安装 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/ - 配置 S3 客户端别名 (
s3repo) 并创建一个名为alloydb-backups的存储桶。mc alias set s3repo http://localhost:9000 s3admin s3password mc mb s3repo/alloydb-backups
5. 安装 AlloyDB Omni
在本部分中,您将安装并配置 AlloyDB Omni。
- 在虚拟机上为数据目录、AlloyDB Omni 代码库网址和 PostgreSQL
postgres管理员用户设置安全系数高的密码,并定义相应的环境变量。将该网址替换为您从注册表单中收到的网址。 注意:在此 Codelab 中,我们使用命令行上的环境变量(例如export PGDATA="/var/lib/alloydbomni" export ALLOYDB_OMNI_REPOSITORY_URL="..." export PGPASSWORD="YourStrongPassword123!"PGPASSWORD=$PGPASSWORD)传递密码,以简化操作,但这样做可能会在进程列表中公开密码。在生产环境中,请使用更安全的方法,例如.pgpass文件或 Secret 管理器。 - 创建 AlloyDB Omni 将在其中存储数据库文件的数据目录。
sudo mkdir -p $PGDATA - 通过创建代码库配置文件,在虚拟机上配置 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 - 更新 YUM 缓存。
sudo yum makecache - 安装 AlloyDB Omni RPM 软件包的版本 18。
sudo dnf install -y alloydbomni18 - 初始化 AlloyDB Omni 数据库实例。
sudo PGPASSWORD=$PGPASSWORD PGDATA=$PGDATA /usr/lib/postgresql/18/bin/alloydbomni18-setup initdb - 暂时停用 SELinux 强制模式,以便于按照标准 Codelab 实践进行设置。
sudo setenforce 0 - 准备 AlloyDB Omni 数据库实例。
sudo PGPASSWORD=$PGPASSWORD PGDATA=$PGDATA /usr/lib/postgresql/18/bin/alloydbomni18-setup preparedb - 启用并启动 AlloyDB Omni
systemd服务。sudo systemctl enable alloydbomni18 sudo systemctl start alloydbomni18 - 验证 AlloyDB Omni 服务是否处于活跃状态并成功运行。
sudo systemctl status alloydbomni18
6. 配置 pgBackRest
在此部分中,您将从 AlloyDB Omni Common 代码库安装 pgBackRest,配置 /etc/pgbackrest/pgbackrest.conf 以使用与 S3 兼容的对象存储桶作为备份仓库,并在 AlloyDB Omni 中启用 WAL 归档。
- 在虚拟机上为 AlloyDB Omni Common 代码库网址定义一个环境变量。将该网址替换为您从注册表单中收到的网址。
export ALLOYDB_OMNI_COMMON_REPOSITORY_URL="..." - 配置 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 - 为 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 - 创建
/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 - 以
postgres用户身份初始化 pgBackRest stanza。 确认输出中显示了sudo -u postgres pgbackrest --stanza=omni stanza-createstanza-create command end: completed successfully。 - 使用
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;" - 重启 AlloyDB Omni 服务以应用归档更改。
sudo systemctl restart alloydbomni18 - 验证 pgBackRest 配置完整性和连接性。
确认输出中显示了sudo -u postgres pgbackrest --stanza=omni checkcheck command end: completed successfully。
7. 执行备份
在本部分中,您将使用 pgBackRest 对 AlloyDB Omni 数据库执行完整备份和差异备份,并将备份存储到与 S3 兼容的对象存储空间。
- 使用
pgbackrest触发完整备份。sudo -u postgres pgbackrest \ --stanza=omni \ --type=full backup - 使用
pgbackrest触发差分备份。 注意:其他支持的备份类型包括sudo -u postgres pgbackrest \ --stanza=omni \ --type=diff backupincr(增量)。
8. 列出和验证备份
在本部分中,您将列出备份并验证它们是否已成功完成。
- 使用
pgbackrest info命令列出备份。 确认输出显示sudo -u postgres pgbackrest \ --stanza=omni infostatus: ok以及您执行的每个备份命令的备份信息:- 完整备份:
full backup:(例如,F 20260908-093545F) - 差异备份:
diff backup:(例如,F_ D 20260908-093545F_20260908-094016D)
- 完整备份:
- 使用 S3 客户端 (
mc) 验证存储桶中存储的备份文件。 您应该会在输出中看到mc ls s3repo/alloydb-backups/pgbackrest/backup、archive和stanza.info。
9. 从备份恢复数据
在本部分中,您将停止 AlloyDB Omni 数据库服务,并使用 pgbackrest 从特定备份恢复数据。
注意:恢复操作会停止数据库并覆盖所有数据库数据。
- 为要从中恢复的备份 ID 定义一个环境变量。将该值替换为
pgbackrest info输出中显示的备份 ID。export BACKUPID="20260908-093545F" - 停止 AlloyDB Omni 服务,并验证该服务是否处于非活动状态。
确认输出显示sudo systemctl stop alloydbomni18 sudo systemctl status alloydbomni18Active: inactive。 - 运行带有
--delta选项的pgbackrest restore,以从所选备份中恢复数据库。 确认输出中显示了sudo -u postgres pgbackrest \ --stanza=omni \ --set=$BACKUPID \ --delta restorerestore command end: completed successfully。 - 启动 AlloyDB Omni 服务,并验证该服务是否处于活跃状态且正在运行。
确认输出显示sudo systemctl start alloydbomni18 sudo systemctl status alloydbomni18Active: active (running)。
10. 清理和调查
完成本 Codelab 后,您可以清理 Google Cloud 资源,以免产生不必要的费用。
- 断开与虚拟机的 SSH 会话,返回到本地 Cloud Shell 终端。
exit - 删除 Compute Engine 虚拟机实例。
gcloud compute instances delete $INSTANCE_NAME --zone=$ZONE --project=$PROJECT --quiet - 删除为 SSH 访问创建的防火墙规则。
gcloud compute firewall-rules delete allow-ssh-alloydb-omni --project=$PROJECT --quiet - 删除 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 - 删除自定义路线。
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 概览。