Todos os produtos
Search
Central de documentação

ApsaraDB RDS:Upgrade a major version using blue-green deployment

Última atualização: Jun 26, 2026

O blue-green deployment atualiza a versão principal do mecanismo do ApsaraDB RDS for PostgreSQL ao restaurar a instância de origem em uma nova instância e executar o pg_upgrade para levar a nova instância à versão de destino. Se você realizar um cutover, o endpoint da instância de origem alternará automaticamente para a nova instância, sem necessidade de alterar a string de conexão na aplicação.

Para comparar todos os modos de atualização disponíveis, consulte Introdução às soluções de atualização de versão principal.

Pré-requisitos

Antes de começar, verifique se:

  • A instância executa o ApsaraDB RDS for PostgreSQL 16 ou versão anterior

  • A instância não é uma instância somente leitura nem uma instância de cluster dedicado

  • O Babelfish não está ativado na instância (o número da versão secundária do mecanismo não termina com babelfish)

Faturamento

Ao iniciar uma atualização com blue-green deployment, o sistema cria uma nova instância baseada na instância de origem. Ambas as instâncias são faturadas separadamente até que você libere a instância de origem.

Método de faturamento da instância de origem

Método de faturamento da nova instância

Assinatura ou pagamento conforme o uso

Pagamento conforme o uso

Serverless

Serverless

Após confirmar a estabilidade dos serviços na nova instância, converta o faturamento dela para assinatura e libere ou cancele a assinatura da instância de origem.

Importante

Observe os pontos abaixo antes de liberar a instância de origem:

  • Se a instância de origem for uma instância por assinatura ainda não expirada, a nova instância não herdará o tempo restante da assinatura. Liberar a instância de origem antecipadamente pode resultar em perda financeira. Para mais informações sobre as regras de reembolso, consulte Política de reembolso.

  • A nova instância não herda descontos aplicados à instância de origem. Verifique o valor específico do reembolso na página de cancelamento da instância antes de prosseguir.

  • Reembolsos para instâncias por assinatura não são processados em tempo real. O valor e o prazo do reembolso dependem da fatura real de cancelamento da assinatura.

Impactos potenciais

Analise os itens a seguir antes de iniciar a atualização.

Interrupção de serviço

Ao executar um blue-green deployment com cutover, a instância de origem torna-se somente leitura durante o processo, causando uma interrupção transitória de conexão. Realize a atualização fora dos horários de pico. Caso opte por não fazer o cutover, seus serviços não serão afetados.

  • Duração do modo somente leitura: Depende da quantidade de objetos no banco de dados. Execute SELECT count(1) FROM pg_class; para verificar essa contagem. Com milhões de objetos, o período somente leitura pode durar dezenas de minutos ou mais.

  • Duração da interrupção de conexão: Determinada pelo tempo de atualização do cache DNS no lado do cliente. Utilize a alternância de vSwitch para estimar esse valor antecipadamente.

  • Duração total da atualização: Varia conforme o número de objetos no banco de dados. Acompanhe o progresso no Task Hub.

Após o cutover, a instância de origem permanece somente leitura por padrão. Para permitir gravações novamente nela, defina o parâmetro rds_force_trans_ro_non_sup como off. Consulte Definir parâmetros da instância.

Caminho de atualização entre versões

Instâncias PostgreSQL 9.4 e 10 que utilizam discos locais de alto desempenho só podem ser atualizadas para discos em nuvem, tendo o PostgreSQL 14 como versão máxima direta. Para alcançar o PostgreSQL 15 ou superior, atualize primeiro para uma versão intermediária:

  • PostgreSQL 9.4: permite atualização para 10, 11, 12, 13 ou 14 como etapa intermediária

  • PostgreSQL 10: permite atualização para 11, 12, 13 ou 14 como etapa intermediária

Slots de replicação

  • Caso a instância de origem seja um publicador com slots de replicação, esses slots serão perdidos após a atualização.

  • Se a instância de origem for um assinante de slot de replicação, a atualização poderá causar problemas de sincronização de dados devido à preempção do slot. Consulte as Perguntas frequentes para saber como evitar isso.

Alterações de IP virtual

Depois de um cutover, o endereço IP virtual da nova instância muda. Verifique as configurações de firewall e quaisquer configurações de aplicação que referenciem diretamente o IP virtual. Para evitar essa complexidade, configure sua aplicação usando o endereço de conexão da instância em vez do IP virtual.

Alterações de parâmetros

  • Parâmetros incompatíveis com a versão de destino são excluídos automaticamente.

  • Parâmetros com valores fora do intervalo válido para a versão de destino são redefinidos para os valores padrão do modelo dessa versão.

  • Durante a atualização, o statement_timeout é temporariamente definido como 0 e restaurado ao valor original após a conclusão do processo.

Tarefas do DTS

