Ir para o conteúdo

Como uso a replicação lógica para fazer upgrade do meu cluster de banco de dados (DB) da edição compatível com o PostgreSQL do Amazon Aurora?

6 minuto de leitura
0

Quero usar a replicação lógica para fazer upgrade do meu cluster de banco de dados (DB) da edição do Amazon Aurora compatível com PostgreSQL.

Breve descrição

Para usar a replicação lógica para fazer upgrade de clusters de banco de dados (DB) da edição compatível com o PostgreSQL do Aurora, configure a replicação entre o cluster de origem e o novo cluster de destino. Em seguida, migre gradualmente as alterações de dados e troque as aplicações para o novo cluster.

Resolução

Prepare o cluster de origem

Conclua as etapas a seguir:

  1. Defina o parâmetro rds.logical_replication como 1 em seu grupo de parâmetros de cluster de banco de dados personalizado.

  2. Execute a consulta a seguir para verificar se wal_level é logical e se rds.logical_replication está ativado:

    SELECT name,setting FROM pg_settings WHERE name IN ('wal_level','rds.logical_replication');

    Exemplo de saída:

    name                    | setting
    ------------------------+---------
    rds.logical_replication | on
    wal_level              | logical
    (2 rows)
  3. Execute o comando a seguir para criar uma publicação em seu banco de dados:

    CREATE PUBLICATION my_publication FOR ALL TABLES;

    Observação: substitua my_publication pelo nome da sua publicação.

  4. Execute a consulta a seguir para recuperar informações da publicação:

    SELECT * FROM pg_publication;

    Exemplo de saída:

     oid   | pubname        | pubowner | puballtables | pubinsert | pubupdate | pubdelete | pubtruncate | pubviaroot
    -------+----------------+----------+--------------+-----------+-----------+-----------+-------------+------------
     20493 | my_publication | 16400    | t            | t         | t         | t         | t           | f
    (1 row)
  5. Execute o comando a seguir para criar um slot de replicação no banco de dados:

    SELECT pg_create_logical_replication_slot('my_replication_slot', 'pgoutput');

    Exemplo de saída para pg_create_logical_replication_slot:

     pg_create_logical_replication_slot
    ------------------------------------
     (my_replication_slot,0/6EC7260)
    (1 row)

    Observação: substitua my_replication_slot pelo nome do seu slot de replicação.

  6. Execute o comando a seguir para obter a lista de slots de replicação que estão atualmente no cluster de banco de dados e seu status:

    SELECT * FROM pg_replication_slots;

    Exemplo de saída para pg_replication_slots:

     slot_name            | plugin   | slot_type | datoid | database | temporary | active | active_pid | xmin | catalog_xmin | restart_lsn | confirmed_flush_lsn | wal_status | safe_wal_size | two_phase
    ---------------------+----------+-----------+--------+----------+-----------+--------+------------+------+--------------+-------------+---------------------+------------+---------------+-----------
     my_replication_slot | pgoutput | logical   | 16401  | test     | f         | f      |            |      | 308479       | 0/6EC7208  | 0/6EC7260          | reserved   |               | f
    (1 row)

Clone o cluster de origem

Use o console do Amazon Relational Database Service (Amazon RDS) ou a AWS Command Line Interface (AWS CLI) para criar um clone do cluster de banco de dados de origem compatível com o PostgreSQL do Aurora.

Prepare o clone para um upgrade

Para obter mais informações, consulte Como preparar o clone para uma atualização em Atualizar o Aurora PostgreSQL para uma nova versão principal.

Faça upgrade do cluster para uma nova versão

Para obter mais informações, consulte Como atualizar um cluster para uma nova versão principal em Atualizar o Aurora PostgreSQL para uma nova versão principal.

Prepare o clone para replicação

