pglogical
controllando e convalidando i database
del fornitore e dell'abbonato.
Prima di iniziare
Prima di iniziare a monitorare e risolvere i problemi relativi alle implementazioni di pglogical
, controlla
i database del fornitore e dell'abbonato, comprendi l'implementazione di pglogical
e verifica la sua configurazione.
Per saperne di più sull'estensione pglogical
, consulta Informazioni su pglogical
.
Per informazioni sulla replica dei dati utilizzando pglogical
, consulta Replica dei dati tra AlloyDB per PostgreSQL e AlloyDB Omni e Replica dei dati tra AlloyDB Omni e altri database.
Controlla le impostazioni di pglogical
, della replica e dei parametri di AlloyDB Omni
Diversi parametri di configurazione influiscono sul funzionamento dell'estensione pglogical e puoi verificarlo nei database del fornitore e del sottoscrittore. Tieni presente che i valori dei parametri potrebbero variare.
Mostra l'impostazione attuale dei parametri specifici di
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;
Mostra altri parametri correlati alla replica logica:
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;
Mostra i parametri specifici di AlloyDB Omni:
SELECT name, setting, source, short_desc FROM pg_catalog.pg_settings WHERE name LIKE '%alloydb%' ORDER BY category, name;
Elenca i nodi nella configurazione
Elenca i nodi locali e remoti nella configurazione della replica 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 la colonna
node_id
èNOT NULL
, si tratta del nodo locale.Esamina in dettaglio le informazioni relative a
dsn
. Informazioni sulla stringa di connessione errate o non aggiornate possono causare errori di replica. Per informazioni sulla risoluzione dei problemi relativi adsn
, vedi Risolvere i problemi relativi alla replica degli abbonamenti.
Controllare lo stato dell'abbonamento e il punto di replica della tabella
Lo stato dell'abbonamento viene sempre verificato dal database degli abbonati. L'abbonamento
mostra lo stato initializing
o replicating
". Mostra anche lo stato down
.
Per ulteriori informazioni sullo stato down
, consulta Risolvere i problemi relativi alla replica delle iscrizioni.
Elenca gli abbonamenti, il loro stato e le impostazioni attuali nel database corrente:
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;
L'output è simile al seguente:
-[ 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=#
Elenca le tabelle attualmente replicate e il relativo numero di sequenza di log (LSN) corrente per l'abbonamento:
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;
L'output è simile al seguente:
table_name | sync_status | sync_statuslsn ---------------------+-------------+---------------- public.test_table_1 | r | 0/B891BC0 (1 row) my_test_db=#
La colonna
sync_statuslsn
mostra con quale LSN è sincronizzata la tabella. Puoi confrontare questo valore con l'LSN nel database del fornitore per valutare il ritardo di replica.Controlla lo stato della replica per una tabella specifica:
SELECT * FROM pglogical.show_subscription_table('test_sub_1','test_table_1');
Verifica i dettagli del set di replica sul fornitore
Elenca i set di replica correnti nel database del fornitore e controlla gli elementi replicati:
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;
Elenca le tabelle e le sequenze replicate:
-- 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;
Controlla le informazioni di replica e il ritardo dello slot sul provider
Controlla lo stato di ogni abbonato generando la visualizzazione
pg_stat_replication
nel database del fornitore: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;
L'output è simile al seguente:
-[ 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=#
Prendi nota della colonna
reply_delay
, che mostra l'ora in cui è stato ricevuto l'ultimo aggiornamento dal database degli abbonati.Monitora il ritardo della replica dello slot di replica sul fornitore perché
pglogical
crea slot di replica nel database del fornitore: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;
L'output è simile al seguente:
-[ 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=#
Risoluzione dei problemi di replica della sottoscrizione
L'abbonamento selezionato nel database degli abbonati deve mostrare lo stato replicating
o initializing
se è stato creato di recente.
Se lo stato è down
, si è verificato un problema.
Lo stato down
viene in genere visualizzato dopo che la replica ha tentato di avviarsi,
ma non è riuscita. Ciò è dovuto a problemi di connettività causati dall'impostazione dsn
o a autorizzazioni di database mancanti, che si trovano nel provider o nell'abbonato.
Utilizza Esplora log e ispeziona i file di log di PostgreSQL in Google Cloud quando Google Cloud AlloyDB è uno degli endpoint, per informazioni aggiuntive che potrebbero indicare la causa del problema. I file di log forniscono i dettagli del problema, inclusi quelli specifici sulle autorizzazioni mancanti.
Controlla il log di PostgreSQL sul server AlloyDB Omni:
Docker
docker logs CONTAINER_NAME
Sostituisci
CONTAINER_NAME
con il nome assegnato al container AlloyDB Omni durante l'installazione.Podman
podman logs CONTAINER_NAME
Sostituisci
CONTAINER_NAME
con il nome assegnato al container AlloyDB Omni durante l'installazione.Risolvi i problemi relativi all'impostazione
dsn
e assicurati che la connettività di rete non sia la causa del problema:- Copia la stringa di connessione
dsn
e prova una connessione manuale utilizzandopsql
e la stessa stringa. Se la sessionepsql
non riesce a connettersi, significa che:- Un problema di rete.
- Un indirizzo IP, un nome utente o una password errati.
- Un firewall che applica il blocco.
- Il file
pg_hba.conf
dell'altro cluster non è configurato correttamente.
- Copia la stringa di connessione
Risincronizza una tabella se non vuoi eliminare e ricreare l'abbonamento dopo aver adottato misure correttive:
SELECT pglogical.alter_subscription_resynchronize_table(subscription_name := 'test_sub_1',relation := 'table_name');
In alternativa, annulla l'abbonamento e ricrealo:
SELECT pglogical.drop_subscription(subscription_name := 'test_sub_1');
Passaggi successivi
- Switchover e failover con la replica
pglogical
- Replica i dati tra Google Cloud AlloyDB e AlloyDB Omni
- Replica i dati tra AlloyDB Omni e altri database