En esta página, se muestra cómo proteger tus datos configurando AlloyDB Omni para que funcione con pgBackRest, un servidor de copia de seguridad de base de datos de código abierto.
Para obtener información basada en Kubernetes, consulta Cómo crear copias de seguridad y restablecer en Kubernetes.
Para obtener más información sobre pgBackRest, consulta su guía del usuario.
Antes de comenzar
Antes de configurar AlloyDB Omni para que funcione con pgBackRest, completa los siguientes requisitos previos:
- Instala y ejecuta AlloyDB Omni en un servidor que controles.
- Configura el almacenamiento de datos persistente para tu instancia de AlloyDB Omni.
Configuración básica con copias de seguridad locales
Los pasos de esta sección te guiarán por una configuración básica de pgBackRest. Las configuraciones básicas no habilitan las copias de seguridad de forma programada. Para obtener más información, consulta Configura copias de seguridad programadas.
Como pgBackRest es un producto de terceros flexible compatible con AlloyDB Omni, puedes modificar cualquiera de estos pasos según sea apropiado para tus propias necesidades y preferencias.
Activa un volumen de copia de seguridad en tu contenedor
Para fines de organización, te recomendamos que crees y actives un volumen independiente para las copias de seguridad de pgBackRest. Para configurar un volumen nuevo, completa los siguientes pasos:
Si el contenedor está en ejecución, deténgalo y quítelo.
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
Reemplaza la siguiente variable:
CONTAINER_NAME
: Es el nombre que usaste para tu contenedor.
Crea un directorio de copia de seguridad en el sistema de archivos de tu contenedor.
Docker
mkdir -p BACKUP_DIR
Docker
mkdir -p BACKUP_DIR
Podman
mkdir -p BACKUP_DIR
Podman
mkdir -p BACKUP_DIR
Reemplaza la siguiente variable:
BACKUP_DIR
: Es el directorio del host en el que se almacenarán las copias de seguridad.
Vuelve a crear el contenedor con el nuevo volumen de copias de seguridad.
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
Reemplaza las siguientes variables:
CONTAINER_NAME
: Es el nombre que usaste para tu contenedor.NEW_PASSWORD
: Contraseña asignada al usuariopostgres
del contenedor nuevo después de su creación. Ten en cuenta queNEW_PASSWORD
solo establecerá una contraseña nueva cuandoDATA_DIR
sea una ubicación nueva.DATA_DIR
: Es la ruta de acceso al directorio del host en la que se almacenan tus datos.DATA_DIR
: Es la ruta de acceso al directorio del host en la que se almacenan tus datos.BACKUP_DIR
: Es el directorio del host en el que se almacenarán las copias de seguridad.HOST_PORT
: Es el puerto TCP en la máquina anfitrión al que el contenedor debe publicar su propio puerto5432
. Para usar el puerto predeterminado de PostgreSQL en la máquina anfitrión, especifica5432
.
Haz que
postgres
pueda leer el directorio de copias de seguridad en tu contenedor.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
Reemplaza la siguiente variable:
CONTAINER_NAME
: Es el nombre que usaste para tu contenedor.
Configura copias de seguridad locales
pgBackRest crea subdirectorios para cada copia de seguridad que se toma y, además, incluye un archivo de manifiesto de texto sin formato.
pgBackRest usa el término estrofa para referirse a la configuración de un clúster de bases de datos de PostgreSQL. El nombre de la estrofa es arbitrario y no es necesario que coincida con el nombre del servidor host, el clúster de PostgreSQL ni la base de datos. La documentación de pgBackRest sugiere nombrar la estrofa según la función del clúster.
El repositorio es donde se escriben las copias de seguridad. pgBackRest admite la escritura en más de un repositorio en una estrofa determinada. La mayoría de los parámetros de configuración relacionados con los repositorios se indexan con un valor numérico. Por ejemplo, repo1-
. Los parámetros relacionados con los clústeres de PostgreSQL también se indexan de forma independiente. Por ejemplo, pg1-
pgBackRest aprovecha un archivo de configuración, llamado pgbackrest.conf
, para contener parámetros globales y específicos de la estrofa.
Para compilar e inicializar un archivo de configuración para crear una copia de seguridad de tu
clúster de AlloyDB Omni, crea el archivo pgbackrest.conf
en el
directorio de copias de seguridad del host que creaste en
Cómo activar un volumen de copia de seguridad en tu contenedor.
[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
Algunos parámetros son obligatorios, pero otros se pueden ajustar para cumplir con tus requisitos específicos si es necesario, como los siguientes:
repo1-path
: Es la ubicación del directorio en la que se escriben las copias de seguridad. Te recomendamos una ubicación visible para el servidor host y el contenedor.log-path
: Es la ubicación del directorio en la que se escriben los archivos de registro. Si quieres escribir los archivos de registro en una ubicación separada, no mezclados con las copias de seguridad, ajusta este parámetro.repo1-retention-full
: Es la cantidad de copias de seguridad completas que se retendrán.repo1-retention-full-type
: Indica si la retención se mide por recuento o período (días).repo1-retention-diff
: Es la cantidad de copias de seguridad diferenciales que se retendrán.
Otros parámetros de configuración no esenciales, pero recomendados, que son compatibles con AlloyDB Omni en el archivo de configuración incluyen los siguientes:
log-level-console
: Es el nivel de registro que se escribe en la pantalla (STDOUT) cuando se ejecutan los comandos de pgBackup. Puedes ajustarlo para satisfacer tus necesidades en el archivo de configuración o anular este valor con el argumento de línea de comandos--log-level-console
. El valor predeterminado eswarn
.start-fast
: Fuerza un punto de control para iniciar las copias de seguridad rápidamente. El valor predeterminado esn
.archive-async
: envía los archivos de segmentos WAL de forma asíncrona para mejorar el rendimiento. El valor predeterminado esn
.process-max
: Es la cantidad máxima de procesos que se usarán para la compresión y la transferencia. Por lo general, se establece enmax_cpu/4
en un clúster principal o enmax_cpu/2
en un clúster en espera. El valor predeterminado es1
.compress-type
: Es el algoritmo de compresión que se usará. El valor predeterminado esgz
.
Existen muchos otros parámetros de configuración de pgBackRest que se pueden ajustar. En esta documentación, solo se abordan los parámetros obligatorios para la configuración predeterminada de AlloyDB Omni y algunos parámetros de configuración recomendados. Para obtener la lista completa de los parámetros de configuración, consulta la documentación en línea de la Referencia de configuración de pgBackRest.
Después de configurar pgBackRest, se deben inicializar los repositorios de destino en los que se escriben las copias de seguridad. Para ello, crea la estrofa, que usa los parámetros establecidos en el archivo de configuración.
Para configurar tu base de datos para las copias de seguridad, completa los siguientes pasos:
Crea la estrofa con el comando
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
Reemplaza las siguientes variables:
CONTAINER_NAME
: Es el nombre que usaste para tu contenedor.
Configura tu base de datos para las copias de seguridad.
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;"
Reemplaza las siguientes variables:
CONTAINER_NAME
: Es el nombre que usaste para tu contenedor.
Reinicia el contenedor.
Docker
docker restart CONTAINER_NAME
Docker
docker restart CONTAINER_NAME
Podman
podman restart CONTAINER_NAME
Podman
podman restart CONTAINER_NAME
Reemplaza las siguientes variables:
CONTAINER_NAME
: Es el nombre que usaste para tu contenedor.
Valida la configuración de la copia de seguridad.
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"
Reemplaza las siguientes variables:
CONTAINER_NAME
: Es el nombre que usaste para tu contenedor.
Realiza una verificación de 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
Reemplaza las siguientes variables:
CONTAINER_NAME
: Es el nombre que usaste para tu contenedor.
Cómo crear una copia de seguridad
Realiza una copia de seguridad completa.
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
Reemplaza las siguientes variables:
CONTAINER_NAME
: Es el nombre que usaste para tu contenedor.
Realiza una copia de seguridad diferencial.
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
Reemplaza las siguientes variables:
CONTAINER_NAME
: Es el nombre que usaste para tu contenedor.
Informar copias de seguridad
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
Reemplaza las siguientes variables:
CONTAINER_NAME
: Es el nombre que usaste para tu contenedor.
Configura copias de seguridad programadas
Para configurar copias de seguridad programadas, crea un trabajo cron que ejecute el comando pgbackrest backup
tanto como sea necesario. Para obtener más información, consulta Cómo programar una copia de seguridad.
Configuración personalizada y copias de seguridad remotas
Una vez que tengas una configuración básica en funcionamiento, puedes ajustar tu archivo de configuración para que se adapte a tus necesidades y preferencias con las opciones documentadas en la referencia de configuración de pgBackRest.
Esto incluye especificar repositorios de copia de seguridad adicionales ubicados en máquinas remotas o en la nube. Si defines varios repositorios, pgBackRest escribirá en ellos de forma simultánea como su acción de copia de seguridad predeterminada.
Por ejemplo, pgBackRest admite usar un bucket de Cloud Storage como repositorio de copias de seguridad, con varias opciones de configuración relacionadas. En la siguiente sección, se muestra una forma de usar estas opciones.
Ejemplo de configuración con Cloud Storage
Los pasos de esta sección se basan en el archivo de configuración que se presentó en Configuración básica con copias de seguridad locales. Estas modificaciones a ese archivo definen un segundo repositorio de copia de seguridad en un bucket de Cloud Storage al que se accede a través de la administración de identidades y accesos (IAM).
El estilo de autenticación automática en este ejemplo requiere que un clúster de AlloyDB Omni se ejecute en una instancia de VM de Compute Engine. Si no ejecutas AlloyDB Omni en una instancia de VM de Compute Engine, aún puedes crear una copia de seguridad en un bucket de Cloud Storage con otro método de autenticación, como una Google Cloud clave de cuenta de servicio guardada en el sistema de archivos local.
Para extender el archivo de configuración anterior y definir un repositorio de pgBackRest basado en Cloud Storage, sigue estos pasos:
Configura los permisos del bucket para permitir que la cuenta de servicio adjunta a tu instancia de VM escriba en el bucket. Para ello, se requiere que el rol de IAM de usuario de objetos de almacenamiento esté configurado en esa cuenta de servicio.
Agrega estas líneas a la sección
[global]
de tu archivopgbackrest.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=PATH_IN_BUCKET # Cloud Storage backup retention parameters: repo2-retention-full=8 repo2-retention-full-type=count
Reemplaza la siguiente variable:
BUCKET_NAME
: Es el nombre del bucket de Cloud Storage en el que deseas que pgBackRest almacene las copias de seguridad.PATH_IN_BUCKET
: Es la ruta de acceso al directorio del bucket de Cloud Storage en el que deseas que pgBackRest almacene las copias de seguridad.
Inicializa la ubicación de copia de seguridad basada en la nube con el comando
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
Reemplaza la siguiente variable:
CONTAINER_NAME
: Es el nombre que usaste para tu contenedor.
Después de inicializar el repositorio de copias de seguridad en tu bucket de Cloud Storage con el comando pgbackrest stanza-create
, pgBackRest puede crear copias de seguridad de hasta dos ubicaciones:
Es la ubicación en el sistema de archivos local, que se define en otra parte del archivo de configuración como
repo1-path
. Esta es la ubicación predeterminada cuando no se especifica--repo
en el comandopgbackrest
.Bucket de Cloud Storage, definido con las directivas de configuración
repo2-gcs-bucket
que configuró este ejemplo Para usar el bucket de Cloud Storage, especifica--repo=2
en el comandopgbackrest
.