Sauvegarder et restaurer AlloyDB Omni RPM dans un stockage compatible S3 à l'aide de pgBackRest

1. Introduction

Cet atelier de programmation explique comment configurer pgBackRest pour sauvegarder et restaurer un déploiement AlloyDB Omni RPM à l'aide d'un stockage d'objets compatible avec S3.

Remarque : Dans cet atelier de programmation, vous allez déployer un binaire MinIO autonome sur la VM pour qu'il serve de point de terminaison de stockage local et léger compatible avec S3 à des fins de tutoriel et de test. Pour les charges de travail de production, utilisez toujours une solution de stockage compatible S3 ou un stockage d'objets cloud compatible et activement géré.

Prérequis

  • Accès à un projet Google Cloud et à Cloud Shell depuis la console Cloud.
  • Le SDK Google Cloud (gcloud) est installé et configuré.

Points abordés

  • Découvrez comment configurer une VM Compute Engine pour AlloyDB Omni RPM.
  • Comment configurer un serveur de stockage d'objets local compatible avec S3 sur la VM.
  • Comment configurer pgBackRest pour utiliser le stockage d'objets compatible S3 comme dépôt de sauvegarde.
  • Comment effectuer, lister et vérifier les sauvegardes.
  • Comment restaurer des données à partir d'une sauvegarde

Prérequis

  • Obtenez un lien URL vers les RPM AlloyDB Omni. Les liens sont envoyés à votre adresse e-mail, qui inclut le serveur d'URL du dépôt. Initialisez la variable d'environnement suivante pour que l'URL soit prête à l'emploi pendant l'atelier de programmation.
    export ALLOYDB_OMNI_REPOSITORY_URL="..."
    
  • Un terminal fonctionnel avec accès à Google Cloud. Vous pouvez utiliser Cloud Shell à cette fin.

2. Préparation

Configuration du projet

Créer un projet Google Cloud

  1. Dans la console Google Cloud, sur la page de sélection du projet, sélectionnez ou créez un projet Google Cloud.
  2. Assurez-vous que la facturation est activée pour votre projet Cloud. Découvrez comment vérifier si la facturation est activée sur un projet.

Démarrer Cloud Shell

Bien que vous puissiez utiliser Google Cloud à distance depuis votre ordinateur portable, vous allez utiliser Google Cloud Shell, un environnement de ligne de commande exécuté dans le cloud, lors de cet atelier de programmation.

Icône d'activation de Cloud Shell

  1. Ouvrez la console Google Cloud et cliquez sur l'icône Cloud Shell dans la barre d'outils en haut à droite.Vous pouvez également ouvrir Cloud Shell de l'une des manières suivantes :

Le provisionnement et la connexion à l'environnement prennent généralement quelques instants. Une fois cette opération terminée, un résultat semblable à celui-ci s'affiche :

Terminal Google Cloud Shell indiquant que l'environnement est connecté{: width="624"}

3. Créer la VM Compute Engine

Dans cette section, vous allez créer une seule machine virtuelle (VM) Compute Engine (GCE) à l'aide de l'outil de ligne de commande gcloud. Vous utilisez une image Rocky Linux 9, qui est entièrement compatible avec les RPM AlloyDB Omni.

  1. Définissez des variables d'environnement pour l'ID de votre projet, le nom de la VM, le type de machine, la zone et la région.
    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. Connectez-vous avec votre compte utilisateur Google Cloud et configurez le projet par défaut.
    gcloud auth login
    gcloud config set project $PROJECT
    
  3. Créez une règle de pare-feu pour autoriser les connexions SSH à votre 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. Étant donné que la VM est créée sans adresse IP publique, configurez un routeur Cloud Router et une passerelle Cloud NAT pour permettre à la VM d'accéder aux dépôts de packages externes et de télécharger les logiciels requis.
    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. Assurez-vous que votre réseau VPC dispose d'une route de passerelle Internet par défaut valide. Dans certains environnements partagés ou de bac à sable, les routes par défaut sont parfois supprimées par des scripts de nettoyage. Cette route est nécessaire pour que Cloud NAT transfère le trafic sortant vers 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. Créez l'instance de VM Compute Engine avec Rocky Linux 9 et un disque persistant équilibré de 20 Go. Pour renforcer la sécurité, utilisez l'option --no-address afin qu'aucune adresse IP publique ne soit attribuée à 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. Une fois la VM créée, vérifiez son état.
    gcloud compute instances list --filter="name=$INSTANCE_NAME" --project=$PROJECT
    

4. Configurer le stockage d'objets compatible S3

