Restabelecer a replicação lógica após uma atualização principal - Amazon Relational Database Service

Restabelecer a replicação lógica após uma atualização principal

Antes de realizar uma atualização de versão principal de uma instância de banco de dados do RDS para PostgreSQL que está sendo configurada como um nó de editor para replicação lógica, você deve eliminar todos os slots de replicação, mesmo aqueles que não estão ativos. Recomendamos que você desvie temporariamente as transações do banco de dados do nó do editor, elimine os slots de replicação, atualize a instância de banco de dados do RDS para PostgreSQL e, depois, restabeleça e reinicie a replicação.

Os slots de replicação são hospedados somente no nó do editor. O nó de assinante do RDS para PostgreSQL em um cenário de replicação lógica não tem slots a serem descartados, mas não pode ser atualizado para uma versão principal enquanto estiver designado como um nó de assinante com uma assinatura do editor. Antes de atualizar o nó de assinante do RDS para PostgreSQL, elimine a assinatura e o nó. Para obter mais informações, consulte Gerenciar slots de replicação lógica para RDS para PostgreSQL.

Determinar se a replicação lógica foi interrompida

Você pode determinar se o processo de replicação foi interrompido consultando o nó do editor ou o nó do assinante da forma a seguir.

Como conferir o nó do editor
  • Use psql para se conectar ao nó do editor e, depois, consultar a função pg_replication_slots. Observe o valor na coluna ativa. Normalmente, isso retornará t (true) mostrando que a replicação está ativa. Se a consulta retornar f (false), é uma indicação de que a replicação para o assinante foi interrompida.

    SELECT slot_name,plugin,slot_type,active FROM pg_replication_slots; slot_name | plugin | slot_type | active -------------------------------------------+------------------+-----------+-------- pgl_labdb_docs_labcb4fa94_docs_lab3de412c | pglogical_output | logical | f (1 row)
Como conferir o nó do assinante

No nó do assinante, você pode conferir o status da replicação de três maneiras diferentes.

  • Examine os logs do PostgreSQL no nó do assinante para encontrar mensagens de falha. O log identifica falhas com mensagens que incluem o código de saída 1, conforme mostrado a seguir.

    2022-07-06 16:17:03 UTC::@:[7361]:LOG: background worker "pglogical apply 16404:2880255011" (PID 14610) exited with exit code 1 2022-07-06 16:19:44 UTC::@:[7361]:LOG: background worker "pglogical apply 16404:2880255011" (PID 21783) exited with exit code 1
  • Consulte a função pg_replication_origin. Conecte-se ao banco de dados no nó do assinante usando psql e consulte a função pg_replication_origin da forma a seguir.

    SELECT * FROM pg_replication_origin; roident | roname ---------+-------- (0 rows)

    O conjunto de resultados vazio significa que a replicação foi interrompida. Normalmente, você deve ver a saída da forma a seguir.

    roident | roname ---------+---------------------------------------------------- 1 | pgl_labdb_docs_labcb4fa94_docs_lab3de412c (1 row)
  • Consulte a função pglogical.show_subscription_status conforme exibido no exemplo a seguir.

    SELECT subscription_name,status,slot_name FROM pglogical.show_subscription_status(); subscription_name | status | slot_name ---====----------------+--------+------------------------------------- docs_lab_subscription | down | pgl_labdb_docs_labcb4fa94_docs_lab3de412c (1 row)

    Essa saída mostra que a replicação foi interrompida. Seu status é down. Normalmente, a saída mostra o status como replicating.

Se seu processo de replicação lógica tiver sido interrompido, você poderá restabelecer a replicação seguindo estas etapas.

Como restabelecer a replicação lógica entre os nós do editor e do assinante

Para restabelecer a replicação, primeiro você desconecta o assinante do nó do editor e depois restabelece a assinatura, conforme descrito nestas etapas.

  1. Conecte-se ao nó do assinante usando psql da forma a seguir.

    psql --host=222222222222.aws-region.rds.amazonaws.com --port=5432 --username=postgres --password --dbname=labdb
  2. Desative a assinatura usando a função pglogical.alter_subscription_disable.

    SELECT pglogical.alter_subscription_disable('docs_lab_subscription',true); alter_subscription_disable ---------------------------- t (1 row)
  3. Obtenha o identificador do nó do editor consultando a pg_replication_origin da forma a seguir.

    SELECT * FROM pg_replication_origin; roident | roname ---------+------------------------------------- 1 | pgl_labdb_docs_labcb4fa94_docs_lab3de412c (1 row)
  4. Use a resposta da etapa anterior com o comando pg_replication_origin_create para atribuir o identificador que pode ser usado pela assinatura quando restabelecida.

    SELECT pg_replication_origin_create('pgl_labdb_docs_labcb4fa94_docs_lab3de412c'); pg_replication_origin_create ------------------------------ 1 (1 row)
  5. Ative a assinatura passando seu nome com um status de true, conforme exibido no exemplo a seguir.

    SELECT pglogical.alter_subscription_enable('docs_lab_subscription',true); alter_subscription_enable --------------------------- t (1 row)

Consulte o status do nó. Seu status deve ser replicating conforme mostrado neste exemplo.

SELECT subscription_name,status,slot_name FROM pglogical.show_subscription_status(); subscription_name | status | slot_name -------------------------------+-------------+------------------------------------- docs_lab_subscription | replicating | pgl_labdb_docs_lab98f517b_docs_lab3de412c (1 row)

Confira o status do slot de replicação do assinante no nó do editor. A coluna active do slot deve retornar t (true), indicando que a replicação foi restabelecida.

SELECT slot_name,plugin,slot_type,active FROM pg_replication_slots; slot_name | plugin | slot_type | active -------------------------------------------+------------------+-----------+-------- pgl_labdb_docs_lab98f517b_docs_lab3de412c | pglogical_output | logical | t (1 row)