pglogical dengan memeriksa dan memvalidasi database penyedia dan pelanggan.
Sebelum memulai
Sebelum mulai memantau dan memecahkan masalah penerapan pglogical, periksa database penyedia dan pelanggan, pahami penerapan pglogical, dan validasi konfigurasinya.
Untuk mengetahui informasi selengkapnya tentang ekstensi pglogical, lihat Tentang pglogical.
Untuk mengetahui informasi tentang replikasi data menggunakan pglogical, lihat
Mereplikasi data antara AlloyDB untuk PostgreSQL dan AlloyDB Omni dan Mereplikasi data antara AlloyDB Omni dan database lainnya.
Memeriksa setelan parameter pglogical, replikasi, dan AlloyDB Omni
Beberapa parameter konfigurasi memengaruhi pengoperasian ekstensi pglogical, dan Anda dapat memeriksanya di database penyedia dan pelanggan. Perhatikan bahwa nilai parameter dapat bervariasi.
Menampilkan setelan parameter khusus
pglogicalsaat ini:SELECT name, setting, source, short_desc FROM pg_catalog.pg_settings WHERE name LIKE '%pglogical%' AND name NOT LIKE '%alloydb%' ORDER BY category, name;Menampilkan parameter lain yang terkait dengan replikasi logis:
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
Mencantumkan 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_idadalahNOT NULL, berarti kolom tersebut adalah node lokal.Tinjau informasi
dsnsecara mendetail. Informasi string koneksi yang salah atau tidak berlaku dapat menyebabkan kegagalan replikasi. Untuk mengetahui informasi tentangdsnpemecahan masalah, lihat Memecahkan masalah replikasi langganan.
Memeriksa status langganan dan titik replikasi tabel
Anda memverifikasi status langganan dari database pelanggan. Langganan menampilkan status initializing atau replicating. Langganan juga dapat menampilkan status down. Untuk mengetahui informasi selengkapnya tentang status down, lihat
Memecahkan masalah replikasi langganan.
Mencantumkan langganan database saat ini serta status dan setelan langganan.
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=#Mencantumkan tabel yang saat ini direplikasi dan nomor urutan log (LSN) saat ini berdasarkan 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_statuslsnmenunjukkan LSN yang disinkronkan dengan tabel. Anda dapat membandingkan LSN ini dengan LSN di database penyedia untuk mengukur jeda replikasi.Memeriksa status replikasi untuk tabel tertentu:
SELECT * FROM pglogical.show_subscription_table('test_sub_1','test_table_1');
Memverifikasi detail set replikasi di penyedia
Mencantumkan set replikasi saat ini di database penyedia dan memeriksa 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;Mencantumkan tabel dan urutan yang 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;
Memeriksa informasi replikasi dan jeda slot di penyedia
Memeriksa status setiap pelanggan dengan membuat tampilan
pg_stat_replicationdi 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 pembaruan terakhir dari database pelanggan.Pantau jeda replikasi slot replikasi di penyedia karena
pglogicalmembuat 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 pelanggan harus menampilkan status replicating atau initializing jika langganan baru dibuat.
Jika statusnya adalah down, berarti terjadi masalah.
Status down biasanya ditampilkan setelah replikasi mencoba memulai, 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 mengetahui 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 Anda:
Docker
docker logs CONTAINER_NAMEGanti CONTAINER_NAME dengan nama yang Anda tetapkan ke container AlloyDB Omni saat menginstalnya.
Podman
podman logs CONTAINER_NAMEGanti CONTAINER_NAME dengan nama yang Anda tetapkan ke container AlloyDB Omni saat menginstalnya.
Memecahkan masalah setelan
dsndan memastikan bahwa konektivitas jaringan bukan sumber masalah:Salin string koneksi
dsndan coba koneksi manual menggunakanpsqldan string yang sama. Jika sesipsqltidak dapat terhubung, hal ini menunjukkan hal berikut:- Masalah jaringan.
- Alamat IP, nama pengguna, atau sandi yang salah.
- Firewall pemblokir.
- File
pg_hba.confcluster lain tidak dikonfigurasi dengan benar.
Setelah mengambil tindakan korektif, sinkronkan ulang tabel atau hapus dan buat ulang langganan:
Untuk menyinkronkan ulang tabel tanpa menghapus langganan:
SELECT pglogical.alter_subscription_resynchronize_table(subscription_name := 'test_sub_1',relation := 'table_name');Atau, untuk menghapus dan membuat ulang langganan:
SELECT pglogical.drop_subscription(subscription_name := 'test_sub_1');
Langkah berikutnya
- Pengalihan dan failover dengan replikasi
pglogical - Mereplikasi data antara Google Cloud AlloyDB dan AlloyDB Omni
- Mereplikasi data antara AlloyDB Omni dan database lainnya