本页面介绍了如何通过将 AlloyDB Omni 配置为与开源数据库备份服务器 pgBackRest 配合使用,来保护数据。
如需了解基于 Kubernetes 的信息,请参阅在 Kubernetes 中备份和恢复。
如需详细了解 pgBackRest,请参阅用户指南。
准备工作
在将 AlloyDB Omni 配置为与 pgBackRest 配合使用之前,完成以下前提条件:
- 在您控制的服务器上安装并运行 AlloyDB Omni。
- 为 AlloyDB Omni 实例设置永久性数据存储空间。
具有本地备份的基本配置
本部分中的步骤将引导您完成 pgBackRest 的基本设置。基本配置不支持按时间表备份。如需了解详情,请参阅设置预定备份。
由于 pgBackRest 是一款与 AlloyDB Omni 兼容的灵活第三方产品,因此您可以根据自己的需求和偏好适当修改其中的任何步骤。
将备份卷装载到容器
为方便进行组织,我们强烈建议您为 pgBackRest 备份创建并装载单独的卷。如需设置新卷,请完成以下步骤:
如果您的容器正在运行,请将其停止并移除。
Docker
docker stop CONTAINER_NAME
docker rm CONTAINER_NAME
Docker
docker stop CONTAINER_NAME
docker rm CONTAINER_NAME
Podman
podman stop CONTAINER_NAME
podman rm CONTAINER_NAME
Podman
podman stop CONTAINER_NAME
podman rm CONTAINER_NAME
执行以下变量替换操作:
CONTAINER_NAME
:您为容器使用的名称。
在容器的文件系统中创建一个备份目录。
Docker
mkdir -p BACKUP_DIR
Docker
mkdir -p BACKUP_DIR
Podman
mkdir -p BACKUP_DIR
Podman
mkdir -p BACKUP_DIR
执行以下变量替换操作:
BACKUP_DIR
:将存储备份的主机目录。
使用新的备份卷重新创建容器。
Docker
docker run -d --name CONTAINER_NAME \ -e POSTGRES_PASSWORD=NEW_PASSWORD \ -v DATA_DIR:/var/lib/postgresql/data \ -v BACKUP_DIR:/var/lib/postgresql/backups \ -p HOST_PORT:5432 \ --restart=always \ google/alloydbomni:latest
Docker
docker run -d --name CONTAINER_NAME \ -e POSTGRES_PASSWORD=NEW_PASSWORD \ -v DATA_DIR:/var/lib/postgresql/data \ -v BACKUP_DIR:/var/lib/postgresql/backups \ -p HOST_PORT:5432 \ --restart=always \ google/alloydbomni:latest
Podman
podman run -d --name CONTAINER_NAME \ -e POSTGRES_PASSWORD=NEW_PASSWORD \ -v DATA_DIR:/var/lib/postgresql/data \ -v BACKUP_DIR:/var/lib/postgresql/backups \ -p HOST_PORT:5432 \ --restart=always \ docker.io/google/alloydbomni:latest
Podman
podman run -d --name CONTAINER_NAME \ -e POSTGRES_PASSWORD=NEW_PASSWORD \ -v DATA_DIR:/var/lib/postgresql/data \ -v BACKUP_DIR:/var/lib/postgresql/backups \ -p HOST_PORT:5432 \ --restart=always \ docker.io/google/alloydbomni:latest
执行以下变量替换操作:
CONTAINER_NAME
:您为容器使用的名称。NEW_PASSWORD
:在创建后向新容器的postgres
用户分配的密码。请注意,仅当DATA_DIR
是新位置时,NEW_PASSWORD
才会设置新密码。DATA_DIR
:存储数据的主机目录路径。DATA_DIR
:存储数据的主机目录路径。BACKUP_DIR
:将存储备份的主机目录。HOST_PORT
:宿主机上的 TCP 端口,容器应将自己的端口5432
发布到该端口。如需也在宿主机上使用 PostgreSQL 默认端口,请指定5432
。
使容器中的备份目录可供
postgres
读取。Docker
docker exec CONTAINER_NAME chown -R postgres:postgres /var/lib/postgresql/backups
Docker
docker exec CONTAINER_NAME chown -R postgres:postgres /var/lib/postgresql/backups
Podman
podman exec CONTAINER_NAME chown -R postgres:postgres /var/lib/postgresql/backups
Podman
podman exec CONTAINER_NAME chown -R postgres:postgres /var/lib/postgresql/backups
执行以下变量替换操作:
CONTAINER_NAME
:您为容器使用的名称。
配置本地备份
pgBackRest 会为创建的每个备份创建子目录,并包含一个纯文本清单文件。
pgBackRest 使用术语“节”来指代 PostgreSQL 数据库集群的配置。节名称是任意的,无需与主机服务器、PostgreSQL 集群或数据库名称匹配。pgBackRest 文档建议按照集群的功能命名节。
仓库是写入备份的位置。pgBackRest 支持在给定节中写入到多个仓库。与仓库相关的大多数配置参数都使用数字值编入索引。例如 repo1-
。与 PostgreSQL 集群相关的参数也会单独编入索引。例如 pg1-
。
pgBackRest 利用名为 pgbackrest.conf
的配置文件来存储全局参数和特定于节的参数。
如需构建和初始化用于备份 AlloyDB Omni 集群的配置文件,请在您在将备份卷装载到容器中创建的主机端备份目录中创建 pgbackrest.conf
文件。
[global]
# Paths (all mandatory):
repo1-path=/var/lib/postgresql/backups
spool-path=/var/lib/postgresql/backups/spool
lock-path=/var/lib/postgresql/backups
# 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/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=/tmp
pg1-path=/var/lib/postgresql/data
某些参数是必需的,但其他参数可根据需要进行调整以满足您的特定要求,例如以下这些:
repo1-path
:写入备份的目录位置。我们建议选择一个对主机服务器和容器都可见的位置。log-path
:写入日志文件的目录位置。如果您想将日志文件写入到单独的位置,而不是与备份本身混合在一起,请调整此参数。repo1-retention-full
:要保留的完整备份数量。repo1-retention-full-type
:保留是按数量还是按时间段(天)来衡量。repo1-retention-diff
:要保留的差分备份数量。
配置文件中与 AlloyDB Omni 兼容的其他非关键但建议使用的参数设置包括:
log-level-console
:运行 pgBackup 命令时输出到屏幕 (STDOUT) 的日志记录级别。您可以在配置文件中调整此值以满足您的需求,也可以使用--log-level-console
命令行参数替换此值。默认值为warn
。start-fast
:强制检查点快速启动备份。默认值为n
。archive-async
:异步推送 WAL 分段文件,以提高性能。默认值为n
。process-max
:要用于压缩和传输的进程数上限。此值通常在主集群上设置为max_cpu/4
,在备用集群上设置为max_cpu/2
。默认值为1
。compress-type
:要使用的压缩算法。默认值为gz
。
还有许多其他 pgBackRest 配置参数,可以对它们进行调整。本文档仅涵盖默认 AlloyDB Omni 配置所必需的参数以及一些建议的参数设置。如需配置参数的完整列表,请参阅 pgBackRest 配置参考在线文档。
配置 pgBackRest 后,必须通过创建节(使用配置文件中设置的参数)来初始化写入备份的目标仓库。
如需对备份配置数据库,请完成以下步骤:
使用
stanza-create
命令创建节。Docker
docker exec -u postgres CONTAINER_NAME pgbackrest \ --config-path=/var/lib/postgresql/backups \ --stanza=omni stanza-create
Docker
docker exec -u postgres CONTAINER_NAME pgbackrest \ --config-path=/var/lib/postgresql/backups \ --stanza=omni stanza-create
Podman
podman exec -u postgres CONTAINER_NAME pgbackrest \ --config-path=/var/lib/postgresql/backups \ --stanza=omni stanza-create
Podman
podman exec -u postgres CONTAINER_NAME pgbackrest \ --config-path=/var/lib/postgresql/backups \ --stanza=omni stanza-create
执行以下变量替换操作:
CONTAINER_NAME
:您为容器使用的名称。
对备份配置数据库。
Docker
docker exec -u postgres CONTAINER_NAME psql \ -c "ALTER SYSTEM SET archive_command='pgbackrest --config-path=/var/lib/postgresql/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;"
Docker
docker exec -u postgres CONTAINER_NAME psql \ -c "ALTER SYSTEM SET archive_command='pgbackrest --config-path=/var/lib/postgresql/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;"
Podman
podman exec -u postgres CONTAINER_NAME psql \ -c "ALTER SYSTEM SET archive_command='pgbackrest --config-path=/var/lib/postgresql/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;"
Podman
podman exec -u postgres CONTAINER_NAME psql \ -c "ALTER SYSTEM SET archive_command='pgbackrest --config-path=/var/lib/postgresql/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;"
执行以下变量替换操作:
CONTAINER_NAME
:您为容器使用的名称。
重启容器。
Docker
docker restart CONTAINER_NAME
Docker
docker restart CONTAINER_NAME
Podman
podman restart CONTAINER_NAME
Podman
podman restart CONTAINER_NAME
执行以下变量替换操作:
CONTAINER_NAME
:您为容器使用的名称。
验证备份配置。
Docker
docker exec -u postgres CONTAINER_NAME psql \ -c "SELECT name, setting FROM pg_catalog.pg_settings WHERE name IN ('archive_command', 'archive_mode', 'max_wal_senders', 'wal_level') ORDER BY name"
Docker
docker exec -u postgres CONTAINER_NAME psql \ -c "SELECT name, setting FROM pg_catalog.pg_settings WHERE name IN ('archive_command', 'archive_mode', 'max_wal_senders', 'wal_level') ORDER BY name"
Podman
podman exec -u postgres CONTAINER_NAME psql \ -c "SELECT name, setting FROM pg_catalog.pg_settings WHERE name IN ('archive_command', 'archive_mode', 'max_wal_senders', 'wal_level') ORDER BY name"
Podman
podman exec -u postgres CONTAINER_NAME psql \ -c "SELECT name, setting FROM pg_catalog.pg_settings WHERE name IN ('archive_command', 'archive_mode', 'max_wal_senders', 'wal_level') ORDER BY name"
执行以下变量替换操作:
CONTAINER_NAME
:您为容器使用的名称。
执行 pgBackRest 检查。
Docker
docker exec -u postgres CONTAINER_NAME pgbackrest \ --config-path=/var/lib/postgresql/backups \ --stanza=omni \ check
Docker
docker exec -u postgres CONTAINER_NAME pgbackrest \ --config-path=/var/lib/postgresql/backups \ --stanza=omni \ check
Podman
podman exec -u postgres CONTAINER_NAME pgbackrest \ --config-path=/var/lib/postgresql/backups \ --stanza=omni \ check
Podman
podman exec -u postgres CONTAINER_NAME pgbackrest \ --config-path=/var/lib/postgresql/backups \ --stanza=omni \ check
执行以下变量替换操作:
CONTAINER_NAME
:您为容器使用的名称。
执行备份
执行完整备份。
Docker
docker exec -u postgres CONTAINER_NAME pgbackrest \ --config-path=/var/lib/postgresql/backups \ --stanza=omni \ --type=full \ backup
Docker
docker exec -u postgres CONTAINER_NAME pgbackrest \ --config-path=/var/lib/postgresql/backups \ --stanza=omni \ --type=full \ backup
Podman
podman exec -u postgres CONTAINER_NAME pgbackrest \ --config-path=/var/lib/postgresql/backups \ --stanza=omni \ --type=full \ backup
Podman
podman exec -u postgres CONTAINER_NAME pgbackrest \ --config-path=/var/lib/postgresql/backups \ --stanza=omni \ --type=full \ backup
执行以下变量替换操作:
CONTAINER_NAME
:您为容器使用的名称。
执行差分备份。
Docker
docker exec -u postgres CONTAINER_NAME pgbackrest \ --config-path=/var/lib/postgresql/backups \ --stanza=omni \ --type=diff \ backup
Docker
docker exec -u postgres CONTAINER_NAME pgbackrest \ --config-path=/var/lib/postgresql/backups \ --stanza=omni \ --type=diff \ backup
Podman
podman exec -u postgres CONTAINER_NAME pgbackrest \ --config-path=/var/lib/postgresql/backups \ --stanza=omni \ --type=diff \ backup
Podman
podman exec -u postgres CONTAINER_NAME pgbackrest \ --config-path=/var/lib/postgresql/backups \ --stanza=omni \ --type=diff \ backup
执行以下变量替换操作:
CONTAINER_NAME
:您为容器使用的名称。
报告备份。
Docker
docker exec -u postgres CONTAINER_NAME pgbackrest \ --config-path=/var/lib/postgresql/backups \ --stanza=omni \ info
Docker
docker exec -u postgres CONTAINER_NAME pgbackrest \ --config-path=/var/lib/postgresql/backups \ --stanza=omni \ info
Podman
podman exec -u postgres CONTAINER_NAME pgbackrest \ --config-path=/var/lib/postgresql/backups \ --stanza=omni \ info
Podman
podman exec -u postgres CONTAINER_NAME pgbackrest \ --config-path=/var/lib/postgresql/backups \ --stanza=omni \ info
执行以下变量替换操作:
CONTAINER_NAME
:您为容器使用的名称。
设置预定备份
如需设置预定备份,请创建 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 仓库,请按照以下步骤操作:
配置存储桶权限,以允许附加到虚拟机实例的服务账号向存储桶写入。这需要对该服务账号设置 Storage Object User IAM 角色。
将以下行添加到
pgbackrest.conf
文件的[global]
部分:# 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=PATH_IN_BUCKET # Cloud Storage backup retention parameters: repo2-retention-full=8 repo2-retention-full-type=count
执行以下变量替换操作:
BUCKET_NAME
:您希望 pgBackRest 将备份存储到其中的 Cloud Storage 存储桶的名称。PATH_IN_BUCKET
:您希望 pgBackRest 用于存储备份的 Cloud Storage 存储桶中的目录路径。
使用
pgbackrest stanza-create
命令初始化云端备份位置:Docker
docker exec -u postgres CONTAINER_NAME pgbackrest \ --config-path=/var/lib/postgresql/backups \ --stanza=omni \ stanza-create
Docker
docker exec -u postgres CONTAINER_NAME pgbackrest \ --config-path=/var/lib/postgresql/backups \ --stanza=omni \ stanza-create
Podman
podman exec -u postgres CONTAINER_NAME pgbackrest \ --config-path=/var/lib/postgresql/backups \ --stanza=omni \ stanza-create
Podman
podman exec -u postgres CONTAINER_NAME pgbackrest \ --config-path=/var/lib/postgresql/backups \ --stanza=omni \ stanza-create
执行以下变量替换操作:
CONTAINER_NAME
:您为容器使用的名称。
使用 pgbackrest stanza-create
命令初始化 Cloud Storage 存储桶中的备份仓库后,pgBackRest 可以备份到以下两个位置:
本地文件系统中的位置,在配置文件中的其他位置定义为
repo1-path
。如果未在pgbackrest
命令中指定--repo
,则这是默认位置。Cloud Storage 存储桶,使用此示例设置的
repo2-gcs-bucket
配置指令进行定义。如需使用 Cloud Storage 存储桶,请在pgbackrest
命令中指定--repo=2
。