Conclua as etapas a seguir:

  1. Quando o clone ficar disponível após o upgrade, use psql para se conectar ao cluster e, em seguida, execute o seguinte comando para criar a assinatura:

    CREATE SUBSCRIPTION my_subscription
    CONNECTION 'postgres://admin_user_name:admin_user_password@source_instance_URL/database'
    PUBLICATION my_publication
    WITH (copy_data = false,
          create_slot = false,
          enabled = false,
          connect = true,
          slot_name = 'my_replication_slot');

    Observação: substitua admin_user_name pelo nome de usuário do seu cluster de origem e admin_user_password pela senha do seu cluster de origem. Além disso, substitua source_instance_URL pelo endpoint do seu cluster de origem e database pelo nome do seu banco de dados.

  2. Execute a consulta a seguir para recuperar a origem de replicação que você criou:

    SELECT * FROM pg_replication_origin;

    Exemplo de saída para pg_replication_origin:

     roident | roname
    ---------+----------
     1       | pg_32783
    (1 row)
  3. Execute a consulta a seguir para recuperar informações sobre a assinatura de replicação lógica:

    SELECT * FROM pg_subscription;

    Exemplo de saída para pg_subscription:

     oid   | subdbid | subskiplsn | subname          | subowner | subenabled | subbinary | substream | subtwophasestate | subdisableonerr | subpasswordrequired | subrunasowner | subconninfo                                                                              | subslotname           | subsynccommit | subpublications    | suborigin
    -------+---------+------------+-----------------+----------+------------+-----------+-----------+------------------+-----------------+---------------------+---------------+------------------------------------------------------------------------------------------------+---------------------+---------------+------------------+-----------
     32783 | 16401   | 0/0        | my_subscription | 16400    | f          | f         | f         | d                | f               | t                   | f             | postgres://admin_user_name:admin_user_password@source_instance_URL/database                  | my_replication_slot   | off           | {my_publication}  | any
    (1 row)
  4. Execute o comando a seguir para especificar o ponto inicial na sequência de log para replicação:

    SELECT pg_replication_origin_advance('roname', 'log_sequence_number');

    Observação: substitua roname pelo identificador que a visualização pg_replication_origin retornou. Substitua log_sequence_number pelo seu número de sequência de log.
    Exemplo de saída:

     pg_replication_origin_advance
    ------------------------------
    
    (1 row)
  5. Execute o comando a seguir para ativar a replicação lógica:

    ALTER SUBSCRIPTION my_subscription ENABLE;

    Observação: substitua my_subscription pelo nome da sua assinatura.
    Exemplo de saída:

    ALTER SUBSCRIPTION
  6. Execute o comando a seguir para confirmar se a replicação funciona:

    SELECT now() AS CURRENT_TIME,
           slot_name,
           active,
           active_pid,
           pg_size_pretty(pg_wal_lsn_diff(pg_current_wal_lsn(), confirmed_flush_lsn)) AS diff_size,
           pg_wal_lsn_diff(pg_current_wal_lsn(), confirmed_flush_lsn) AS diff_bytes
    FROM pg_replication_slots
    WHERE slot_type = 'logical';

    Exemplo de saída:

         current_time      |      slot_name       | active | active_pid | diff_size | diff_bytes
    ----------------------+---------------------+--------+------------+-----------+------------
     2024-01-20 10:30:45 | my_replication_slot | t      | 12345      | 16 MB     | 16777216
    (1 row)
  7. (Opcional) Execute o seguinte comando para monitorar o atraso de replicação:

    SELECT now() AS CURRENT_TIME,
           slot_name,
           active,
           active_pid,
           pg_size_pretty(pg_wal_lsn_diff(pg_current_wal_lsn(), confirmed_flush_lsn)) AS diff_size,
           pg_wal_lsn_diff(pg_current_wal_lsn(), confirmed_flush_lsn) AS diff_bytes
    FROM pg_replication_slots
    WHERE slot_type = 'logical';

    Exemplo de saída:

    -[ RECORD 1 ]+------------------------------
    current_time | 2025-10-05 22:07:16.077928+00
    slot_name    | my_replication_slot
    active       | t
    active_pid   | 5392
    diff_size    | 0 bytes
    diff_bytes   | 0

    Observação: quando os valores anteriores chegam a 0, a réplica corresponde à instância de banco de dados de origem.

Execute tarefas pós-atualização

Para obter mais informações, consulte Executar tarefas de pós-atualização.

Informações relacionadas

Como uso replicação lógica para replicar tabelas entre minhas instâncias de banco de dados Amazon RDS para PostgreSQL?

Using logical replication to replicate managed Amazon RDS for PostgreSQL and Amazon Aurora to self-managed PostgreSQL (Usando replicação lógica para replicar o Amazon RDS para PostgreSQL gerenciado e o Amazon Aurora para o PostgreSQL autogerenciado)

AWS OFICIALAtualizada há 6 meses