Crea copias de seguridad y restablece RPM de AlloyDB Omni en un almacenamiento compatible con S3 con pgBackRest

1. Introducción

En este codelab, se muestra cómo configurar pgBackRest para crear copias de seguridad y restablecer una implementación de RPM de AlloyDB Omni con almacenamiento de objetos compatible con S3.

Nota: En este codelab, implementarás un archivo binario de MinIO independiente en la VM para que actúe como un endpoint de almacenamiento local y ligero compatible con S3 para fines de pruebas y del instructivo. Para las cargas de trabajo de producción, usa siempre una solución de almacenamiento compatible con S3 o almacenamiento de objetos en la nube que se mantenga de forma activa.

Requisitos previos

  • Acceso a un proyecto de Google Cloud y a Cloud Shell desde Cloud Console
  • El SDK de Google Cloud (gcloud) instalado y configurado.

Qué aprenderás

  • Cómo configurar una VM de Compute Engine para el RPM de AlloyDB Omni
  • Cómo configurar un servidor de almacenamiento de objetos local compatible con S3 en la VM
  • Cómo configurar pgBackRest para usar el almacenamiento de objetos compatible con S3 como repositorio de copias de seguridad
  • Cómo realizar, enumerar y verificar copias de seguridad
  • Cómo restablecer datos desde una copia de seguridad

Requisitos

  • Obtén un vínculo de URL a los RPM de AlloyDB Omni. Los vínculos se envían a tu correo electrónico, que incluye el servidor de URL del repositorio. Inicializa la siguiente variable de entorno para tener la URL lista para usar durante el codelab.
    export ALLOYDB_OMNI_REPOSITORY_URL="..."
    
  • Una terminal en funcionamiento con acceso a Google Cloud Puedes usar Cloud Shell para este propósito.

2. Configuración y requisitos

Configuración del proyecto

Crea un proyecto de Google Cloud

  1. En la consola de Google Cloud, en la página del selector de proyectos, selecciona o crea un proyecto de Google Cloud.
  2. Asegúrate de que la facturación esté habilitada para tu proyecto de Cloud. Obtén información para verificar si la facturación está habilitada en un proyecto.

Inicia Cloud Shell

Si bien puedes operar Google Cloud de forma remota desde tu laptop, en este codelab usarás Google Cloud Shell, un entorno de línea de comandos que se ejecuta en la nube.

Ícono para activar Cloud Shell

  1. Abre la consola de Google Cloud y haz clic en el ícono de Cloud Shell en la barra de herramientas de la parte superior derecha.También puedes abrir Cloud Shell de una de las siguientes maneras:

Por lo general, el aprovisionamiento y la conexión al entorno demoran unos minutos. Cuando se complete esta operación, verás algo similar a lo siguiente:

Terminal de Google Cloud Shell que muestra que el entorno se conectó{: width="624"}

3. Crea la VM de Compute Engine

