Configurar pgBackRest para AlloyDB Omni

Selecciona una versión de la documentación:

En esta página se explica cómo proteger los datos configurando AlloyDB Omni para que funcione con pgBackRest, un servidor de copias de seguridad de bases de datos de código abierto.

Para obtener información sobre Kubernetes, consulta Crear copias de seguridad y restaurar en Kubernetes.

Para obtener más información sobre pgBackRest, consulta su guía de usuario.

Antes de empezar

Antes de configurar AlloyDB Omni para que funcione con pgBackRest, completa los siguientes requisitos previos:

Configuración básica con copias de seguridad locales

Los pasos de esta sección te guiarán por la configuración básica de pgBackRest. Las configuraciones básicas no habilitan las copias de seguridad programadas. Para obtener más información, consulta Configurar copias de seguridad programadas.

Como pgBackRest es un producto de terceros flexible compatible con AlloyDB Omni, puedes modificar cualquiera de estos pasos según tus necesidades y preferencias.

Montar un volumen de copia de seguridad en un contenedor

Por motivos de organización, te recomendamos que crees y montes un volumen independiente para las copias de seguridad de pgBackRest. Para configurar un nuevo volumen, sigue estos pasos:

  1. Si el contenedor está en ejecución, deténgalo y elimínelo.

    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

    Sustituye la siguiente variable:

    • CONTAINER_NAME: nombre que has usado para el contenedor.
  2. 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
    

    Sustituye la siguiente variable:

    • BACKUP_DIR: directorio de host en el que se almacenarán las copias de seguridad.
  3. 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
    

    Sustituye las siguientes variables:

    • CONTAINER_NAME: nombre que has usado para el contenedor.
    • NEW_PASSWORD: contraseña asignada al usuario postgres del nuevo contenedor después de su creación. Ten en cuenta que NEW_PASSWORD solo definirá una nueva contraseña cuando DATA_DIR sea una ubicación nueva.
    • DATA_DIR: ruta del directorio de host en el que se almacenan tus datos.
    • DATA_DIR: ruta del directorio de host en el que se almacenan tus datos.
    • BACKUP_DIR: directorio de host en el que se almacenarán las copias de seguridad.
    • HOST_PORT: puerto TCP de la máquina host al que debe publicar su propio puerto 5432 el contenedor. Para usar el puerto predeterminado de PostgreSQL en la máquina host, especifica 5432.
  4. Haz que el directorio de copias de seguridad de tu contenedor sea legible para 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
    

    Sustituye la siguiente variable:

    • CONTAINER_NAME: nombre que has usado para el contenedor.

Configurar copias de seguridad locales

pgBackRest crea subdirectorios para cada copia de seguridad y contiene un archivo de manifiesto de texto sin formato.

pgBackRest usa el término "stanza" para referirse a la configuración de un clúster de bases de datos de PostgreSQL. El nombre de la stanza es arbitrario y no tiene por qué coincidir con el nombre del servidor host, el clúster de PostgreSQL o la base de datos. En la documentación de pgBackRest se recomienda asignar a la stanza el nombre de la función del clúster.

El repositorio es donde se escriben las copias de seguridad. pgBackRest permite escribir en más de un repositorio en una stanza 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 usa un archivo de configuración llamado pgbackrest.conf para almacenar parámetros globales y específicos de la sección.

Para crear e inicializar un archivo de configuración para hacer una copia de seguridad de tu clúster de AlloyDB Omni, crea el archivo pgbackrest.conf en el directorio de copias de seguridad del lado del host que creaste en Montar 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 satisfacer sus necesidades específicas, como los siguientes:

  • repo1-path: Ubicación del directorio en el que se escriben las copias de seguridad. Recomendamos una ubicación visible tanto para el servidor host como para el contenedor.

  • log-path: Ubicación del directorio en el que se escriben los archivos de registro. Si quieres escribir los archivos de registro en una ubicación independiente, no mezclados con las propias copias de seguridad, ajusta este parámetro.

  • repo1-retention-full: Número de copias de seguridad completas que se conservarán.

  • repo1-retention-full-type: Indica si la conservación se mide por recuento o por periodo (en días).

  • repo1-retention-diff: Número de copias de seguridad diferenciales que se conservarán.

Otros ajustes de parámetros no críticos, pero recomendados, que son compatibles con AlloyDB Omni en el archivo de configuración son los siguientes:

  • log-level-console: Nivel de registro escrito en la pantalla (STDOUT) al ejecutar comandos de pgBackup. Puedes ajustar este valor en el archivo de configuración para adaptarlo a tus necesidades o anularlo con el argumento de línea de comandos --log-level-console. El valor predeterminado es warn.

  • start-fast: Fuerza un punto de control para iniciar las copias de seguridad rápidamente. El valor predeterminado es n.

  • archive-async: Envía archivos de segmento WAL de forma asíncrona para mejorar el rendimiento. El valor predeterminado es n.

  • process-max: Número máximo de procesos que se usarán para la compresión y la transferencia. Normalmente, se asigna el valor max_cpu/4 a un clúster principal o max_cpu/2 a un clúster de reserva. El valor predeterminado es 1.

  • compress-type: Algoritmo de compresión que se va a usar. El valor predeterminado es gz.

