Upgrade auf AlloyDB Omni-Version 16.8.0 auf einer VM

Wählen Sie eine Dokumentationsversion aus:

Auf dieser Seite wird beschrieben, wie Sie Ihre auf PostgreSQL 15 basierenden AlloyDB Omni-Container mit 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. Wenn pg_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

  1. 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
    
  2. 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
    
  3. 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
    
  4. 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.

  5. 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
    
  6. 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 mit Clusters 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 von pg_upgrade --check können Anwendungen keine Verbindung mehr zur Datenbank herstellen oder Abfragen ausführen.

  7. Führen Sie pg_upgrade aus, um die aktualisierten Daten in das neue Datenverzeichnis zu kopieren. Prüfen Sie dann, ob pg_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
    
  8. 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.

  9. 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

  1. 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
    
  2. 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
    
  3. 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
    
  4. 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.

  5. 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
    
  6. 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 mit Clusters 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 von pg_upgrade --check können Anwendungen keine Verbindung mehr zur Datenbank herstellen oder Abfragen ausführen.

  7. Führen Sie pg_upgrade aus, um die aktualisierten Daten in das neue Datenverzeichnis zu kopieren. Prüfen Sie dann, ob pg_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
    
  8. 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.

  9. 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:

  1. Beenden Sie den Stand-by-AlloyDB Omni-Container, bevor Sie den aktiven Knoten aktualisieren.
  2. 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.
  3. 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.