pglogical controllando e convalidando i database dei provider e degli abbonati.
Prima di iniziare
Prima di iniziare a monitorare e risolvere i problemi delle implementazioni di pglogical, controlla i database dei provider e degli abbonati, comprendi l'implementazione di pglogical e convalida la sua configurazione.
Per saperne di più sull'estensione pglogical, consulta Informazioni su pglogical.
Per informazioni sulla replica dei dati utilizzando pglogical, consulta Replica i dati tra AlloyDB per PostgreSQL e AlloyDB Omni e Replica i dati tra AlloyDB Omni e altri database.
Controlla le impostazioni dei parametri di pglogical, della replica e di AlloyDB Omni
Il funzionamento dell'estensione pglogical è influenzato da una serie di parametri di configurazione, che puoi controllare nei database del provider e del sottoscrittore. Tieni presente che i valori dei parametri potrebbero variare.
Mostra l'impostazione corrente 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 relativi 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 di 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. Qualsiasi informazione errata o non aggiornata sulla stringa di connessione può causare errori di replica. Per informazioni sulla risoluzione dei problemi relativi adsn, consulta Risolvi i problemi di replica delle sottoscrizioni.
Controlla lo stato della sottoscrizione e il punto di replica della tabella
Verifichi lo stato dell'abbonamento dal database degli abbonati. L'abbonamento
mostra lo stato initializing o replicating. Potrebbe anche mostrare lo stato down. Per ulteriori informazioni sullo stato down, consulta
Risolvi i problemi di replica delle sottoscrizioni.
Elenca le sottoscrizioni del database corrente, nonché lo stato e le impostazioni delle sottoscrizioni.
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 dalla sottoscrizione:
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_statuslsnmostra l'LSN con cui è sincronizzata la tabella. Puoi confrontarlo con l'LSN nel database del provider 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 provider
Elenca i set di replica correnti nel database del provider 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 sulla replica e il ritardo dello slot sul provider
Controlla lo stato di ogni abbonato generando la vista
pg_stat_replicationnel 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 ha ricevuto l'ultimo aggiornamento dal database degli abbonati.Monitora il ritardo di replica dello slot di replica sul provider, perché
pglogicalcrea slot di replica sul database del provider: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=#
Risolvi i problemi di replica delle sottoscrizioni
L'abbonamento selezionato nel database degli abbonati deve avere lo stato replicating o initializing se è stato creato di recente.
Se lo stato è down, si è verificato un problema.
Lo stato down viene solitamente visualizzato dopo che la replica ha tentato di avviarsi, ma non è riuscita. Ciò è dovuto a problemi di connettività causati dall'impostazione dsn o ad autorizzazioni del database mancanti, che si trovano nel provider o nel sottoscrittore.
Utilizza Esplora log ed esamina i file di log di PostgreSQL in Google Cloudquando Google Cloud AlloyDB è uno degli endpoint, per ottenere ulteriori informazioni che potrebbero indicare la causa del problema. I file di log forniscono dettagli sul problema, inclusi dettagli specifici sulle autorizzazioni mancanti.
Controlla il log di PostgreSQL sul server AlloyDB Omni:
Docker
docker logs CONTAINER_NAMESostituisci CONTAINER_NAME con il nome che hai assegnato al container AlloyDB Omni durante l'installazione.
Podman
podman logs CONTAINER_NAMESostituisci CONTAINER_NAME con il nome che hai assegnato al container AlloyDB Omni durante l'installazione.
Risolvi i problemi relativi all'impostazione
dsne assicurati che la connettività di rete non sia la causa del problema:Copia la stringa di connessione
dsne prova a stabilire una connessione manuale utilizzandopsqle la stessa stringa. Se la sessionepsqlnon riesce a connettersi, indica quanto segue:- Un problema di rete.
- Indirizzo IP, nome utente o password errati.
- Un firewall che applica il blocco.
- Il file
pg_hba.confdell'altro cluster non è configurato correttamente.
Dopo aver intrapreso azioni correttive, risincronizza una tabella o elimina e ricrea la sottoscrizione:
Per risincronizzare una tabella senza eliminare la sottoscrizione:
SELECT pglogical.alter_subscription_resynchronize_table(subscription_name := 'test_sub_1',relation := 'table_name');In alternativa, per eliminare e ricreare la sottoscrizione:
SELECT pglogical.drop_subscription(subscription_name := 'test_sub_1');
Passaggi successivi
- Switchover e failover con replica
pglogical - Replica i dati tra Google Cloud AlloyDB e AlloyDB Omni
- Replica i dati tra AlloyDB Omni e altri database