Halaman ini memberikan informasi tentang cara memantau dan memecahkan masalah
penerapan pglogical
dengan memeriksa dan memvalidasi database penyedia dan
pelanggan.
Sebelum memulai
Sebelum Anda mulai memantau dan memecahkan masalah penerapan pglogical
, periksa
database penyedia dan pelanggan, pahami penerapan pglogical
, dan validasi cara konfigurasinya.
Untuk mengetahui informasi selengkapnya tentang ekstensi pglogical
, lihat Tentang pglogical
.
Untuk informasi tentang replikasi data menggunakan pglogical
, lihat
Mereplikasi data antara Google Cloud AlloyDB dan AlloyDB Omni dan
Mereplikasi data antara AlloyDB Omni dan database lainnya.
Memeriksa setelan parameter pglogical
, replikasi, dan AlloyDB Omni
Sejumlah parameter konfigurasi memengaruhi pengoperasian ekstensi pglogical, dan Anda dapat memeriksanya di database penyedia dan pelanggan. Perhatikan bahwa nilai parameter dapat bervariasi.
Menampilkan setelan saat ini untuk parameter khusus
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;
Tampilkan parameter terkait replika logika lainnya:
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;
Menampilkan parameter khusus AlloyDB Omni:
SELECT name, setting, source, short_desc FROM pg_catalog.pg_settings WHERE name LIKE '%alloydb%' ORDER BY category, name;
Mencantumkan node dalam konfigurasi
Cantumkan node lokal dan jarak jauh dalam konfigurasi replikasi 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;
Jika kolom
node_id
adalahNOT NULL
, berarti itu adalah node lokal.Tinjau informasi
dsn
secara mendetail. Informasi string koneksi yang salah atau usang dapat menyebabkan kegagalan replikasi. Untuk informasi tentang pemecahan masalahdsn
, lihat Memecahkan masalah replikasi langganan.
Memeriksa status langganan dan titik replikasi tabel
Status langganan selalu diverifikasi dari database subscriber. Langganan
menampilkan status initializing
atau replicating
". Langganan juga menampilkan status down
.
Untuk informasi selengkapnya tentang status down
, lihat Memecahkan masalah replikasi langganan.
Cantumkan langganan, status dan setelan saat ini, di database saat ini:
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;
Outputnya mirip dengan hal berikut ini:
-[ 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=#
Cantumkan tabel yang saat ini direplikasi dan nomor urutan log (LSN) saat ini oleh langganan:
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;
Outputnya mirip dengan hal berikut ini:
table_name | sync_status | sync_statuslsn ---------------------+-------------+---------------- public.test_table_1 | r | 0/B891BC0 (1 row) my_test_db=#
Kolom
sync_statuslsn
menunjukkan LSN mana yang disinkronkan dengan tabel. Anda dapat membandingkannya dengan LSN di database penyedia untuk mengukur jeda replikasi.Periksa status replikasi untuk tabel tertentu:
SELECT * FROM pglogical.show_subscription_table('test_sub_1','test_table_1');
Memverifikasi detail set replikasi di penyedia
Buat daftar set replikasi saat ini di database penyedia dan periksa item yang direplikasi:
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;
Cantumkan tabel dan urutan yang saat ini direplikasi:
-- 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;
Periksa informasi replikasi dan slot lag di penyedia
Periksa status setiap pelanggan dengan membuat tampilan
pg_stat_replication
di database penyedia: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;
Outputnya mirip dengan hal berikut ini:
-[ 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=#
Perhatikan kolom
reply_delay
, yang menunjukkan waktu saat kolom tersebut menerima update terakhir dari database subscriber.Pantau jeda replikasi slot replikasi di penyedia karena
pglogical
membuat slot replikasi di database penyedia: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;
Outputnya mirip dengan hal berikut ini:
-[ 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=#
Memecahkan masalah replikasi langganan
Langganan yang diperiksa di database subscriber harus menampilkan
status replicating
atau initializing
jika langganan baru saja dibuat.
Jika statusnya down
, berarti telah terjadi masalah.
Status down
biasanya ditampilkan setelah replikasi mencoba dimulai,
tetapi gagal. Hal ini disebabkan oleh masalah konektivitas yang disebabkan oleh setelan dsn
,
atau izin database yang tidak ada, baik di penyedia maupun pelanggan.
Gunakan Logs Explorer dan periksa file log PostgreSQL di Google Cloud saat Google Cloud AlloyDB adalah salah satu endpoint, untuk informasi tambahan yang mungkin menunjukkan penyebab masalah. File log memberikan detail masalah, termasuk detail spesifik tentang izin yang tidak ada.
Periksa log PostgreSQL di server AlloyDB Omni:
Docker
docker logs CONTAINER_NAME
Ganti
CONTAINER_NAME
dengan nama yang Anda tetapkan ke penampung AlloyDB Omni saat menginstalnya.Podman
podman logs CONTAINER_NAME
Ganti
CONTAINER_NAME
dengan nama yang Anda tetapkan ke penampung AlloyDB Omni saat menginstalnya.Pecahkan masalah setelan
dsn
dan pastikan konektivitas jaringan bukan sumber masalahnya:- Salin string koneksi
dsn
dan coba koneksi manual menggunakanpsql
dan string yang sama. Jika sesipsql
tidak dapat terhubung, hal ini menunjukkan hal berikut:- Masalah jaringan.
- Alamat IP, nama pengguna, atau sandi salah.
- Firewall pemblokir.
- File
pg_hba.conf
cluster lain tidak dikonfigurasi dengan benar.
- Salin string koneksi
Sinkronkan ulang tabel jika Anda tidak ingin menghapus dan membuat ulang langganan setelah mengambil tindakan korektif:
SELECT pglogical.alter_subscription_resynchronize_table(subscription_name := 'test_sub_1',relation := 'table_name');
Atau, hapus langganan Anda dan buat ulang:
SELECT pglogical.drop_subscription(subscription_name := 'test_sub_1');
Langkah selanjutnya
- Switchover dan failover dengan replikasi
pglogical
- Mereplikasi data antara Google Cloud AlloyDB dan AlloyDB Omni
- Mereplikasi data antara AlloyDB Omni dan database lain