pglogical verificando e validando os bancos de dados do provedor e do assinante.
Antes de começar
Antes de começar a monitorar e solucionar problemas de implementações do pglogical, verifique os bancos de dados do provedor e do assinante, entenda a implementação do pglogical e valide como ela está configurada.
Para mais informações sobre a extensão pglogical, consulte Sobre o pglogical.
Para informações sobre replicação de dados usando pglogical, consulte
Replicar dados entre o AlloyDB para PostgreSQL e o AlloyDB Omni e Replicar dados entre o AlloyDB Omni e outros bancos de dados.
Verificar as configurações de parâmetros do pglogical, da replicação e do AlloyDB Omni
Vários parâmetros de configuração afetam a operação da extensão pglogical, e você pode verificar isso nos bancos de dados do provedor e do assinante. Os valores dos parâmetros podem variar.
Mostrar a configuração atual de parâmetros específicos do
pglogical:SELECT name, setting, source, short_desc FROM pg_catalog.pg_settings WHERE name LIKE '%pglogical%' AND name NOT LIKE '%alloydb%' ORDER BY category, name;Mostrar outros parâmetros relacionados à replicação lógica:
SELECT name, setting, source, short_desc FROM pg_catalog.pg_settings WHERE name IN ('wal_level', 'max_worker_processes', 'max_replication_slots', 'max_wal_senders', 'shared_preload_libraries', 'track_commit_timestamp') ORDER BY name;Mostrar parâmetros específicos do AlloyDB Omni:
SELECT name, setting, source, short_desc FROM pg_catalog.pg_settings WHERE name LIKE '%alloydb%' ORDER BY category, name;
Listar nós na configuração
Listar nós locais e remotos na configuração de replicação do pglogical:
SELECT node_id, if_nodeid AS node_id, if_name AS node_name, if_dsn AS dsn FROM pglogical.node_interface LEFT JOIN pglogical.local_node ON (node_id = if_nodeid AND node_local_interface = if_id) ORDER BY node_name;Se a coluna
node_idforNOT NULL, esse será o nó local.Revise as informações
dsnem detalhes. Qualquer informação incorreta ou desatualizada da string de conexão pode resultar em falhas na replicação. Para informações sobredsnsolução de problemas, consulte Resolver problemas de replicação de assinatura.
Verificar o status da assinatura e o ponto de replicação da tabela
O status da assinatura é sempre verificado no banco de dados do assinante. A assinatura mostra um status de initializing ou replicating". Ela também mostra um status de down.
Para mais informações sobre o status down, consulte Resolver problemas de replicação de assinatura.
Listar as assinaturas, o status e as configurações atuais no banco de dados atual:
SELECT s.sub_name AS subscription_name, n1.node_name AS origin_name, n2.node_name AS target_name, x.status, sub_slot_name, sub_replication_sets, sub_forward_origins, sub_apply_delay, sub_force_text_transfer, sub_enabled AS enabled FROM pglogical.subscription s, (SELECT subscription_name, status FROM pglogical.show_subscription_status()) AS x, pglogical.node n1, pglogical.node n2 WHERE s.sub_origin = n1.node_id AND s.sub_target = n2.node_id AND s.sub_name = x.subscription_name ORDER BY s.sub_name;O resultado será assim:
-[ RECORD 1 ]-----------+-------------------------------------- subscription_id | 3072625608 subscription_name | test_sub_1 origin_name | provider target_name | subscriber status | replicating sub_slot_name | pgl_my_test_db_provider_test_sub_1 sub_replication_sets | {default,default_insert_only,ddl_sql} sub_forward_origins | {all} sub_apply_delay | 00:00:00 sub_force_text_transfer | f enabled | t my_test_db=#Listar as tabelas que estão sendo replicadas e o número de sequência de registro (LSN) atual delas pela assinatura:
SELECT sync_nspname||'.'||sync_relname AS table_name, sync_status, sync_statuslsn FROM pglogical.local_sync_status WHERE sync_relname IS NOT NULL ORDER BY table_name;O resultado será assim:
table_name | sync_status | sync_statuslsn ---------------------+-------------+---------------- public.test_table_1 | r | 0/B891BC0 (1 row) my_test_db=#A coluna
sync_statuslsnmostra para qual LSN a tabela está sincronizada. Você pode comparar isso ao LSN no banco de dados do provedor para avaliar o atraso de replicação.Verificar o status de replicação de uma tabela específica:
SELECT * FROM pglogical.show_subscription_table('test_sub_1','test_table_1');
Verificar os detalhes do conjunto de replicação no provedor
Listar os conjuntos de replicação atuais no banco de dados do provedor e verificar os itens replicados:
SELECT set_name, node_name, replicate_insert, replicate_update, replicate_delete, replicate_truncate FROM pglogical.replication_set JOIN pglogical.node ON set_nodeid = node_id ORDER BY set_name, node_name;Listar tabelas e sequências replicadas:
-- Table details: SELECT set_name, set_reloid AS table_name, set_att_list, set_row_filter FROM pglogical.replication_set NATURAL JOIN pglogical.replication_set_table ORDER BY set_name, table_name; -- Sequence details: SELECT set_name, set_seqoid AS sequence_name FROM pglogical.replication_set NATURAL JOIN pglogical.replication_set_seq ORDER BY set_name, sequence_name;
Verificar as informações de replicação e o atraso do slot no provedor
Verificar o status de cada assinante gerando a visualização
pg_stat_replicationno banco de dados do provedor:SELECT application_name, state, sync_state, client_addr, client_hostname, pg_wal_lsn_diff(pg_current_wal_lsn(),sent_lsn) AS sent_lag, pg_wal_lsn_diff(sent_lsn,flush_lsn) AS receiving_lag, pg_wal_lsn_diff(flush_lsn,replay_lsn) AS replay_lag, pg_wal_lsn_diff(pg_current_wal_lsn(),replay_lsn) AS total_lag, now()-reply_time AS reply_delay FROM pg_stat_replication ORDER BY client_hostname;O resultado será assim:
-[ RECORD 1 ]----+------------------------------ application_name | test_sub_1 state | streaming sync_state | async client_addr | 10.45.0.80 client_hostname | sent_lag | 0 receiving_lag | 0 replay_lag | 0 total_lag | 0 reply_delay | 00:00:26.203433 my_test_db=#Anote a coluna
reply_delay, que mostra o horário em que ela recebeu a última atualização do banco de dados do assinante.Monitore o atraso de replicação do slot de replicação no provedor, porque o
pglogicalcria slots de replicação no banco de dados do provedor:SELECT slot_name, slot_type, database, active, COALESCE(pg_wal_lsn_diff(pg_current_wal_lsn(),restart_lsn),0) AS restart_lag, COALESCE(pg_wal_lsn_diff(pg_current_wal_lsn(),confirmed_flush_lsn),0) AS confirmed_flush_lag FROM pg_replication_slots WHERE plugin like '%pglogical%' ORDER BY slot_name;O resultado será assim:
-[ RECORD 1 ]-------+----------------------------------- slot_name | pgl_my_test_db_provider_test_sub_1 slot_type | logical database | my_test_db active | t restart_lag | 56 confirmed_flush_lag | 0 my_test_db=#
Resolver problemas de replicação de assinatura
A assinatura verificada no banco de dados do assinante precisa mostrar um status de replicating ou initializing se a assinatura tiver sido criada recentemente.
Se o status for down, ocorreu um problema.
O status down geralmente é mostrado depois que a replicação tenta iniciar, mas falha. Isso ocorre devido a problemas de conectividade causados pela configuração dsn ou permissões de banco de dados ausentes, que estão no provedor ou no assinante.
Use a Análise de registros e inspecione os arquivos de registro do PostgreSQL em Google Cloud quando Google Cloud o AlloyDB for um dos endpoints, para mais informações que possam indicar a causa do problema. Os arquivos de registro fornecem detalhes do problema, incluindo detalhes específicos sobre permissões ausentes.
Verifique o registro do PostgreSQL no servidor do AlloyDB Omni:
Docker
docker logs CONTAINER_NAMESubstitua
CONTAINER_NAMEpelo nome que você atribuiu ao contêiner do AlloyDB Omni ao instalá-lo.Podman
podman logs CONTAINER_NAMESubstitua
CONTAINER_NAMEpelo nome que você atribuiu ao contêiner do AlloyDB Omni ao instalá-lo.Solucione problemas da configuração
dsne verifique se a conectividade de rede não é a origem do problema:- Copie a string de conexão
dsne tente uma conexão manual usandopsqle a mesma string. Se a sessãopsqlnão puder se conectar, isso indica o seguinte:- Um problema de rede.
- Um endereço IP, nome de usuário ou senha incorretos.
- Um firewall de bloqueio.
- O arquivo
pg_hba.confdo outro cluster não está configurado corretamente.
- Copie a string de conexão
Sincronize novamente uma tabela se não quiser remover e recriar a assinatura depois de tomar ações corretivas:
SELECT pglogical.alter_subscription_resynchronize_table(subscription_name := 'test_sub_1',relation := 'table_name');Como alternativa, remova a assinatura e recrie-a:
SELECT pglogical.drop_subscription(subscription_name := 'test_sub_1');
A seguir
- Alternância e failover com replicação
pglogical - Replicar dados entre o Google Cloud AlloyDB e o AlloyDB Omni
- Replicar dados entre o AlloyDB Omni e outros bancos de dados