Hay muchos otros parámetros de configuración de pgBackRest que se pueden ajustar. Esta documentación solo abarca los parámetros obligatorios para la configuración predeterminada de AlloyDB Omni y algunos ajustes de parámetros recomendados. Para ver la lista completa de parámetros de configuración, consulta la documentación online de 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, se crea la sección, que usa los parámetros definidos en el archivo de configuración.

Para configurar tu base de datos para las copias de seguridad, sigue estos pasos:

  1. Crea la stanza 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
    

    Sustituye las siguientes variables:

    • CONTAINER_NAME: nombre que has usado para el contenedor.
  2. 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;"
    

    Sustituye las siguientes variables:

    • CONTAINER_NAME: nombre que has usado para el contenedor.
  3. Reinicia el contenedor.

    Docker

    docker restart CONTAINER_NAME
    

    Docker

    docker restart CONTAINER_NAME
    

    Podman

    podman restart CONTAINER_NAME
    

    Podman

    podman restart CONTAINER_NAME
    

    Sustituye las siguientes variables:

    • CONTAINER_NAME: nombre que has usado para el contenedor.
  4. 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"
    

    Sustituye las siguientes variables:

    • CONTAINER_NAME: nombre que has usado para el contenedor.
  5. Realiza una comprobació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
    

    Sustituye las siguientes variables:

    • CONTAINER_NAME: nombre que has usado para el contenedor.

Hacer una copia de seguridad

  1. 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
    

    Sustituye las siguientes variables:

    • CONTAINER_NAME: nombre que has usado para el contenedor.
  2. 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
    

    Sustituye las siguientes variables:

    • CONTAINER_NAME: nombre que has usado para el contenedor.
  3. Informes de 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
    

    Sustituye las siguientes variables:

    • CONTAINER_NAME: nombre que has usado para el contenedor.

Configurar copias de seguridad programadas

Para configurar copias de seguridad programadas, crea una tarea cron que ejecute el comando pgbackrest backup con la frecuencia que necesites. Para obtener más información, consulta Programar una copia de seguridad.

Configuración personalizada y copias de seguridad remotas

Una vez que tengas una configuración básica, puedes ajustar el archivo de configuración para adaptarlo a tus necesidades y preferencias mediante las opciones que se describen en la referencia de configuración de pgBackRest.

Esto incluye especificar repositorios de copias de seguridad adicionales ubicados en máquinas remotas o en la nube. Si defines varios repositorios, pgBackRest escribirá simultáneamente en todos ellos como acción de copia de seguridad predeterminada.

Por ejemplo, pgBackRest admite usar un segmento 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 presenta en Configuración básica con copias de seguridad locales. Estas modificaciones en el archivo definen un segundo repositorio de copias de seguridad en un segmento de Cloud Storage, al que se accede mediante Gestión de Identidades y Accesos (IAM).

El estilo de autenticación automática de 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, puedes crear copias de seguridad en un bucket de Cloud Storage mediante otro método de autenticación, como una Google Cloud clave de cuenta de servicio Google Cloud guardada en el sistema de archivos local.

Para ampliar el archivo de configuración anterior y definir un repositorio de pgBackRest basado en Cloud Storage, sigue estos pasos:

  1. Configura los permisos del segmento para permitir que la cuenta de servicio vinculada a tu instancia de VM escriba en el segmento. Para ello, es necesario que se haya asignado el rol de gestión de identidades y accesos Usuario de objetos de Storage a esa cuenta de servicio.

  2. Añade estas líneas a la sección [global] de tu archivo pgbackrest.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
    

    Sustituye la siguiente variable:

    • BUCKET_NAME: nombre del segmento de Cloud Storage en el que quieres que pgBackRest almacene las copias de seguridad.
    • PATH_IN_BUCKET: ruta del directorio del segmento de Cloud Storage en el que quieres que pgBackRest almacene las copias de seguridad.
  3. Inicializa la ubicación de la copia de seguridad 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
    

    Sustituye la siguiente variable:

    • CONTAINER_NAME: nombre que has usado para el contenedor.

Después de inicializar el repositorio de copias de seguridad en tu segmento de Cloud Storage con el comando pgbackrest stanza-create, pgBackRest puede crear copias de seguridad en dos ubicaciones:

  • Ubicación en el sistema de archivos local, definida en otra parte del archivo de configuración como repo1-path. Esta es la ubicación predeterminada cuando --repo no se especifica en el comando pgbackrest.

  • Segmento de Cloud Storage, definido mediante las directivas de configuración repo2-gcs-bucket configuradas en este ejemplo. Para usar el segmento de Cloud Storage, especifica --repo=2 en el comando pgbackrest.

Siguientes pasos