Dans cette section, vous allez vous connecter à votre VM, préparer l'environnement et configurer un serveur de stockage d'objets compatible S3 local (minio) ainsi qu'un client S3 (mc) pour héberger votre bucket de sauvegarde.

  1. Connectez-vous à la VM via SSH à l'aide d'Identity-Aware Proxy (IAP). Comme la VM ne possède pas d'adresse IP publique, gcloud tunnelise automatiquement la connexion SSH via IAP.
    gcloud compute ssh $INSTANCE_NAME --zone=$ZONE --project=$PROJECT --tunnel-through-iap
    
  2. Installez le package policycoreutils-python-utils pour pouvoir configurer la règle SELinux ultérieurement, si nécessaire.
    sudo dnf install -y policycoreutils-python-utils
    
  3. Téléchargez le binaire du serveur compatible 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. Créez un répertoire de données pour le serveur de stockage d'objets.
    sudo mkdir -p /var/lib/s3-storage/data
    
  5. Démarrez le serveur compatible S3 en arrière-plan avec des exemples d'identifiants. Notez que la clé secrète doit comporter au moins huit caractères.
    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. Vérifiez que le serveur compatible avec S3 est en cours d'exécution.
    ps aux | grep minio
    
  7. Téléchargez et installez le client S3 (mc) pour gérer les 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. Configurez l'alias du client S3 (s3repo) et créez un bucket nommé alloydb-backups.
    mc alias set s3repo http://localhost:9000 s3admin s3password
    mc mb s3repo/alloydb-backups
    

5. Installer AlloyDB Omni

Dans cette section, vous allez installer et configurer AlloyDB Omni.

  1. Définissez des variables d'environnement sur la VM pour le répertoire de données, l'URL de votre dépôt AlloyDB Omni et un mot de passe sécurisé pour l'utilisateur administrateur PostgreSQL postgres. Remplacez l'URL par celle que vous avez reçue dans le formulaire d'inscription.
    export PGDATA="/var/lib/alloydbomni"
    export ALLOYDB_OMNI_REPOSITORY_URL="..."
    export PGPASSWORD="YourStrongPassword123!"
    
    Remarque : La transmission de mots de passe à l'aide de variables d'environnement sur la ligne de commande (par exemple, PGPASSWORD=$PGPASSWORD) est utilisée ici par souci de simplicité dans l'atelier de programmation, mais elle peut exposer le mot de passe dans les listes de processus. En production, utilisez des méthodes plus sécurisées, comme un fichier .pgpass ou un gestionnaire de secrets.
  2. Créez le répertoire de données dans lequel AlloyDB Omni stockera ses fichiers de base de données.
    sudo mkdir -p $PGDATA
    
  3. Configurez le dépôt YUM sur votre VM en créant le fichier de configuration du dépôt.
    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. Mettez à jour le cache YUM.
    sudo yum makecache
    
  5. Installez la version 18 du package RPM AlloyDB Omni.
    sudo dnf install -y alloydbomni18
    
  6. Initialisez l'instance de base de données AlloyDB Omni.
    sudo PGPASSWORD=$PGPASSWORD PGDATA=$PGDATA /usr/lib/postgresql/18/bin/alloydbomni18-setup initdb
    
  7. Désactivez temporairement le mode d'application forcée de SELinux pour faciliter la configuration, conformément aux pratiques standards des ateliers de programmation.
    sudo setenforce 0
    
  8. Préparez l'instance de base de données AlloyDB Omni.
    sudo PGPASSWORD=$PGPASSWORD PGDATA=$PGDATA /usr/lib/postgresql/18/bin/alloydbomni18-setup preparedb
    
  9. Activez et démarrez le service systemd AlloyDB Omni.
    sudo systemctl enable alloydbomni18
    sudo systemctl start alloydbomni18
    
  10. Vérifiez que le service AlloyDB Omni est actif et qu'il s'exécute correctement.
    sudo systemctl status alloydbomni18
    

6. Configurer pgBackRest

Dans cette section, vous allez installer pgBackRest à partir du dépôt AlloyDB Omni Common, configurer /etc/pgbackrest/pgbackrest.conf pour utiliser votre bucket de stockage d'objets compatible avec S3 comme dépôt de sauvegarde et activer l'archivage WAL dans AlloyDB Omni.

  1. Définissez une variable d'environnement sur la VM pour l'URL de votre dépôt AlloyDB Omni Common. Remplacez l'URL par celle que vous avez reçue dans le formulaire d'inscription.
    export ALLOYDB_OMNI_COMMON_REPOSITORY_URL="..."
    
  2. Configurez le dépôt YUM pgBackRest et installez 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. Créez les répertoires de spool et de journaux pour pgBackRest, puis attribuez-en la propriété à l'utilisateur 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. Créez /etc/pgbackrest/pgbackrest.conf et configurez des autorisations strictes pour les fichiers.
    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. Initialisez la strophe pgBackRest en tant qu'utilisateur postgres.
    sudo -u postgres pgbackrest --stanza=omni stanza-create
    
    Vérifiez que stanza-create command end: completed successfully s'affiche dans le résultat.
  6. Configurez les paramètres d'archivage AlloyDB Omni à l'aide de 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. Redémarrez le service AlloyDB Omni pour appliquer les modifications apportées à l'archivage.
    sudo systemctl restart alloydbomni18
    
  8. Vérifiez l'intégrité et la connectivité de la configuration pgBackRest.
    sudo -u postgres pgbackrest --stanza=omni check
    
    Vérifiez que check command end: completed successfully s'affiche dans le résultat.

