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çãopg_replication_slots
. Observe o valor na coluna ativa. Normalmente, isso retornarát
(true) mostrando que a replicação está ativa. Se a consulta retornarf
(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 usandopsql
e consulte a funçãopg_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 comoreplicating
.
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.
-
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
-
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)
-
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)
-
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)
-
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)