pg_upgrade
. As instruções nesta página descrevem as etapas de upgrade para
o AlloyDB Omni implantado como um servidor independente e para
o AlloyDB Omni configurado como nós de espera replicados. Usar
pg_upgrade
ajuda a garantir que o upgrade seja concluído sem perda de dados.
Para mais informações sobre as opções de upgrade do PostgreSQL, consulte pg_upgrade.
Antes de começar
- Antes de iniciar o upgrade, recomendamos que você faça um backup completo do cluster de banco de dados.
Para garantir que o serviço do AlloyDB Omni 15 esteja em execução, execute o seguinte comando:
Docker
docker exec ALLOYDB15_CONTAINER psql -U postgres -c "SELECT 1;"
Podman
podman exec ALLOYDB15_CONTAINER psql -U postgres -c "SELECT 1;"
A extensão
pg_squeeze
no PostgreSQL 15 não é compatível com o AlloyDB Omni PostgreSQL 16.8.0. Sepg_squeeze
estiver na sua instalação do AlloyDB Omni 15, remova a extensão antes de fazer upgrade para o AlloyDB Omni 16.Se você instalou extensões personalizadas no AlloyDB Omni, verifique se elas também estão instaladas na imagem 16.8.0. Confira as extensões instaladas executando o seguinte 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 você estiver fazendo upgrade da versão 15.5.2 ou anterior do AlloyDB Omni, primeiro faça upgrade para uma versão mais recente do AlloyDB Omni 15. Migre da versão 15.5.2 e anteriores do AlloyDB Omni para a versão mais recente.
Fazer upgrade do AlloyDB Omni em um ambiente de contêiner do Docker
Para fazer upgrade do AlloyDB Omni PostgreSQL 15 para o AlloyDB Omni PostgreSQL 16.8.0 em um ambiente de contêiner Docker ou Podman, siga estas etapas:
Docker
Copie
bin
e compartilhe o diretório da versão do contêiner do AlloyDB Omni que você quer fazer upgrade: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
Crie um diretório de dados para o contêiner do AlloyDB Omni PostgreSQL 16 em que os dados atualizados serão armazenados:
mkdir -p DATA_PATH/16/data chown 999 DATA_PATH/16/data
Inicie o contêiner em execução do AlloyDB Omni PostgreSQL 16 com todos os caminhos montados na mesma rede do contêiner anterior do AlloyDB Omni. Veja o exemplo a seguir:
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
Inicialize o novo diretório de dados para a versão atualizada do contêiner.
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 o cluster antigo tiver configurações especiais, por exemplo,
--data-checksum
ou--locale
, transmita esses parâmetros para criar o contêiner do AlloyDB Omni 16.Se você ativou a política de reinicialização no contêiner da versão anterior, desative-a, conforme mostrado no exemplo a seguir:
docker update --restart=no ALLOYDB15_CONTAINER
Execute
pg_upgrade --check
para verificar se o cluster está pronto para ser atualizado para o 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"
Depois que o comando
pg_upgrade --check
for concluído, você verá uma saída que termina comClusters are compatible
, o que indica que o cluster está pronto para ser atualizado. Esse comando também verifica e desliga o contêiner do AlloyDB Omni PostgreSQL 15. Depois que opg_upgrade --check
for concluído, os aplicativos não poderão mais se conectar ao banco de dados nem executar consultas.Execute
pg_upgrade
para copiar os dados atualizados no novo diretório de dados e verifique sepg_upgrade
foi concluído com êxito e se o contêiner do AlloyDB Omni PostgreSQL 15 foi encerrado: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
falhar, faça o rollback para o contêiner do AlloyDB Omni PostgreSQL 15 iniciando o contêiner do 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
Para determinar os motivos da falha no upgrade, revise os registros.
Se o upgrade for concluído, faça uma limpeza e reinicie o contêiner do 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
Copie
bin
e compartilhe o diretório da versão do contêiner do AlloyDB Omni que você quer fazer upgrade: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
Crie um diretório de dados para o contêiner do AlloyDB Omni PostgreSQL 16 em que os dados atualizados serão armazenados:
mkdir -p DATA_PATH/16/data chown 999 DATA_PATH/16/data
Inicie o contêiner em execução do AlloyDB Omni PostgreSQL 16 com todos os caminhos montados na mesma rede do contêiner anterior do AlloyDB Omni. Veja o exemplo a seguir:
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
Inicialize o novo diretório de dados para a versão atualizada do contêiner.
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 o cluster antigo tiver configurações especiais, por exemplo,
--data-checksum
ou--locale
, transmita esses parâmetros para criar o contêiner do AlloyDB Omni 16.Se você ativou a política de reinicialização no contêiner da versão anterior, desative-a, conforme mostrado no exemplo a seguir:
podman update --restart=no ALLOYDB15_CONTAINER
Execute
pg_upgrade --check
para verificar se o cluster está pronto para ser atualizado para o 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"
Depois que o comando
pg_upgrade --check
for concluído, você verá uma saída que termina comClusters are compatible
, o que indica que o cluster está pronto para ser atualizado. Esse comando também verifica e desliga o contêiner do AlloyDB Omni PostgreSQL 15. Depois que opg_upgrade --check
for concluído, os aplicativos não poderão mais se conectar ao banco de dados nem executar consultas.Execute
pg_upgrade
para copiar os dados atualizados no novo diretório de dados e verifique sepg_upgrade
foi concluído com êxito e se o contêiner do AlloyDB Omni PostgreSQL 15 foi encerrado: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
falhar, faça o rollback para o contêiner do AlloyDB Omni PostgreSQL 15 iniciando o contêiner do 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
Para determinar os motivos da falha no upgrade, revise os registros.
Se o upgrade for concluído, faça uma limpeza e reinicie o contêiner do 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
Fazer upgrade do servidor do AlloyDB Omni no nó em espera
Se o servidor do AlloyDB Omni for implantado com uma configuração de espera replicada ativa e
de streaming, não será possível executar pg_upgrade
no
nó de espera. Para fazer upgrade do servidor do AlloyDB Omni em um
nó de espera, recomendamos que, antes de fazer upgrade do AlloyDB Omni
no nó ativo, você verifique se não há atrasos de replicação no
nó de espera.
Para fazer upgrade do servidor standby do AlloyDB Omni, siga estas etapas gerais:
- Interrompa o contêiner do AlloyDB Omni em espera antes de fazer upgrade do nó ativo.
- Depois que o nó ativo for atualizado, sincronize o diretório de dados atualizado do
novo nó ativo para o nó em espera usando rsync.
Para mais informações sobre como fazer upgrade de um servidor standby replicado por streaming,
consulte
pg_upgrade
. - Inicie o contêiner usando a imagem do AlloyDB para PostgreSQL PostgreSQL 16 com o mesmo diretório de dados.
Se você estiver usando a replicação lógica, consulte Como fazer upgrade de dados via replicação.