Se a instância for origem ou destino do Data Transmission Service (DTS), recrie a tarefa do DTS após a atualização.

Compatibilidade de plugins

A atualização leva a instância automaticamente para a versão secundária mais recente do mecanismo. Verifique a compatibilidade dos plugins antes e depois da atualização.

Configurações não herdadas pela nova instância

A nova instância não herda o nome da instância de origem, as tags, as regras de alerta do CloudMonitor nem os dados de backup.

Etapa 1: Executar a verificação pré-atualização

  1. Faça login no console do ApsaraDB RDS. Na barra de navegação superior, selecione a região onde a instância está localizada. Encontre a instância e clique em seu ID.

  2. (Opcional) Se existirem instâncias somente leitura associadas à instância de origem, altere o endpoint da instância somente leitura na aplicação para o endpoint da instância primária durante o horário de menor movimento e, em seguida, exclua a instância somente leitura.

    Excluir as instâncias somente leitura antes da atualização é necessário porque nós somente leitura e slots de replicação não são transferidos automaticamente para a nova instância. Após a atualização, crie novas instâncias somente leitura na nova instância.
  3. No painel de navegação à esquerda, clique em Major Version Upgrade.

    Se Major Version Upgrade não estiver visível, verifique se sua instância atende aos pré-requisitos listados acima.
  4. Na aba Upgrade Check, clique em Create upgrade check report.

  5. Selecione a versão de destino, defina o Upgrade Mode como Blue-green Deployment e clique em OK. O status da instância mudará para Maintaining Instance. Após a conclusão da verificação, o status retornará para Running.

  6. Analise o resultado do relatório de verificação:

    • Success ou Warning: prossiga para a Etapa 2.

    • Failed: clique em View Information, corrija os problemas identificados e execute a verificação novamente.

    Importante
    • Para um resultado Warning, corrija todos os itens sinalizados e execute a verificação novamente até obter Success.

    • Se você criar um plugin na instância primária após uma verificação bem-sucedida, execute a verificação novamente antes de prosseguir.

Etapa 2: Atualizar a versão principal

  1. Clique na aba Upgrade Instance, leia o aviso, selecione uma versão em Select upgrade version e clique em Create Upgrade Task.

  2. Na caixa de diálogo, clique em OK.

  3. Na seção Create Major Engine Version Upgrade Task, confirme se o Upgrade Mode está definido como Blue-green Deployment e configure os seguintes parâmetros: Exemplos de cálculo de espaço de armazenamento:

    • Instância de origem: 100 GB totais, 70 GB usados, PL1 ESSD selecionado. Cálculo: 70 × 120% = 84 GB → arredondado para cima para 85 GB. Mínimo selecionável: 85 GB.

    • Instância de origem: 700 GB totais, 350 GB usados, PL2 ESSD selecionado. Cálculo: 350 × 120% = 420 GB, valor inferior ao mínimo de 500 GB do PL2. Mínimo selecionável: 500 GB.

    Parâmetro

    Descrição

    Storage type

    A nova instância suporta apenas Enhanced SSDs (ESSDs) e discos de desempenho premium. A classe de armazenamento deve corresponder à da instância de origem. Se a instância de origem usar um disco local de alto desempenho, a nova instância só poderá usar ESSDs. Ao alterar o nível de desempenho do ESSD (PL), a capacidade mínima de armazenamento se ajusta automaticamente com base no PL selecionado.

    Available zone, Primary instance switch, Standby instance switch

    Configure as instâncias primária e standby em zonas diferentes conforme necessário.

    Cutover configuration

    Escolha como o tráfego será alternado após a atualização: No cutting — o tráfego não é alternado automaticamente; geralmente usado para testar a compatibilidade do serviço antes da atualização oficial. Cutover — o tráfego é alternado automaticamente; normalmente usado para a atualização oficial após a confirmação da compatibilidade. O cutover não pode ser revertido. Durante o cutover, a instância de origem é definida como somente leitura. Para minimizar riscos, selecione No cutting na primeira tentativa. Após os testes, libere a nova instância, repita a atualização e selecione Cutover para a atualização oficial.

    Storage space

    Selecione a capacidade de armazenamento para a nova instância. A capacidade mínima selecionável é o menor valor entre: armazenamento usado da instância de origem × 120% (arredondado para cima para o 5 GB mais próximo) ou a capacidade total de armazenamento da instância de origem. Esse valor também deve atender ao armazenamento mínimo comprável para o PL do ESSD selecionado: PL1 = 20 GB, PL2 = 500 GB, PL3 = 1.500 GB. Para verificar o armazenamento usado, consulte a métrica Disk Storage (MB) em Monitoring and Alarms.

    Instance specification

    Selecione o tipo de instância para a nova instância. Para tipos disponíveis, consulte Lista de tipos de instância primária.

  4. Clique em Create now. O status da instância muda para Migration in Progress quando a tarefa de atualização começa. Acompanhe o progresso no Task Hub.

    Importante
    • Uma vez criada, uma tarefa de atualização não pode ser modificada ou excluída.

    • Enquanto a instância de origem estiver com o status Migration in Progress, operações de operação e manutenção (O&M), como modificar parâmetros, reiniciar ou liberar a instância, ficam indisponíveis.

    • Se aparecer um erro Insufficient Resources, alterne a Target Primary Zone e tente novamente.

  5. Verifique o resultado da atualização. Quando tanto a instância de origem quanto a nova instância exibirem o status Running, a atualização estará concluída.

    Blue-green deployment com cutover: o tráfego é alternado automaticamente para a nova instância após a atualização. Blue-green deployment sem cutover: o tráfego permanece na instância de origem após a atualização. Após a atualização, acesse a aba Upgrade History e clique em View Information na coluna Upgrade Log para ver a duração do modo somente leitura e o processo detalhado da atualização. A duração somente leitura é medida do Cutover Time ao Cutover End Time, não incluindo o período em que a instância fica inacessível devido à propagação do cache DNS. Para atualizações sem cutover, o sistema ainda registra o Cutover Time e o Cutover End Time para referência.

    Resultado da atualização

    Status da instância

    Significado

    Running

    Migration in Progress

    A tarefa de atualização está em execução

    Succeeded

    Running

    A tarefa de atualização foi bem-sucedida

