Configura pgBackRest para AlloyDB Omni

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:

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:

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

    Reemplaza la siguiente variable:

    • BACKUP_DIR: Es el directorio del 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
    

    Reemplaza las siguientes variables:

    • CONTAINER_NAME: Es el nombre que usaste para tu contenedor.
    • NEW_PASSWORD: Contraseña asignada al usuario postgres del contenedor nuevo después de su creación. Ten en cuenta que NEW_PASSWORD solo establecerá una contraseña nueva cuando DATA_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 puerto 5432. Para usar el puerto predeterminado de PostgreSQL en la máquina anfitrión, especifica 5432.
  4. 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 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 los archivos de segmentos WAL de forma asíncrona para mejorar el rendimiento. El valor predeterminado es n.

  • 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 en max_cpu/4 en un clúster principal o en max_cpu/2 en un clúster en espera. El valor predeterminado es 1.

  • compress-type: Es el algoritmo de compresión que se usará. El valor predeterminado es gz.

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:

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

    Reemplaza las siguientes variables:

    • CONTAINER_NAME: Es el nombre que usaste para tu 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
    

    Reemplaza las siguientes variables:

    • CONTAINER_NAME: Es el nombre que usaste para tu 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"
    

    Reemplaza las siguientes variables:

    • CONTAINER_NAME: Es el nombre que usaste para tu contenedor.
  5. 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

  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
    

    Reemplaza las siguientes variables:

    • CONTAINER_NAME: Es el nombre que usaste para tu 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
    

    Reemplaza las siguientes variables:

    • CONTAINER_NAME: Es el nombre que usaste para tu contenedor.
  3. 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:

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

  2. Agrega 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
    

    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.
  3. 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 comando pgbackrest.

  • 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 comando pgbackrest.

¿Qué sigue?