Mettre à niveau AlloyDB Omni vers la version 16.8.0 sur une VM

Sélectionnez une version de la documentation :

Cette page explique comment mettre à niveau vos conteneurs AlloyDB Omni PostgreSQL 15 vers AlloyDB Omni PostgreSQL 16 à l'aide de pg_upgrade. Les instructions de cette page décrivent les étapes de mise à niveau pour AlloyDB Omni déployé en tant que serveur autonome et pour AlloyDB Omni configuré en tant que nœuds de secours répliqués. L'utilisation de pg_upgrade permet de s'assurer que la mise à niveau se termine sans perte de données.

Pour en savoir plus sur les options de mise à niveau de PostgreSQL, consultez pg_upgrade.

Avant de commencer

  • Avant de lancer la mise à niveau, nous vous recommandons de sauvegarder complètement votre cluster de bases de données.
  • Pour vous assurer que le service AlloyDB Omni 15 est en cours d'exécution, exécutez la commande suivante :

    Docker

    docker exec ALLOYDB15_CONTAINER psql -U postgres -c "SELECT 1;"
    

    Podman

    podman exec ALLOYDB15_CONTAINER psql -U postgres -c "SELECT 1;"
    
  • L'extension pg_squeeze dans PostgreSQL 15 n'est pas compatible avec AlloyDB Omni PostgreSQL 16.8.0. Si pg_squeeze se trouve dans votre installation AlloyDB Omni 15, vous devez supprimer l'extension avant de passer à AlloyDB Omni 16.

    Si vous avez installé des extensions personnalisées en plus d'AlloyDB Omni, assurez-vous que ces extensions personnalisées sont également installées dans l'image 16.8.0. Vérifiez les extensions installées en exécutant la commande suivante :

    Docker

    docker exec ALLOYDB15_CONTAINER psql -U postgres -d postgres -c "
    SELECT * FROM pg_extension;"
    

    Podman

    podman exec ALLOYDB15_CONTAINER psql -U postgres -d postgres -c "
    SELECT * FROM pg_extension;
    
  • Si vous effectuez une mise à niveau à partir d'AlloyDB Omni version 15.5.2 ou antérieure, vous devez d'abord passer à une version plus récente d'AlloyDB Omni 15. Migrez d'AlloyDB Omni version 15.5.2 ou antérieure vers la dernière version.

Mettre à niveau AlloyDB Omni dans un environnement de conteneur Docker

Pour passer d'AlloyDB Omni PostgreSQL 15 à AlloyDB Omni PostgreSQL 16.8.0 dans un environnement de conteneur Docker ou Podman, procédez comme suit :