En esta sección, crearás una sola máquina virtual (VM) de Compute Engine (GCE) con la herramienta de línea de comandos gcloud. Usas una imagen de Rocky Linux 9, que es totalmente compatible con los RPM de AlloyDB Omni.

  1. Define variables de entorno para el ID del proyecto, el nombre de la VM, el tipo de máquina, la zona y la región.
    export PROJECT="your-project-id"
    export INSTANCE_NAME="alloydb-omni-pgbackrest"
    export MACHINE_TYPE="e2-standard-4"
    export ZONE="us-central1-c"
    export REGION="us-central1"
    
  2. Accede con tu usuario de la cuenta de Google Cloud y configura el proyecto predeterminado.
    gcloud auth login
    gcloud config set project $PROJECT
    
  3. Crea una regla de firewall para permitir conexiones SSH a tu VM.
    gcloud compute firewall-rules create allow-ssh-alloydb-omni \
        --project=$PROJECT \
        --direction=INGRESS \
        --action=allow \
        --rules=tcp:22 \
        --source-ranges="0.0.0.0/0"
    
  4. Dado que la VM se crea sin una dirección IP pública, configura un Cloud Router y una puerta de enlace de Cloud NAT para permitir que la VM acceda a repositorios de paquetes externos y descargue el software requerido.
    gcloud compute routers create alloydb-omni-router \
        --project=$PROJECT \
        --network=default \
        --region=$REGION
    
    gcloud compute routers nats create alloydb-omni-nat \
        --project=$PROJECT \
        --router=alloydb-omni-router \
        --region=$REGION \
        --nat-all-subnet-ip-ranges \
        --auto-allocate-nat-external-ips
    
  5. Asegúrate de que tu red de VPC tenga una ruta de puerta de enlace de Internet predeterminada válida. En algunos entornos compartidos o de prueba, las rutas predeterminadas se quitan ocasionalmente con secuencias de comandos de limpieza. Esta ruta es necesaria para que Cloud NAT reenvíe el tráfico saliente a Internet.
    gcloud compute routes create default-internet-route \
        --project=$PROJECT \
        --network=default \
        --destination-range=0.0.0.0/0 \
        --next-hop-gateway=default-internet-gateway
    
  6. Crea la instancia de VM de Compute Engine con Rocky Linux 9 y un disco persistente balanceado de 20 GB. Para mejorar la seguridad, usa la marca --no-address para que no se le asigne una dirección IP pública a la VM.
    gcloud compute instances create $INSTANCE_NAME \
        --project=$PROJECT \
        --zone=$ZONE \
        --machine-type=$MACHINE_TYPE \
        --image-family=rocky-linux-9 \
        --image-project=rocky-linux-cloud \
        --boot-disk-size=20GB \
        --boot-disk-type=pd-balanced \
        --no-address
    
  7. Después de crear la VM, verifica su estado.
    gcloud compute instances list --filter="name=$INSTANCE_NAME" --project=$PROJECT
    

4. Configura el almacenamiento de objetos compatible con S3

En esta sección, te conectarás a tu VM, prepararás el entorno y configurarás un servidor de almacenamiento de objetos local compatible con S3 (minio) junto con un cliente de S3 (mc) para alojar tu bucket de copias de seguridad.

  1. Conéctate a la VM a través de SSH con Identity-Aware Proxy (IAP). Como la VM no tiene una dirección IP pública, gcloud creará automáticamente un túnel para la conexión SSH a través de IAP.
    gcloud compute ssh $INSTANCE_NAME --zone=$ZONE --project=$PROJECT --tunnel-through-iap
    
  2. Instala el paquete policycoreutils-python-utils para que la política de SELinux se pueda configurar más adelante si es necesario.
    sudo dnf install -y policycoreutils-python-utils
    
  3. Descarga el objeto binario del servidor compatible con S3 (minio).
    curl -L -o minio \
        https://github.com/minio/minio/releases/download/RELEASE.2024-05-10T01-41-38Z/minio.linux-amd64.RELEASE.2024-05-10T01-41-38Z
    chmod +x minio
    sudo mv minio /usr/local/bin/
    
  4. Crea un directorio de datos para el servidor de almacenamiento de objetos.
    sudo mkdir -p /var/lib/s3-storage/data
    
  5. Inicia el servidor compatible con S3 en segundo plano con credenciales de ejemplo. Ten en cuenta que la clave secreta debe tener al menos 8 caracteres.
    export MINIO_ROOT_USER="s3admin"
    export MINIO_ROOT_PASSWORD="s3password"
    
    nohup sudo env MINIO_ROOT_USER="$MINIO_ROOT_USER" \
        MINIO_ROOT_PASSWORD="$MINIO_ROOT_PASSWORD" \
        /usr/local/bin/minio server /var/lib/s3-storage/data \
        --console-address ":9001" \
        > s3-server.log 2>&1 &
    
  6. Verifica que el servidor compatible con S3 esté en ejecución.
    ps aux | grep minio
    
  7. Descarga e instala el cliente de S3 (mc) para administrar buckets.
    curl -L -o mc \
        https://github.com/minio/mc/releases/download/RELEASE.2024-05-09T17-04-24Z/mc.linux-amd64.RELEASE.2024-05-09T17-04-24Z
    chmod +x mc
    sudo mv mc /usr/local/bin/
    
  8. Configura el alias del cliente de S3 (s3repo) y crea un bucket llamado alloydb-backups.
    mc alias set s3repo http://localhost:9000 s3admin s3password
    mc mb s3repo/alloydb-backups
    

