pg_upgrade
auf AlloyDB Omni PostgreSQL 16 aktualisieren. Die Anleitung auf dieser Seite beschreibt die Upgradeschritte für AlloyDB Omni, das als eigenständiger Server bereitgestellt wird, und für AlloyDB Omni, das als replizierte Stand-by-Knoten konfiguriert ist. Durch die Verwendung von pg_upgrade
wird sichergestellt, dass das Upgrade ohne Datenverlust abgeschlossen wird.
Weitere Informationen zu PostgreSQL-Upgradeoptionen finden Sie unter pg_upgrade.
Hinweise
- Bevor Sie das Upgrade starten, empfehlen wir Ihnen, eine vollständige Sicherung Ihres Datenbankclusters zu erstellen.
Führen Sie den folgenden Befehl aus, um sicherzustellen, dass der AlloyDB Omni 15-Dienst ausgeführt wird:
Docker
docker exec ALLOYDB15_CONTAINER psql -U postgres -c "SELECT 1;"
Podman
podman exec ALLOYDB15_CONTAINER psql -U postgres -c "SELECT 1;"
Die
pg_squeeze
-Erweiterung in PostgreSQL 15 wird in AlloyDB Omni PostgreSQL 16.8.0 nicht unterstützt. Wennpg_squeeze
in Ihrer AlloyDB Omni 15-Installation vorhanden ist, müssen Sie die Erweiterung entfernen, bevor Sie das Upgrade auf AlloyDB Omni 16 durchführen.Wenn Sie benutzerdefinierte Erweiterungen zusätzlich zu AlloyDB Omni installiert haben, müssen Sie darauf achten, dass diese benutzerdefinierten Erweiterungen auch im Image 16.8.0 installiert sind. Prüfen Sie die installierten Erweiterungen mit dem folgenden Befehl:
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;
Wenn Sie ein Upgrade von AlloyDB Omni-Version 15.5.2 oder früher ausführen, müssen Sie zuerst ein Upgrade auf eine neuere Version von AlloyDB Omni 15 durchführen. Von AlloyDB Omni-Version 15.5.2 und früher zur neuesten Version migrieren
AlloyDB Omni in einer Docker-Containerumgebung aktualisieren
So führen Sie ein Upgrade von AlloyDB Omni PostgreSQL 15 auf AlloyDB Omni PostgreSQL 16.8.0 in einer Docker- oder Podman-Containerumgebung durch:
Docker
Kopieren Sie
bin
und geben Sie das Verzeichnis aus der Version des AlloyDB Omni-Containers frei, für die Sie ein Upgrade durchführen möchten: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
Erstellen Sie ein neues Datenverzeichnis für den AlloyDB Omni PostgreSQL 16-Container, in dem die aktualisierten Daten gespeichert werden:
mkdir -p DATA_PATH/16/data chown 999 DATA_PATH/16/data
Starten Sie den AlloyDB Omni PostgreSQL 16-Container mit allen Pfaden, die im selben Netzwerk wie der vorherige AlloyDB Omni-Container eingebunden sind. Sehen Sie sich folgendes Beispiel an:
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
Initialisieren Sie das neue Datenverzeichnis für die aktualisierte Version des Containers.
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
Wenn der alte Cluster spezielle Einstellungen hatte, z. B.
--data-checksum
oder--locale
, müssen Sie diese Parameter auch übergeben, um den AlloyDB Omni 16-Container zu erstellen.Wenn Sie die Neustartrichtlinie für den Container der früheren Version aktiviert haben, müssen Sie sie deaktivieren, wie im folgenden Beispiel gezeigt:
docker update --restart=no ALLOYDB15_CONTAINER
Führen Sie
pg_upgrade --check
aus, um zu prüfen, ob der Cluster bereit ist, auf AlloyDB Omni 16 aktualisiert zu werden.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"
Nachdem der Befehl
pg_upgrade --check
ausgeführt wurde, wird eine Ausgabe angezeigt, die mitClusters are compatible
endet. Das bedeutet, dass der Cluster bereit für das Upgrade ist. Mit diesem Befehl wird auch der AlloyDB Omni PostgreSQL 15-Container geprüft und heruntergefahren. Nach Abschluss vonpg_upgrade --check
können Anwendungen keine Verbindung mehr zur Datenbank herstellen oder Abfragen ausführen.Führen Sie
pg_upgrade
aus, um die aktualisierten Daten in das neue Datenverzeichnis zu kopieren. Prüfen Sie dann, obpg_upgrade
erfolgreich abgeschlossen wurde und ob der AlloyDB Omni PostgreSQL 15-Container beendet wurde: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
Wenn
pg_upgrade
fehlschlägt, führen Sie ein Rollback zum AlloyDB Omni-PostgreSQL 15-Container durch, indem Sie den PostgreSQL 15-Container starten: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
Sehen Sie sich die Logs an, um die Gründe für den fehlgeschlagenen Upgrade zu ermitteln.
Wenn das Upgrade erfolgreich war, bereinigen Sie den AlloyDB Omni PostgreSQL 16-Container und starten Sie ihn neu:
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
Kopieren Sie
bin
und geben Sie das Verzeichnis aus der Version des AlloyDB Omni-Containers frei, für die Sie ein Upgrade durchführen möchten: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
Erstellen Sie ein neues Datenverzeichnis für den AlloyDB Omni PostgreSQL 16-Container, in dem die aktualisierten Daten gespeichert werden:
mkdir -p DATA_PATH/16/data chown 999 DATA_PATH/16/data
Starten Sie den AlloyDB Omni PostgreSQL 16-Container mit allen Pfaden, die im selben Netzwerk wie der vorherige AlloyDB Omni-Container eingebunden sind. Sehen Sie sich folgendes Beispiel an:
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
Initialisieren Sie das neue Datenverzeichnis für die aktualisierte Version des Containers.
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
Wenn der alte Cluster spezielle Einstellungen hatte, z. B.
--data-checksum
oder--locale
, müssen Sie diese Parameter auch übergeben, um den AlloyDB Omni 16-Container zu erstellen.Wenn Sie die Neustartrichtlinie für den Container der früheren Version aktiviert haben, müssen Sie sie deaktivieren, wie im folgenden Beispiel gezeigt:
podman update --restart=no ALLOYDB15_CONTAINER
Führen Sie
pg_upgrade --check
aus, um zu prüfen, ob der Cluster bereit ist, auf AlloyDB Omni 16 aktualisiert zu werden.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"
Nachdem der Befehl
pg_upgrade --check
ausgeführt wurde, wird eine Ausgabe angezeigt, die mitClusters are compatible
endet. Das bedeutet, dass der Cluster bereit für das Upgrade ist. Mit diesem Befehl wird auch der AlloyDB Omni PostgreSQL 15-Container geprüft und heruntergefahren. Nach Abschluss vonpg_upgrade --check
können Anwendungen keine Verbindung mehr zur Datenbank herstellen oder Abfragen ausführen.Führen Sie
pg_upgrade
aus, um die aktualisierten Daten in das neue Datenverzeichnis zu kopieren. Prüfen Sie dann, obpg_upgrade
erfolgreich abgeschlossen wurde und ob der AlloyDB Omni PostgreSQL 15-Container beendet wurde: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
Wenn
pg_upgrade
fehlschlägt, führen Sie ein Rollback zum AlloyDB Omni-PostgreSQL 15-Container durch, indem Sie den PostgreSQL 15-Container starten: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
Sehen Sie sich die Logs an, um die Gründe für den fehlgeschlagenen Upgrade zu ermitteln.
Wenn das Upgrade erfolgreich war, bereinigen Sie den AlloyDB Omni PostgreSQL 16-Container und starten Sie ihn neu:
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
AlloyDB Omni-Server auf dem Stand-by-Knoten aktualisieren
Wenn Ihr AlloyDB Omni-Server mit einer aktiven und Streaming-replizierten Stand-by-Konfiguration bereitgestellt wird, können Sie pg_upgrade
nicht auf dem Stand-by-Knoten ausführen. Wenn Sie den AlloyDB Omni-Server auf einem Standby-Knoten aktualisieren möchten, empfehlen wir, vor dem Upgrade von AlloyDB Omni auf dem aktiven Knoten sicherzustellen, dass auf dem Standby-Knoten keine Replikationsverzögerungen auftreten.
So führen Sie ein Upgrade des Standby-AlloyDB Omni-Servers durch:
- Beenden Sie den Stand-by-AlloyDB Omni-Container, bevor Sie den aktiven Knoten aktualisieren.
- Nachdem der aktive Knoten aktualisiert wurde, synchronisieren Sie das aktualisierte Datenverzeichnis vom neuen aktiven Knoten mit dem Standby-Knoten mithilfe von rsync.
Weitere Informationen zum Upgraden eines Standby-Servers mit Streaming-Replikation finden Sie unter
pg_upgrade
. - Starten Sie den Container mit dem AlloyDB for PostgreSQL PostgreSQL 16-Image und demselben Datenverzeichnis.
Wenn Sie die logische Replikation verwenden, lesen Sie den Abschnitt Daten über die Replikation aktualisieren.