Próximos passos

  1. Se você atualizou usando o método blue-green deployment (cutover), após confirmar a estabilidade dos serviços na nova instância, libere a instância de origem. Converta o método de faturamento da nova instância para assinatura para reduzir custos.

    Liberar uma instância por assinatura antes do vencimento pode resultar em perda financeira. A nova instância não herda descontos da instância de origem. Os reembolsos estão sujeitos à fatura real de cancelamento da assinatura e não são processados em tempo real.
  2. (Opcional) Se você excluiu uma instância somente leitura antes da atualização, recrie-a na nova instância:

    1. Criar uma instância somente leitura do PostgreSQL na nova instância.

    2. Na aplicação, atualize o endpoint para apontar para a nova instância somente leitura.

Referência de API

Operação de API

Descrição

UpgradeDBInstanceMajorVersionPrecheck

Executa uma verificação pré-atualização para uma atualização de versão principal

DescribeUpgradeMajorVersionPrecheckTask

Consulta o relatório de verificação pré-atualização

UpgradeDBInstanceMajorVersion

Atualiza a versão principal do mecanismo

DescribeUpgradeMajorVersionTasks

Consulta o histórico de tarefas de atualização de versão principal

Referências

Perguntas frequentes

Posso modificar a instância durante uma atualização de versão principal?

Não. A instância não pode ser modificada enquanto uma atualização está em andamento. Modificações só estão disponíveis após a conclusão da atualização.

Atualizações automáticas de versão principal são suportadas?

Não. As atualizações de versão principal devem ser acionadas manualmente.

Downgrades de versão principal são suportados?

Não. Não há suporte para downgrade após uma atualização de versão principal. Para executar uma versão inferior, adquira uma nova instância nessa versão e use o Data Transmission Service (DTS) para migrar seus dados.

Após uma atualização de versão principal, recebo um conflito raster_overviews ao criar uma view na nova instância. Como resolvo isso?

Esse problema ocorre quando a versão do PostGIS é anterior a 2.5.2 e você está atualizando do PostgreSQL 10 ou 11 para o PostgreSQL 12 sem antes atualizar o plugin PostGIS.

Etapa 1: Atualize o plugin PostGIS na instância de origem.

Execute o comando a seguir duas vezes para garantir que a atualização seja concluída com êxito:

SELECT PostGIS_Extensions_Upgrade();
SELECT PostGIS_Extensions_Upgrade();

Etapa 2: Escolha a correção com base no uso do plugin PostGIS Raster.