5. Instalar AlloyDB Omni

En esta sección, instalarás y configurarás AlloyDB Omni.

  1. Define variables de entorno en la VM para el directorio de datos, la URL de tu repositorio de AlloyDB Omni y una contraseña segura para el usuario administrador de PostgreSQL postgres. Reemplaza la URL por la que recibiste en el formulario de registro.
    export PGDATA="/var/lib/alloydbomni"
    export ALLOYDB_OMNI_REPOSITORY_URL="..."
    export PGPASSWORD="YourStrongPassword123!"
    
    Nota: Aquí se pasan contraseñas con variables de entorno en la línea de comandos (p.ej., PGPASSWORD=$PGPASSWORD) para simplificar el codelab, pero esto puede exponer la contraseña en las listas de procesos. En producción, usa métodos más seguros, como un archivo .pgpass o un administrador de secretos.
  2. Crea el directorio de datos en el que AlloyDB Omni almacenará sus archivos de base de datos.
    sudo mkdir -p $PGDATA
    
  3. Crea el archivo de configuración del repositorio para configurar el repositorio de YUM en tu VM.
    sudo tee /etc/yum.repos.d/alloydbomni.repo << EOF
    [alloydbomni]
    name=alloydbomni
    baseurl=$ALLOYDB_OMNI_REPOSITORY_URL
    enabled=1
    repo_gpgcheck=0
    gpgcheck=1
    gpgkey=https://dl.google.com/linux/linux_signing_key.pub
    EOF
    
  4. Actualiza la caché de YUM.
    sudo yum makecache
    
  5. Instala la versión 18 del paquete RPM de AlloyDB Omni.
    sudo dnf install -y alloydbomni18
    
  6. Inicializa la instancia de la base de datos de AlloyDB Omni.
    sudo PGPASSWORD=$PGPASSWORD PGDATA=$PGDATA /usr/lib/postgresql/18/bin/alloydbomni18-setup initdb
    
  7. Inhabilita temporalmente el modo de aplicación forzosa de SELinux para facilitar la configuración, según las prácticas estándar de los codelabs.
    sudo setenforce 0
    
  8. Prepara la instancia de la base de datos de AlloyDB Omni.
    sudo PGPASSWORD=$PGPASSWORD PGDATA=$PGDATA /usr/lib/postgresql/18/bin/alloydbomni18-setup preparedb
    
  9. Habilita e inicia el servicio systemd de AlloyDB Omni.
    sudo systemctl enable alloydbomni18
    sudo systemctl start alloydbomni18
    
  10. Verifica que el servicio de AlloyDB Omni esté activo y se ejecute correctamente.
    sudo systemctl status alloydbomni18
    

6. Configura pgBackRest