7. Effectuer une sauvegarde

Dans cette section, vous allez utiliser pgBackRest pour effectuer une sauvegarde complète et une sauvegarde différentielle de votre base de données AlloyDB Omni dans un stockage d'objets compatible avec S3.

  1. Déclenchez une sauvegarde complète à l'aide de pgbackrest.
    sudo -u postgres pgbackrest \
        --stanza=omni \
        --type=full backup
    
  2. Déclenchez une sauvegarde différentielle à l'aide de pgbackrest.
    sudo -u postgres pgbackrest \
        --stanza=omni \
        --type=diff backup
    
    Remarque : Les autres types de sauvegarde compatibles incluent incr (incrémentielle).

8. Lister et vérifier les sauvegardes

Dans cette section, vous allez lister les sauvegardes et vérifier qu'elles ont abouti.

  1. Répertoriez les sauvegardes à l'aide de la commande pgbackrest info.
    sudo -u postgres pgbackrest \
        --stanza=omni info
    
    Vérifiez que le résultat affiche status: ok ainsi que les informations de sauvegarde pour chaque commande de sauvegarde que vous avez exécutée :
    • Sauvegarde complète  : full backup: F (par exemple, 20260908-093545F)
    • Sauvegarde différentielle  : diff backup: F_D (par exemple, 20260908-093545F_20260908-094016D)
  2. Vérifiez les fichiers de sauvegarde stockés dans le bucket à l'aide du client S3 (mc).
    mc ls s3repo/alloydb-backups/pgbackrest/
    
    Vous devriez voir backup, archive et stanza.info dans le résultat.

9. Restaurer des données à partir d'une sauvegarde

Dans cette section, vous allez arrêter le service de base de données AlloyDB Omni et restaurer les données à partir d'une sauvegarde spécifique à l'aide de pgbackrest.

Attention : La restauration arrête votre base de données et écrase toutes ses données.

  1. Définissez une variable d'environnement pour l'ID de sauvegarde à partir de laquelle vous souhaitez effectuer la restauration. Remplacez la valeur par l'ID de sauvegarde indiqué dans le résultat pgbackrest info.
    export BACKUPID="20260908-093545F"
    
  2. Arrêtez le service AlloyDB Omni et vérifiez qu'il est inactif.
    sudo systemctl stop alloydbomni18
    sudo systemctl status alloydbomni18
    
    Vérifiez que le résultat affiche Active: inactive.
  3. Exécutez pgbackrest restore avec l'option --delta pour restaurer la base de données à partir de la sauvegarde sélectionnée.
    sudo -u postgres pgbackrest \
        --stanza=omni \
        --set=$BACKUPID \
        --delta restore
    
    Vérifiez que restore command end: completed successfully s'affiche dans le résultat.
  4. Démarrez le service AlloyDB Omni et vérifiez qu'il est actif et en cours d'exécution.
    sudo systemctl start alloydbomni18
    sudo systemctl status alloydbomni18
    
    Vérifiez que le résultat affiche Active: active (running).

10. Nettoyage et enquête

Une fois l'atelier de programmation terminé, vous pouvez nettoyer les ressources Google Cloud pour éviter que des frais inutiles ne vous soient facturés.

  1. Déconnectez-vous de votre session SSH sur la VM pour revenir à votre terminal Cloud Shell local.
    exit
    
  2. Supprimez l'instance de VM Compute Engine.
    gcloud compute instances delete $INSTANCE_NAME --zone=$ZONE --project=$PROJECT --quiet
    
  3. Supprimez la règle de pare-feu créée pour l'accès SSH.
    gcloud compute firewall-rules delete allow-ssh-alloydb-omni --project=$PROJECT --quiet
    
  4. Supprimez la passerelle Cloud NAT et le routeur 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. Supprimez la route personnalisée.
    gcloud compute routes delete default-internet-route --project=$PROJECT --quiet
    

11. Félicitations

Félicitations, vous avez terminé cet atelier de programmation ! Vous avez configuré pgBackRest pour sauvegarder et restaurer un déploiement AlloyDB Omni RPM à l'aide d'un stockage d'objets compatible avec S3.

Points abordés

  • Découvrez comment configurer une VM Compute Engine pour AlloyDB Omni RPM.
  • Découvrez comment configurer un bucket de stockage d'objets compatible S3.
  • Configurer pgBackRest avec un dépôt compatible S3
  • Découvrez comment effectuer, lister et vérifier des sauvegardes complètes et différentielles.
  • Comment restaurer des données à partir d'une sauvegarde à l'aide de pgBackRest

Pour en savoir plus, consultez la présentation d'AlloyDB Omni.

12. Enquête

Comment allez-vous utiliser ce tutoriel ?

Je vais le lire uniquement Je vais le lire et effectuer les exercices