Se o plugin PostGIS Raster estiver em uso:

  1. Na instância de origem, desanexe a view raster_overviews da extensão e substitua-a por um placeholder:

    ALTER EXTENSION PostGIS_Raster DROP VIEW raster_overviews;
    CREATE OR REPLACE VIEW raster_overviews AS SELECT 1;
  2. Atualize a instância PostgreSQL para pelo menos o PostgreSQL 12.

  3. Após a atualização, recrie a view na nova instância:

    CREATE
    OR REPLACE VIEW raster_overviews AS
    SELECT
      current_database() AS o_table_catalog,
      n.nspname AS o_table_schema,
      c.relname AS o_table_name,
      a.attname AS o_raster_column,
      current_database() AS r_table_catalog,
      split_part(
        split_part(s.consrc, '''::name', 1),
        '''',
        2
      )::name AS r_table_schema,
      split_part(
        split_part(s.consrc, '''::name', 2),
        '''',
        2
      )::name AS r_table_name,
      split_part(
        split_part(s.consrc, '''::name', 3),
        '''',
        2
      )::name AS r_raster_column,
      trim(
        both
        from
          split_part(s.consrc, ',', 2)
      )::integer AS overview_factor
    FROM
      pg_class c,
      pg_attribute a,
      pg_type t,
      pg_namespace n,
      (
        SELECT
          connamespace,
          conrelid,
          conkey,
          pg_get_constraintdef(oid) As consrc
        FROM
          pg_constraint
      ) AS s
    WHERE
      t.typname = 'raster'::name
      AND a.attisdropped = false
      AND a.atttypid = t.oid
      AND a.attrelid = c.oid
      AND c.relnamespace = n.oid
      AND c.relkind = ANY(
        ARRAY[ 'r'::char, 'v'::char, 'm'::char,
        'f'::char ]
      )
      AND s.connamespace = n.oid
      AND s.conrelid = c.oid
      AND s.consrc LIKE '%_overview_constraint(%'
      AND NOT pg_is_other_temp_schema(c.relnamespace)
      AND has_table_privilege(c.oid, 'SELECT'::text);
    
    ALTER EXTENSION PostGIS_Raster ADD VIEW raster_overviews;

Se o plugin PostGIS Raster não estiver em uso:

  1. Remova o plugin na instância de origem:

    DROP EXTENSION PostGIS_Raster;
  2. Atualize a instância PostgreSQL para pelo menos o PostgreSQL 12.

Como evito inconsistência de dados causada por preempção de slot de replicação durante uma atualização?

Se a instância de origem for um assinante de slot de replicação, o slot poderá ser preemptado pela nova instância durante a atualização, o que pode causar inconsistência de dados.

Para manter os dados de assinatura na instância de origem (versão inferior): garanta que a instância de origem não falhe devido a carga excessiva durante a atualização, evitando que o slot de replicação seja preemptado. Após a conclusão da atualização, desative a assinatura na nova instância:

\c your_database
ALTER SUBSCRIPTION your_subscription_name DISABLE;

Para preservar os dados de assinatura na nova instância (versão superior): desative a assinatura na instância de origem antes de iniciar a atualização e, em seguida, ative-a na nova instância após a conclusão da atualização.

Desative na instância de origem:

\c your_database
ALTER SUBSCRIPTION your_subscription_name DISABLE;

Ative na nova instância:

\c your_database
ALTER SUBSCRIPTION your_subscription_name ENABLE;

Para mais informações, consulte Assinatura Lógica e Change Tracking.

Como trato a inconsistência de dados de assinatura após uma atualização?

Se a inconsistência já tiver ocorrido, use a seguinte abordagem para reconciliação:

  1. Na nova instância, exclua os dados da tabela afetada e recrie a assinatura com copy_data=true. Para detalhes, consulte ALTER SUBSCRIPTION.

  2. Use ON CONFLICT para importar dados da instância de origem. O exemplo a seguir mostra como lidar com diferentes cenários de conflito:

    CREATE TABLE my_tbl(id INT PRIMARY KEY, t TIMESTAMP, val TEXT);
    
    INSERT INTO my_tbl VALUES (1, CURRENT_TIMESTAMP, 'a');
    INSERT INTO my_tbl VALUES (2, CURRENT_TIMESTAMP, 'b');
    INSERT INTO my_tbl VALUES (3, CURRENT_TIMESTAMP, 'c');
    
    -- Newer timestamp: update the existing row
    INSERT INTO my_tbl VALUES (1, CURRENT_TIMESTAMP, 'd') ON CONFLICT(id) DO UPDATE
        SET t = excluded.t,
            val = excluded.val
        WHERE my_tbl.t < excluded.t;
    
    -- Older timestamp: keep the existing row
    INSERT INTO my_tbl VALUES (2, CURRENT_TIMESTAMP - '10 hours'::interval, 'e') ON CONFLICT(id) DO UPDATE
        SET t = excluded.t,
            val = excluded.val
        WHERE my_tbl.t < excluded.t;
    
    -- New row: insert directly
    INSERT INTO my_tbl VALUES (5, CURRENT_TIMESTAMP - '10 hours'::interval, 'f') ON CONFLICT(id) DO UPDATE
        SET t = excluded.t,
            val = excluded.val
        WHERE my_tbl.t < excluded.t;

Por que preciso excluir instâncias somente leitura antes da atualização?

Nós somente leitura e slots de replicação na instância de origem não são transferidos automaticamente para a nova instância após a atualização. Excluir a instância somente leitura antes da atualização evita conflitos de endpoint e garante um cutover limpo. Após a atualização, crie uma nova instância somente leitura na nova instância e atualize o endpoint da aplicação adequadamente.