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. Sepg_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
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
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
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
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.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
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 conClusters 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 dipg_upgrade --check
, le applicazioni non potranno più connettersi al database o eseguire query.Esegui
pg_upgrade
per copiare i dati aggiornati nella nuova directory dei dati, quindi verifica chepg_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
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.
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
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
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
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
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.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
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 conClusters 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 dipg_upgrade --check
, le applicazioni non potranno più connettersi al database o eseguire query.Esegui
pg_upgrade
per copiare i dati aggiornati nella nuova directory dei dati, quindi verifica chepg_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
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.
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:
- Arresta il container AlloyDB Omni di standby prima di eseguire l'upgrade del nodo attivo.
- 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
. - 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.