Esegui l'upgrade ad AlloyDB Omni versione 16.8.0 su una VM

Seleziona una versione della documentazione:

Questa pagina descrive come eseguire l'upgrade dei container basati su AlloyDB Omni PostgreSQL 15 ad AlloyDB Omni PostgreSQL 16 utilizzando pg_upgrade. Le istruzioni riportate in questa pagina descrivono i passaggi di upgrade per AlloyDB Omni di cui è stato eseguito il deployment come server autonomo e per AlloyDB Omni configurato come nodi di standby replicati. L'utilizzo di pg_upgrade contribuisce a garantire che l'upgrade venga completato senza perdita di dati.

Per saperne di più sulle opzioni di upgrade di PostgreSQL, consulta pg_upgrade.

Prima di iniziare

  • Prima di avviare l'upgrade, ti consigliamo di eseguire un backup completo del cluster di database.
  • Per assicurarti che il servizio AlloyDB Omni 15 sia in esecuzione, esegui questo comando:

    Docker

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

    Podman

    podman exec ALLOYDB15_CONTAINER psql -U postgres -c "SELECT 1;"
    
  • L'estensione pg_squeeze in PostgreSQL 15 non è supportata in AlloyDB Omni PostgreSQL 16.8.0. Se pg_squeeze è presente nell'installazione di AlloyDB Omni 15, devi rimuovere l'estensione prima di eseguire l'upgrade ad AlloyDB Omni 16.

    Se hai installato estensioni personalizzate su AlloyDB Omni, assicurati che queste estensioni personalizzate siano installate anche nell'immagine 16.8.0. Controlla le estensioni installate eseguendo questo comando:

    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;
    
  • Se esegui l'upgrade da AlloyDB Omni versione 15.5.2 o precedente, devi prima eseguire l'upgrade a una versione più recente di AlloyDB Omni 15. Esegui la migrazione da AlloyDB Omni versione 15.5.2 e precedenti alla versione più recente.

Esegui l'upgrade di AlloyDB Omni in un ambiente container Docker

Per eseguire l'upgrade da AlloyDB Omni PostgreSQL 15 ad AlloyDB Omni PostgreSQL 16.8.0 in un ambiente container Docker o Podman, segui questi passaggi:

Docker

  1. Copia bin e condividi la directory dalla versione del container AlloyDB Omni che vuoi aggiornare:

    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. Crea una nuova directory dei dati per il container AlloyDB Omni PostgreSQL 16 in cui verranno archiviati i dati aggiornati:

    mkdir -p DATA_PATH/16/data
    chown 999 DATA_PATH/16/data
    
  3. Avvia il contenitore in esecuzione di AlloyDB Omni PostgreSQL 16 con tutti i percorsi montati nella stessa rete del precedente contenitore AlloyDB Omni. Vedi il seguente esempio:

    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. Inizializza la nuova directory dei dati per la versione aggiornata del container.

    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
    

    Se il vecchio cluster aveva impostazioni speciali, ad esempio --data-checksum o --locale, devi passare anche questi parametri per creare il contenitore AlloyDB Omni 16.

  5. Se hai abilitato la policy di riavvio nel container della versione precedente, devi disattivarla, come mostrato nell'esempio seguente:

    docker update --restart=no ALLOYDB15_CONTAINER
    
  6. Esegui pg_upgrade --check per verificare che il cluster sia pronto per l'upgrade ad 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"
    

    Al termine del comando pg_upgrade --check, viene visualizzato un output che termina con Clusters are compatible, il che indica che il cluster è pronto per l'upgrade. Questo comando controlla e arresta anche il container AlloyDB Omni PostgreSQL 15. Al termine di pg_upgrade --check, le applicazioni non potranno più connettersi al database o eseguire query.

  7. Esegui pg_upgrade per copiare i dati aggiornati nella nuova directory dei dati, quindi verifica che pg_upgrade sia stato completato correttamente e che il container AlloyDB Omni PostgreSQL 15 sia uscito:

    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. Se pg_upgrade non va a buon fine, esegui il rollback al container AlloyDB Omni PostgreSQL 15 avviando il container 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
    

    Per determinare i motivi dell'errore di upgrade, esamina i log.

  9. Se l'upgrade viene eseguito correttamente, esegui la pulizia e riavvia il container 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. Copia bin e condividi la directory dalla versione del container AlloyDB Omni che vuoi aggiornare:

    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. Crea una nuova directory dei dati per il container AlloyDB Omni PostgreSQL 16 in cui verranno archiviati i dati aggiornati:

    mkdir -p DATA_PATH/16/data
    chown 999 DATA_PATH/16/data
    
  3. Avvia il contenitore in esecuzione di AlloyDB Omni PostgreSQL 16 con tutti i percorsi montati nella stessa rete del precedente contenitore AlloyDB Omni. Vedi il seguente esempio:

    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. Inizializza la nuova directory dei dati per la versione aggiornata del container.

    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
    

    Se il vecchio cluster aveva impostazioni speciali, ad esempio --data-checksum o --locale, devi passare anche questi parametri per creare il contenitore AlloyDB Omni 16.

  5. Se hai abilitato la policy di riavvio nel container della versione precedente, devi disattivarla, come mostrato nell'esempio seguente:

    podman update --restart=no ALLOYDB15_CONTAINER
    
  6. Esegui pg_upgrade --check per verificare che il cluster sia pronto per l'upgrade ad 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"
    

    Al termine del comando pg_upgrade --check, viene visualizzato un output che termina con Clusters are compatible, il che indica che il cluster è pronto per l'upgrade. Questo comando controlla e arresta anche il container AlloyDB Omni PostgreSQL 15. Al termine di pg_upgrade --check, le applicazioni non potranno più connettersi al database o eseguire query.

  7. Esegui pg_upgrade per copiare i dati aggiornati nella nuova directory dei dati, quindi verifica che pg_upgrade sia stato completato correttamente e che il container AlloyDB Omni PostgreSQL 15 sia uscito:

    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. Se pg_upgrade non va a buon fine, esegui il rollback al container AlloyDB Omni PostgreSQL 15 avviando il container 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
    

    Per determinare i motivi dell'errore di upgrade, esamina i log.

  9. Se l'upgrade viene eseguito correttamente, esegui la pulizia e riavvia il container 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
    

Esegui l'upgrade del server AlloyDB Omni sul nodo di standby

Se il server AlloyDB Omni viene implementato con una configurazione di standby replicata attiva e in streaming, non puoi eseguire pg_upgrade sul nodo di standby. Per eseguire l'upgrade del server AlloyDB Omni su un nodo di standby, ti consigliamo di assicurarti che non ci siano ritardi di replica sul nodo di standby prima di eseguire l'upgrade di AlloyDB Omni sul nodo attivo.

Per eseguire l'upgrade del server di standby AlloyDB Omni, segui questi passaggi di alto livello:

  1. Arresta il container AlloyDB Omni di standby prima di eseguire l'upgrade del nodo attivo.
  2. Dopo l'upgrade del nodo attivo, sincronizza la directory dei dati aggiornata dal nuovo nodo attivo al nodo di standby utilizzando rsync. Per ulteriori informazioni sull'upgrade di un server di standby replicato in streaming, consulta pg_upgrade.
  3. Avvia il container utilizzando l'immagine AlloyDB per PostgreSQL PostgreSQL 16 utilizzando la stessa directory di dati.

Se utilizzi la replica logica, consulta Eseguire l'upgrade dei dati tramite la replica.