Docker

  1. Copiez bin et partagez le répertoire à partir de la version du conteneur AlloyDB Omni que vous souhaitez mettre à niveau :

    mkdir -p TMP/alloydb15_bin TMP/alloydb15_share
    docker cp ALLOYDB15_CONTAINER:/usr/lib/postgresql/15 TMP/alloydb15_bin
    docker cp ALLOYDB15_CONTAINER:/usr/share/postgresql/15 TMP/alloydb15_share
    
  2. Créez un répertoire de données pour le conteneur AlloyDB Omni PostgreSQL 16 dans lequel les données mises à niveau seront stockées :

    mkdir -p DATA_PATH/16/data
    chown 999 DATA_PATH/16/data
    
  3. Démarrez le conteneur AlloyDB Omni PostgreSQL 16 en cours d'exécution avec tous les chemins d'accès montés dans le même réseau que le conteneur AlloyDB Omni précédent. Consultez l'exemple ci-dessous :

    docker run -d --name ALLOYDB16_CONTAINER \
      -e POSTGRES_PASSWORD=PASSWORD -e PGPORT=5433 \
      -v DATA_PATH/16/data:/var/lib/postgresql/data \
      -v DATA_PATH/15/data:/var/lib/postgresql/old_data \
      -v TMP/alloydb15_bin/15:/usr/lib/postgresql/15 \
      -v TMP/alloydb15_share/15:/usr/share/postgresql/15 \
      --network container:ALLOYDB15_CONTAINER \
      google/alloydbomni:IMAGE_TAG /bin/sleep infinity
    
  4. Initialisez le nouveau répertoire de données pour la version mise à niveau du conteneur.

    docker exec -u postgres ALLOYDB16_CONTAINER bash -c "
      cd /tmp;
      initdb -D /var/lib/postgresql/data --frozen-collations --encoding=UTF8 --locale=C --locale-provider=icu --icu-locale=und-x-icu
    

    Si l'ancien cluster comportait des paramètres spéciaux, par exemple --data-checksum ou --locale, vous devez également transmettre ces paramètres pour créer le conteneur AlloyDB Omni 16.

  5. Si vous avez activé la règle de redémarrage sur le conteneur de la version précédente, vous devez la désactiver, comme illustré dans l'exemple suivant :

    docker update --restart=no ALLOYDB15_CONTAINER
    
  6. Exécutez pg_upgrade --check pour vérifier que le cluster est prêt à être mis à niveau vers AlloyDB Omni 16.

    docker exec -u postgres ALLOYDB16_CONTAINER bash -c "
     cd /tmp;
    
     pg_upgrade -p 5432 -P 5433 --check -v \
                -b /usr/lib/postgresql/15/bin \
                -B /usr/lib/postgresql/16/bin \
                -d /var/lib/postgresql/old_data \
                -D /var/lib/postgresql/data"
    

    Une fois la commande pg_upgrade --check terminée, un résultat se terminant par Clusters are compatible s'affiche, ce qui indique que le cluster est prêt à être mis à niveau. Cette commande vérifie et arrête également le conteneur AlloyDB Omni PostgreSQL 15. Une fois pg_upgrade --check terminé, les applications ne peuvent plus se connecter à la base de données ni exécuter de requêtes.

  7. Exécutez pg_upgrade pour copier les données mises à niveau dans le nouveau répertoire de données, puis vérifiez que pg_upgrade s'est terminé correctement et que le conteneur AlloyDB Omni PostgreSQL 15 s'est arrêté :

    docker exec -u postgres ALLOYDB16_CONTAINER bash -c "
      cd /tmp;
      pg_upgrade -v --copy \
           -b /usr/lib/postgresql/15/bin \
           -B /usr/lib/postgresql/16/bin \
           -d /var/lib/postgresql/old_data \
           -D /var/lib/postgresql/data"
    
    docker ps -a
    
  8. Si pg_upgrade échoue, revenez au conteneur AlloyDB Omni PostgreSQL 15 en démarrant le conteneur PostgreSQL 15 :

    docker logs ALLOYDB16_CONTAINER
    docker rm -f ALLOYDB15_CONTAINER ALLOYDB16_CONTAINER
    docker run -d --name ALLOYDB15_CONTAINER -p 5432:5432 \
      -e POSTGRES_PASSWORD=postgres \
      -v DATA_PATH/15/data:/var/lib/postgresql/data \
      google/alloydbomni:15
    

    Pour déterminer les raisons de l'échec de la mise à niveau, consultez les journaux.

  9. Si la mise à niveau aboutit, nettoyez, puis redémarrez le conteneur AlloyDB Omni PostgreSQL 16 :

    docker rm -f ALLOYDB16_CONTAINER ALLOYDB15_CONTAINER
    docker run -d --name ALLOYDB16_CONTAINER -p 5432:5432 \
      -e POSTGRES_PASSWORD=postgres \
      -v DATA_PATH/16/data:/var/lib/postgresql/data \
      google/alloydbomni:16
    