En esta sección, instalarás pgBackRest desde el repositorio común de AlloyDB Omni, configurarás /etc/pgbackrest/pgbackrest.conf para que use tu bucket de almacenamiento de objetos compatible con S3 como repositorio de copias de seguridad y habilitarás el archivado de WAL en AlloyDB Omni.

  1. Define una variable de entorno en la VM para la URL de tu repositorio común de AlloyDB Omni. Reemplaza la URL por la que recibiste en el formulario de registro.
    export ALLOYDB_OMNI_COMMON_REPOSITORY_URL="..."
    
  2. Configura el repositorio de YUM de pgBackRest y, luego, instala pgbackrest-2.58.0.
    sudo tee /etc/yum.repos.d/pgbackrest.repo <<EOF
    [pgbackrest]
    name=Google Alloydb Omni Orchestrator
    baseurl=$ALLOYDB_OMNI_COMMON_REPOSITORY_URL
    enabled=1
    repo_gpgcheck=0
    gpgcheck=0
    gpgkey=https://dl.google.com/linux/linux_signing_key.pub
    EOF
    
    sudo dnf install -y pgbackrest-2.58.0
    
  3. Crea los directorios de registro y de cola de pgBackRest, y asigna la propiedad al usuario postgres.
    sudo mkdir -p /var/log/pgbackrest
    sudo mkdir -p /var/lib/pgbackrest
    
    sudo chown -R postgres:postgres /var/log/pgbackrest
    sudo chown -R postgres:postgres /var/lib/pgbackrest
    
  4. Crea /etc/pgbackrest/pgbackrest.conf y configura permisos de archivo estrictos.
    sudo mkdir -p /etc/pgbackrest/conf.d
    
    sudo tee /etc/pgbackrest/pgbackrest.conf <<EOF
    [global]
    spool-path=/var/lib/pgbackrest
    lock-path=/var/lib/pgbackrest
    
    # S3 Repository details
    repo1-type=s3
    repo1-s3-endpoint=http://localhost:9000
    repo1-s3-bucket=alloydb-backups
    repo1-s3-key=s3admin
    repo1-s3-key-secret=s3password
    repo1-s3-region=us-east-1
    repo1-s3-uri-style=path
    repo1-path=/pgbackrest
    
    # Retention policy
    repo1-retention-full=3
    repo1-retention-full-type=count
    repo1-retention-diff=16
    
    # Force immediate checkpoint during backup start
    start-fast=y
    
    # Logging
    log-path=/var/log/pgbackrest
    log-level-console=info
    log-level-file=info
    
    # Compression
    compress-type=zst
    
    # Asynchronous WAL archiving
    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=$PGDATA
    EOF
    
    sudo chown postgres:postgres /etc/pgbackrest/pgbackrest.conf
    sudo chmod 640 /etc/pgbackrest/pgbackrest.conf
    
  5. Inicializa la sección de pgBackRest como el usuario postgres.
    sudo -u postgres pgbackrest --stanza=omni stanza-create
    
    Confirma que stanza-create command end: completed successfully se muestre en el resultado.
  6. Configura los parámetros de archivado de AlloyDB Omni con psql.
    sudo -u postgres /usr/lib/postgresql/18/bin/psql \
        -c "ALTER SYSTEM SET archive_mode = 'on';" \
        -c "ALTER SYSTEM SET archive_command = 'pgbackrest --stanza=omni archive-push %p';" \
        -c "ALTER SYSTEM SET wal_level = 'replica';" \
        -c "ALTER SYSTEM SET max_wal_senders = 10;"
    
  7. Reinicia el servicio de AlloyDB Omni para aplicar los cambios de archivado.
    sudo systemctl restart alloydbomni18
    
  8. Verifica la integridad y la conectividad de la configuración de pgBackRest.
    sudo -u postgres pgbackrest --stanza=omni check
    
    Confirma que check command end: completed successfully se muestre en el resultado.

7. Realizar copia de seguridad

En esta sección, usarás pgBackRest para realizar una copia de seguridad completa y una copia de seguridad diferencial de tu base de datos de AlloyDB Omni en un almacenamiento de objetos compatible con S3.

  1. Activa una copia de seguridad completa con pgbackrest.
    sudo -u postgres pgbackrest \
        --stanza=omni \
        --type=full backup
    
  2. Activa una copia de seguridad diferencial con pgbackrest.
    sudo -u postgres pgbackrest \
        --stanza=omni \
        --type=diff backup
    
    Nota: Otros tipos de copias de seguridad admitidos incluyen incr (incremental).

8. Cómo verificar y mostrar una lista de las copias de seguridad

