pglogical
-Implementierungen überwachen und Fehler beheben können, indem Sie die Anbieter- und Abonnentendatenbanken prüfen und validieren.
Hinweise
Bevor Sie mit der Überwachung und Fehlerbehebung von pglogical
-Implementierungen beginnen, sollten Sie die Anbieter- und Abonnentendatenbanken prüfen, die pglogical
-Implementierung verstehen und die Konfiguration validieren.
Weitere Informationen zur pglogical
-Erweiterung finden Sie unter Informationen zur pglogical
-Erweiterung.
Informationen zur Datenreplikation mit pglogical
finden Sie unter Daten zwischen AlloyDB und AlloyDB Omni replizieren Google Cloud und Daten zwischen AlloyDB Omni und anderen Datenbanken replizieren.
pglogical
-, Replikations- und AlloyDB Omni-Parametereinstellungen prüfen
Eine Reihe von Konfigurationsparametern wirkt sich auf die Funktionsweise der pglogical-Erweiterung aus. Sie können diese in den Provider- und Subscriber-Datenbanken prüfen. Die Parameterwerte können variieren.
Aktuelle Einstellung der
pglogical
-spezifischen Parameter anzeigen:SELECT name, setting, source, short_desc FROM pg_catalog.pg_settings WHERE name LIKE '%pglogical%' AND name NOT LIKE '%alloydb%' ORDER BY category, name;
Andere Parameter für die logische Replikation anzeigen:
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;
AlloyDB Omni-spezifische Parameter anzeigen:
SELECT name, setting, source, short_desc FROM pg_catalog.pg_settings WHERE name LIKE '%alloydb%' ORDER BY category, name;
Knoten in der Konfiguration auflisten
Listen Sie sowohl lokale als auch Remote-Knoten in der pglogical-Replikationskonfiguration auf:
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;
Wenn die Spalte
node_id
NOT NULL
ist, ist das der lokale Knoten.Sehen Sie sich die
dsn
-Informationen genau an. Falsche oder veraltete Informationen zum Verbindungsstring können zu Replikationsfehlern führen. Informationen zur Fehlerbehebung beidsn
finden Sie unter Fehlerbehebung bei der Aboreplikation.
Abo-Status und Tabellenreplikationspunkt prüfen
Der Abostatus wird immer anhand der Abonnentendatenbank überprüft. Das Abo hat den Status initializing
oder replicating
und außerdem den Status down
.
Weitere Informationen zum Status down
finden Sie unter Fehlerbehebung bei der Abo-Replikation.
So listen Sie die Abos, ihren aktuellen Status und ihre Einstellungen in der aktuellen Datenbank auf:
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;
Die Ausgabe sieht etwa so aus:
-[ 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=#
Listen Sie die Tabellen auf, die derzeit repliziert werden, und ihre aktuelle Logsequenznummer (LSN) nach Abonnement:
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;
Die Ausgabe sieht etwa so aus:
table_name | sync_status | sync_statuslsn ---------------------+-------------+---------------- public.test_table_1 | r | 0/B891BC0 (1 row) my_test_db=#
In der Spalte
sync_statuslsn
wird angezeigt, mit welcher LSN die Tabelle synchronisiert wird. Sie können diesen Wert mit dem LSN in der Anbieterdatenbank vergleichen, um die Replikationsverzögerung zu ermitteln.So prüfen Sie den Replikationsstatus für eine bestimmte Tabelle:
SELECT * FROM pglogical.show_subscription_table('test_sub_1','test_table_1');
Details zum Replikationssatz beim Anbieter überprüfen
Listen Sie die aktuellen Replikationssätze in der Anbieterdatenbank auf und prüfen Sie die replizierten Elemente:
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;
Tabellen und Sequenzen auflisten, die derzeit repliziert werden:
-- 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;
Replikationsinformationen und Slot-Verzögerung auf dem Anbieter prüfen
Prüfen Sie den Status der einzelnen Abonnenten, indem Sie die Ansicht
pg_stat_replication
in der Datenbank des Anbieters generieren: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;
Die Ausgabe sieht etwa so aus:
-[ 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=#
Achten Sie auf die Spalte
reply_delay
. Dort sehen Sie, wann die Daten zuletzt aus der Abonnentendatenbank aktualisiert wurden.Überwachen Sie die Replikationsverzögerung des Replikationsslots beim Anbieter, da
pglogical
Replikationsslots in der Anbieterdatenbank erstellt: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;
Die Ausgabe sieht etwa so aus:
-[ 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=#
Fehlerbehebung bei der Aboreplikation
Das Abo, das in der Abonnentendatenbank geprüft wird, muss den Status replicating
oder initializing
haben, wenn es erst vor Kurzem erstellt wurde.
Wenn der Status down
lautet, ist ein Problem aufgetreten.
Der Status down
wird normalerweise angezeigt, nachdem versucht wurde, die Replikation zu starten, dies jedoch fehlgeschlagen ist. Das liegt an Verbindungsproblemen, die durch die Einstellung dsn
verursacht werden, oder an fehlenden Datenbankberechtigungen beim Anbieter oder Abonnenten.
Verwenden Sie den Log-Explorer und prüfen Sie die PostgreSQL-Logdateien in Google Cloud , wennGoogle Cloud AlloyDB einer der Endpunkte ist, um zusätzliche Informationen zu erhalten, die auf die Ursache des Problems hinweisen könnten. Die Protokolldateien enthalten Details zum Problem, einschließlich spezifischer Details zu fehlenden Berechtigungen.
Prüfen Sie das PostgreSQL-Log auf Ihrem AlloyDB Omni-Server:
docker exec pg-service tail -20 /mnt/disks/pgsql/data/log/postgres
Führe die Fehlerbehebung für die Einstellung
dsn
durch und stelle sicher, dass die Netzwerkverbindung nicht die Ursache des Problems ist:- Kopieren Sie den
dsn
-Verbindungsstring und versuchen Sie, eine manuelle Verbindung mitpsql
und demselben String herzustellen. Wenn keine Verbindung zurpsql
-Sitzung hergestellt werden kann, deutet dies auf Folgendes hin:- Ein Netzwerkproblem.
- Eine falsche IP-Adresse, ein falscher Nutzername oder ein falsches Passwort.
- Eine blockierende Firewall.
- Die
pg_hba.conf
-Datei des anderen Clusters ist nicht richtig konfiguriert.
- Kopieren Sie den
Sie können eine Tabelle neu synchronisieren, wenn Sie das Abo nach Korrekturmaßnahmen nicht löschen und neu erstellen möchten:
SELECT pglogical.alter_subscription_resynchronize_table(subscription_name := 'test_sub_1',relation := 'table_name');
Alternativ können Sie Ihr Abo kündigen und neu erstellen:
SELECT pglogical.drop_subscription(subscription_name := 'test_sub_1');
Nächste Schritte
- Switchover und Failover mit
pglogical
-Replikation - Daten zwischen Google Cloud AlloyDB und AlloyDB Omni replizieren
- Daten zwischen AlloyDB Omni und anderen Datenbanken replizieren