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. Sipg_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
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
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
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
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.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
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 parClusters 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 foispg_upgrade --check
terminé, les applications ne peuvent plus se connecter à la base de données ni exécuter de requêtes.Exécutez
pg_upgrade
pour copier les données mises à niveau dans le nouveau répertoire de données, puis vérifiez quepg_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
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.
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
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
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
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
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.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
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 parClusters 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 foispg_upgrade --check
terminé, les applications ne peuvent plus se connecter à la base de données ni exécuter de requêtes.Exécutez
pg_upgrade
pour copier les données mises à niveau dans le nouveau répertoire de données, puis vérifiez quepg_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
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.
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 :
- Arrêtez le conteneur AlloyDB Omni de secours avant de mettre à niveau le nœud actif.
- 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
. - 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.