Podman

  1. Copiez bin et partagez le répertoire à partir de la version du conteneur AlloyDB Omni que vous souhaitez mettre à niveau :

    mkdir -p TMP/alloydb15_bin TMP/alloydb15_share
    podman cp ALLOYDB15_CONTAINER:/usr/lib/postgresql/15 TMP/alloydb15_bin
    podman cp ALLOYDB15_CONTAINER:/usr/share/postgresql/15 TMP/alloydb15_share
    
  2. Créez un répertoire de données pour le conteneur AlloyDB Omni PostgreSQL 16 dans lequel les données mises à niveau seront stockées :

    mkdir -p DATA_PATH/16/data
    chown 999 DATA_PATH/16/data
    
  3. Démarrez le conteneur AlloyDB Omni PostgreSQL 16 en cours d'exécution avec tous les chemins d'accès montés dans le même réseau que le conteneur AlloyDB Omni précédent. Consultez l'exemple ci-dessous :

    podman run -d --name ALLOYDB16_CONTAINER \
      -e POSTGRES_PASSWORD=PASSWORD -e PGPORT=5433 \
      -v DATA_PATH/16/data:/var/lib/postgresql/data \
      -v DATA_PATH/15/data:/var/lib/postgresql/old_data \
      -v TMP/alloydb15_bin/15:/usr/lib/postgresql/15 \
      -v TMP/alloydb15_share/15:/usr/share/postgresql/15 \
      --network container:ALLOYDB15_CONTAINER \
      google/alloydbomni:16 /bin/sleep infinity
    
  4. Initialisez le nouveau répertoire de données pour la version mise à niveau du conteneur.

    podman exec -u postgres ALLOYDB16_CONTAINER bash -c "
      cd /tmp;
      initdb -D /var/lib/postgresql/data --frozen-collations --encoding=UTF8 --locale=C --locale-provider=icu --icu-locale=und-x-icu
    

    Si l'ancien cluster comportait des paramètres spéciaux, par exemple --data-checksum ou --locale, vous devez également transmettre ces paramètres pour créer le conteneur AlloyDB Omni 16.

  5. Si vous avez activé la règle de redémarrage sur le conteneur de la version précédente, vous devez la désactiver, comme illustré dans l'exemple suivant :

    podman update --restart=no ALLOYDB15_CONTAINER
    
  6. Exécutez pg_upgrade --check pour vérifier que le cluster est prêt à être mis à niveau vers AlloyDB Omni 16.

    podman exec -u postgres ALLOYDB16_CONTAINER bash -c "
     cd /tmp;
    
     pg_upgrade -p 5432 -P 5433 --check -v \
                -b /usr/lib/postgresql/15/bin \
                -B /usr/lib/postgresql/16/bin \
                -d /var/lib/postgresql/old_data \
                -D /var/lib/postgresql/data"
    

    Une fois la commande pg_upgrade --check terminée, un résultat se terminant par Clusters are compatible s'affiche, ce qui indique que le cluster est prêt à être mis à niveau. Cette commande vérifie et arrête également le conteneur AlloyDB Omni PostgreSQL 15. Une fois pg_upgrade --check terminé, les applications ne peuvent plus se connecter à la base de données ni exécuter de requêtes.

  7. Exécutez pg_upgrade pour copier les données mises à niveau dans le nouveau répertoire de données, puis vérifiez que pg_upgrade s'est terminé correctement et que le conteneur AlloyDB Omni PostgreSQL 15 s'est arrêté :

    podman exec -u postgres ALLOYDB16_CONTAINER bash -c "
      cd /tmp;
      pg_upgrade -v --copy \
           -b /usr/lib/postgresql/15/bin \
           -B /usr/lib/postgresql/16/bin \
           -d /var/lib/postgresql/old_data \
           -D /var/lib/postgresql/data"
    
    podman ps -a
    
  8. Si pg_upgrade échoue, revenez au conteneur AlloyDB Omni PostgreSQL 15 en démarrant le conteneur PostgreSQL 15 :

    podman logs ALLOYDB16_CONTAINER
    podman rm -f ALLOYDB15_CONTAINER ALLOYDB16_CONTAINER
    podman run -d --name ALLOYDB15_CONTAINER -p 5432:5432 \
      -e POSTGRES_PASSWORD=postgres \
      -v DATA_PATH/15/data:/var/lib/postgresql/data \
      google/alloydbomni:15
    

    Pour déterminer les raisons de l'échec de la mise à niveau, consultez les journaux.

  9. Si la mise à niveau aboutit, nettoyez, puis redémarrez le conteneur AlloyDB Omni PostgreSQL 16 :

    podman rm -f ALLOYDB16_CONTAINER ALLOYDB15_CONTAINER
    podman run -d --name ALLOYDB16_CONTAINER -p 5432:5432 \
      -e POSTGRES_PASSWORD=postgres \
      -v DATA_PATH/16/data:/var/lib/postgresql/data \
      google/alloydbomni:16
    

Mettre à niveau le serveur AlloyDB Omni sur le nœud en veille

Si votre serveur AlloyDB Omni est déployé avec une configuration de secours répliquée active et en flux continu, vous ne pouvez pas exécuter pg_upgrade sur le nœud de secours. Pour mettre à niveau le serveur AlloyDB Omni sur un nœud de secours, nous vous recommandons de vous assurer qu'il n'y a pas de décalage de réplication sur le nœud de secours avant de mettre à niveau AlloyDB Omni sur le nœud actif.

Pour mettre à niveau le serveur AlloyDB Omni de secours, procédez comme suit :

  1. Arrêtez le conteneur AlloyDB Omni de secours avant de mettre à niveau le nœud actif.
  2. Une fois le nœud actif mis à niveau, synchronisez le répertoire de données mis à niveau du nouveau nœud actif vers le nœud de secours à l'aide de rsync. Pour en savoir plus sur la mise à niveau d'un serveur de secours répliqué en streaming, consultez pg_upgrade.
  3. Démarrez le conteneur à l'aide de l'image AlloyDB pour PostgreSQL PostgreSQL 16 en utilisant le même répertoire de données.

Si vous utilisez la réplication logique, consultez Mettre à niveau les données via la réplication.