Atualize para a versão 16.8.0 do AlloyDB Omni numa VM

Selecione uma versão da documentação:

Esta página descreve como atualizar os seus contentores baseados no AlloyDB Omni PostgreSQL 15 para o AlloyDB Omni PostgreSQL 16 através do pg_upgrade. As instruções nesta página descrevem os passos de atualização para o AlloyDB Omni implementado como um servidor autónomo e para o AlloyDB Omni configurado como nós de espera replicados. A utilização de pg_upgrade ajuda a garantir que a atualização é concluída sem perda de dados.

Para mais informações sobre as opções de atualização do PostgreSQL, consulte o artigo pg_upgrade.

Antes de começar

  • Antes de iniciar a atualização, recomendamos que faça uma cópia de segurança completa do cluster da base de dados.
  • Para garantir que o serviço AlloyDB Omni 15 está 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 é suportada no AlloyDB Omni PostgreSQL 16.8.0. Se pg_squeeze estiver na sua instalação do AlloyDB Omni 15, tem de remover a extensão antes de fazer a atualização para o AlloyDB Omni 16.

    Se instalou extensões personalizadas além do AlloyDB Omni, certifique-se de que essas extensões personalizadas também estão instaladas na imagem 16.8.0. Verifique 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 estiver a atualizar a partir da versão 15.5.2 ou anterior do AlloyDB Omni, tem de atualizar primeiro 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.

Atualize o AlloyDB Omni num ambiente de contentor do Docker

Para atualizar do AlloyDB Omni PostgreSQL 15 para o AlloyDB Omni PostgreSQL 16.8.0 num ambiente de contentor do Docker ou Podman, siga estes passos:

Docker

  1. Copie bin e partilhe o diretório da versão do contentor do AlloyDB Omni que quer atualizar:

    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 novo diretório de dados para o contentor do AlloyDB Omni PostgreSQL 16 onde os dados atualizados vão ser armazenados:

    mkdir -p DATA_PATH/16/data
    chown 999 DATA_PATH/16/data
    
  3. Inicie o contentor do AlloyDB Omni PostgreSQL 16 em execução com todos os caminhos montados na mesma rede que o contentor do AlloyDB Omni anterior. Veja o exemplo seguinte:

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

    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 definições especiais, por exemplo, --data-checksum ou --locale, também tem de transmitir esses parâmetros para criar o contentor do AlloyDB Omni 16.

  5. Se ativou a política de reinício no contentor da versão anterior, tem de desativar a política de reinício, conforme mostrado no exemplo seguinte:

    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"
    

    Após a conclusão do comando pg_upgrade --check, é apresentado um resultado que termina com Clusters are compatible, o que indica que o cluster está pronto para ser atualizado. Este comando também verifica e encerra o contentor do AlloyDB Omni PostgreSQL 15. Após a conclusão da pg_upgrade --check, as aplicações já não podem estabelecer ligação à base de dados nem executar consultas.

  7. Execute pg_upgrade para copiar os dados atualizados para o novo diretório de dados e, em seguida, verifique se pg_upgrade foi concluído com êxito e se o contentor do AlloyDB Omni PostgreSQL 15 foi terminado:

    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 o pg_upgrade falhar, reverta para o contentor do AlloyDB Omni PostgreSQL 15 iniciando o contentor 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 na atualização, reveja os registos.

  9. Se a atualização for bem-sucedida, limpe e, em seguida, reinicie o contentor 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 partilhe o diretório da versão do contentor do AlloyDB Omni que quer atualizar:

    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 novo diretório de dados para o contentor do AlloyDB Omni PostgreSQL 16 onde os dados atualizados vão ser armazenados:

    mkdir -p DATA_PATH/16/data
    chown 999 DATA_PATH/16/data
    
  3. Inicie o contentor do AlloyDB Omni PostgreSQL 16 em execução com todos os caminhos montados na mesma rede que o contentor do AlloyDB Omni anterior. Veja o exemplo seguinte:

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

    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 definições especiais, por exemplo, --data-checksum ou --locale, também tem de transmitir esses parâmetros para criar o contentor do AlloyDB Omni 16.

  5. Se ativou a política de reinício no contentor da versão anterior, tem de desativar a política de reinício, conforme mostrado no exemplo seguinte:

    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"
    

    Após a conclusão do comando pg_upgrade --check, é apresentado um resultado que termina com Clusters are compatible, o que indica que o cluster está pronto para ser atualizado. Este comando também verifica e encerra o contentor do AlloyDB Omni PostgreSQL 15. Após a conclusão da pg_upgrade --check, as aplicações já não podem estabelecer ligação à base de dados nem executar consultas.

  7. Execute pg_upgrade para copiar os dados atualizados para o novo diretório de dados e, em seguida, verifique se pg_upgrade foi concluído com êxito e se o contentor do AlloyDB Omni PostgreSQL 15 foi terminado:

    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 o pg_upgrade falhar, reverta para o contentor do AlloyDB Omni PostgreSQL 15 iniciando o contentor 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 na atualização, reveja os registos.

  9. Se a atualização for bem-sucedida, limpe e, em seguida, reinicie o contentor 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
    

Atualize o servidor AlloyDB Omni no nó em espera

Se o seu servidor AlloyDB Omni estiver implementado com uma configuração de standby replicada ativa e de streaming, não pode executar o pg_upgrade no nó de standby. Para atualizar o servidor AlloyDB Omni num nó de espera, recomendamos que, antes de atualizar o AlloyDB Omni no nó ativo, se certifique de que não existem atrasos na replicação no nó de espera.

Para atualizar o servidor AlloyDB Omni em espera, siga estes passos de alto nível:

  1. Pare o contentor do AlloyDB Omni em modo de espera antes de atualizar o nó ativo.
  2. Depois de atualizar o nó ativo, sincronize o diretório de dados atualizado do novo nó ativo para o nó de espera através do comando rsync. Para mais informações sobre a atualização de um servidor de reserva replicado de streaming, consulte pg_upgrade.
  3. Inicie o contentor com a imagem do PostgreSQL 16 do AlloyDB for PostgreSQL usando o mesmo diretório de dados.

Se estiver a usar a replicação lógica, consulte o artigo Atualizar dados através da replicação.