Fazer upgrade para a versão 16.8.0 do AlloyDB Omni em uma VM

Selecione uma versão da documentação:

Nesta página, descrevemos como fazer upgrade dos contêineres baseados no PostgreSQL 15 do AlloyDB Omni para o PostgreSQL 16 do AlloyDB Omni usando 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. Se pg_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

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

  5. 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
    
  6. 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 com Clusters 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 o pg_upgrade --check for concluído, os aplicativos não poderão mais se conectar ao banco de dados nem executar consultas.

  7. Execute pg_upgrade para copiar os dados atualizados no novo diretório de dados e verifique se pg_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
    
  8. 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.

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

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

  5. 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
    
  6. 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 com Clusters 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 o pg_upgrade --check for concluído, os aplicativos não poderão mais se conectar ao banco de dados nem executar consultas.

  7. Execute pg_upgrade para copiar os dados atualizados no novo diretório de dados e verifique se pg_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
    
  8. 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.

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

  1. Interrompa o contêiner do AlloyDB Omni em espera antes de fazer upgrade do nó ativo.
  2. 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.
  3. 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.