本页介绍了如何配置 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 使用术语“stanza”来指代 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) 进行访问。
此示例中的自动身份验证方式要求 AlloyDB Omni 集群在 Compute Engine 虚拟机实例上运行。如果您未在 Compute Engine 虚拟机实例上运行 AlloyDB Omni,则仍然可以使用其他身份验证方法(例如保存到本地文件系统的服务账号密钥)备份到 Cloud Storage 存储分区。 Google Cloud
如需扩展之前的配置文件以定义基于 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
。