En esta sección, enumerarás las copias de seguridad y verificarás que se hayan completado correctamente.

  1. Enumera las copias de seguridad con el comando pgbackrest info.
    sudo -u postgres pgbackrest \
        --stanza=omni info
    
    Confirma que el resultado muestre status: ok junto con la información de la copia de seguridad para cada comando de copia de seguridad que ejecutaste:
    • Copia de seguridad completa: full backup: F (por ejemplo, 20260908-093545F)
    • Copia de seguridad de diferencias: diff backup: F_D (por ejemplo, 20260908-093545F_20260908-094016D)
  2. Verifica los archivos de copia de seguridad almacenados en el bucket con el cliente de S3 (mc).
    mc ls s3repo/alloydb-backups/pgbackrest/
    
    Deberías ver backup, archive y stanza.info en el resultado.

9. Restablece los datos desde la copia de seguridad

En esta sección, detendrás el servicio de base de datos de AlloyDB Omni y restablecerás los datos de una copia de seguridad específica con pgbackrest.

Precaución: Si restableces la base de datos, se detendrá y se reemplazarán todos sus datos.

  1. Define una variable de entorno para el ID de la copia de seguridad desde la que deseas restablecer. Reemplaza el valor por el ID de copia de seguridad que se muestra en el resultado de pgbackrest info.
    export BACKUPID="20260908-093545F"
    
  2. Detén el servicio de AlloyDB Omni y verifica que esté inactivo.
    sudo systemctl stop alloydbomni18
    sudo systemctl status alloydbomni18
    
    Confirma que el resultado muestre Active: inactive.
  3. Ejecuta pgbackrest restore con la opción --delta para restablecer la base de datos a partir de la copia de seguridad seleccionada.
    sudo -u postgres pgbackrest \
        --stanza=omni \
        --set=$BACKUPID \
        --delta restore
    
    Confirma que restore command end: completed successfully se muestre en el resultado.
  4. Inicia el servicio de AlloyDB Omni y verifica que esté activo y en ejecución.
    sudo systemctl start alloydbomni18
    sudo systemctl status alloydbomni18
    
    Confirma que el resultado muestre Active: active (running).

10. Limpieza y encuesta

Una vez que termines el codelab, puedes limpiar los recursos de Google Cloud para evitar que se generen cargos no deseados.

  1. Desconéctate de tu sesión de SSH en la VM para regresar a la terminal local de Cloud Shell.
    exit
    
  2. Borra la instancia de VM de Compute Engine.
    gcloud compute instances delete $INSTANCE_NAME --zone=$ZONE --project=$PROJECT --quiet
    
  3. Borra la regla de firewall creada para el acceso SSH.
    gcloud compute firewall-rules delete allow-ssh-alloydb-omni --project=$PROJECT --quiet
    
  4. Borra la puerta de enlace de Cloud NAT y Cloud Router.
    gcloud compute routers nats delete alloydb-omni-nat --router=alloydb-omni-router --region=$REGION --project=$PROJECT --quiet
    gcloud compute routers delete alloydb-omni-router --region=$REGION --project=$PROJECT --quiet
    
  5. Borra la ruta personalizada.
    gcloud compute routes delete default-internet-route --project=$PROJECT --quiet
    

11. Felicitaciones

¡Felicitaciones por completar el codelab! Configuraste correctamente pgBackRest para crear copias de seguridad y restablecer una implementación de RPM de AlloyDB Omni con almacenamiento de objetos compatible con S3.

Temas abordados

  • Cómo configurar una VM de Compute Engine para el RPM de AlloyDB Omni
  • Cómo configurar un bucket de almacenamiento de objetos compatible con S3
  • Cómo configurar pgBackRest con un repositorio compatible con S3
  • Cómo realizar, enumerar y verificar copias de seguridad completas y diferenciales
  • Cómo restablecer datos desde una copia de seguridad con pgBackRest

Para obtener más información, consulta la descripción general de AlloyDB Omni.

12. Encuesta

¿Cómo usarás este instructivo?

Solo lo leeré Lo leeré y completaré los ejercicios