Terjemahan disediakan oleh mesin penerjemah. Jika konten terjemahan yang diberikan bertentangan dengan versi bahasa Inggris aslinya, utamakan versi bahasa Inggris.
Menggunakan replikasi logis PostgreSQL dengan klaster DB Multi-AZ
Dengan menggunakan replikasi logis PostgreSQL dengan klaster DB Multi-AZ Anda, Anda dapat mereplikasi dan menyinkronkan tabel individual daripada seluruh instans basis data. Replikasi logis menggunakan model terbit dan langganan untuk mereplikasi perubahan dari sumber ke satu atau lebih penerima. Hal ini bekerja dengan menggunakan catatan perubahan dari log write-ahead PostgreSQL (WAL). Untuk informasi selengkapnya, lihat Melakukan replikasi logis untuk Amazon RDS for PostgreSQL.
Saat Anda membuat slot replikasi logis baru pada instans DB penulis dari klaster DB Multi-AZ, slot tersebut disalin secara asinkron ke setiap instans DB pembaca di klaster. Slot pada instans DB pembaca terus disinkronkan dengan yang ada di instans DB penulis.
Replikasi logis didukung untuk klaster DB Multi-AZ yang menjalankan RDS untuk PostgreSQL versi 14.8-R2 dan lebih tinggi, dan 15.3-R2 dan lebih tinggi.
catatan
Selain fitur replikasi logis PostgreSQL asli, klaster DB Multi-AZ yang menjalankan RDS untuk PostgreSQL juga mendukung ekstensi pglogical
.
Untuk informasi selengkapnya tentang fitur replikasi logis PostgreSQL, lihat Logical replication
Prasyarat
Untuk mengonfigurasi replikasi logis PostgreSQL untuk klaster DB Multi-AZ, Anda harus memenuhi prasyarat berikut.
-
Akun pengguna Anda harus menjadi anggota
rds_superuser
grup dan memilikirds_superuser
hak istimewa. Untuk informasi selengkapnya, lihat Memahami peran dan izin PostgreSQL. -
Klaster DB Multi-AZ Anda harus dikaitkan dengan grup parameter klaster DB kustom sehingga Anda dapat mengonfigurasi nilai parameter yang dijelaskan dalam prosedur berikut. Untuk informasi selengkapnya, lihat Menggunakan grup parameter klaster DB untuk klaster DB Multi-AZ.
Menyiapkan replikasi logis
Untuk mengatur replikasi logis untuk klaster DB Multi-AZ, Anda mengaktifkan parameter tertentu dalam grup parameter klaster DB terkait, lalu membuat slot replikasi logis.
catatan
Dimulai dengan PostgreSQL versi 16, Anda dapat menggunakan instance DB pembaca dari cluster DB multi-AZ untuk replikasi logis.
Untuk mengatur replikasi logis untuk sebuah RDS untuk klaster DB Multi-AZ PostgreSQL
-
Buka grup parameter klaster DB kustom yang terkait dengan RDS Anda untuk klaster DB Multi-AZ PostgreSQL.
Di bidang pencarian Parameter, cari parameter
rds.logical_replication
statis dan atur nilainya ke1
. Perubahan parameter ini dapat meningkatkan pembuatan WAL, jadi aktifkan hanya saat Anda menggunakan slot logis.-
Sebagai bagian dari perubahan ini, konfigurasi parameter klaster DB berikut.
-
max_wal_senders
-
max_replication_slots
-
max_connections
Tergantung penggunaan yang Anda harapkan, Anda mungkin juga perlu mengubah nilai parameter berikut. Namun, dalam banyak kasus, nilai default sudah cukup.
-
max_logical_replication_workers
-
max_sync_workers_per_subscription
-
-
Boot ulang klaster DB Multi-AZ agar nilai parameter diterapkan. Untuk petunjuknya, lihat Membut ulang klaster basis data Multi-AZ dan instans basis data pembaca.
-
Buat slot replikasi logis pada instans DB penulis dari klaster DB Multi-AZ seperti yang dijelaskan dalam Menggunakan slot replikasi logis. Proses ini mengharuskan Anda menentukan plugin decoding. Saat ini, RDS untuk PostgreSQL mendukung plugin
test_decoding
,wal2json
, danpgoutput
yang dikirimkan dengan PostgreSQL.Slot disalin secara asinkron ke setiap instans DB pembaca di klaster.
-
Verifikasi status slot pada semua instans DB pembaca dari klaster DB Multi-AZ. Untuk melakukannya, periksa
pg_replication_slots
tampilan pada semua instans DB pembaca dan pastikan bahwaconfirmed_flush_lsn
status membuat kemajuan saat aplikasi secara aktif mengonsumsi perubahan logis.Perintah berikut menunjukkan cara memeriksa status replikasi pada instans DB pembaca.
% psql -h test-postgres-instance-2.abcdefabcdef.us-west-2.rds.amazonaws.com postgres=> select slot_name, slot_type, confirmed_flush_lsn from pg_replication_slots; slot_name | slot_type | confirmed_flush_lsn --------------+-----------+--------------------- logical_slot | logical | 32/
D0001700
(1 row) postgres=> select slot_name, slot_type, confirmed_flush_lsn from pg_replication_slots; slot_name | slot_type | confirmed_flush_lsn --------------+-----------+--------------------- logical_slot | logical | 32/D8003628
(1 row) % psql -h test-postgres-instance-3.abcdefabcdef.us-west-2.rds.amazonaws.com postgres=> select slot_name, slot_type, confirmed_flush_lsn from pg_replication_slots; slot_name | slot_type | confirmed_flush_lsn --------------+-----------+--------------------- logical_slot | logical | 32/D0001700
(1 row) postgres=> select slot_name, slot_type, confirmed_flush_lsn from pg_replication_slots; slot_name | slot_type | confirmed_flush_lsn --------------+-----------+--------------------- logical_slot | logical | 32/D8003628
(1 row)
Setelah Anda menyelesaikan tugas replikasi Anda, hentikan proses replikasi, jatuhkan slot replikasi, dan matikan replikasi logis. Untuk mematikan replikasi logis, ubah grup parameter klaster DB Anda dan atur nilai rds.logical_replication
kembali ke 0
. Boot ulang klaster agar perubahan parameter diterapkan.
Batasan dan rekomendasi
Keterbatasan dan rekomendasi berikut berlaku untuk menggunakan replikasi logis dengan cluster DB multi-AZ yang menjalankan PostgreSQL versi 16:
-
Anda hanya dapat menggunakan instance DB penulis untuk membuat atau menjatuhkan slot replikasi logis. Misalnya,
CREATE SUBSCRIPTION
perintah harus menggunakan titik akhir penulis cluster dalam string koneksi host. -
Anda harus menggunakan titik akhir penulis cluster selama sinkronisasi tabel atau sinkronisasi ulang. Misalnya, Anda dapat menggunakan perintah berikut untuk menyinkronkan ulang tabel yang baru ditambahkan:
Postgres=>
ALTER SUBSCRIPTIONsubscription-name
CONNECTION host=writer-endpoint
Postgres=>
ALTER SUBSCRIPTIONsubscription-name
REFRESH PUBLICATION -
Anda harus menunggu sinkronisasi tabel selesai sebelum menggunakan instance DB pembaca untuk replikasi logis. Anda dapat menggunakan tabel
pg_subscription_rel
katalog untuk memantau sinkronisasi tabel. Sinkronisasi tabel selesai ketikasrsubstate
kolom diatur ke ready (r
). -
Sebaiknya gunakan titik akhir instance untuk koneksi replikasi logis setelah sinkronisasi tabel awal selesai. Perintah berikut mengurangi beban pada instance DB penulis dengan membongkar replikasi ke salah satu instance DB pembaca:
Postgres=>
ALTER SUBSCRITPIONsubscription-name
CONNECTION host=reader-instance-endpoint
Anda tidak dapat menggunakan slot yang sama pada lebih dari satu instans DB sekaligus. Ketika dua atau lebih aplikasi mereplikasi perubahan logis dari instance DB yang berbeda di cluster, beberapa perubahan mungkin hilang karena failover cluster atau masalah jaringan. Dalam situasi ini, Anda dapat menggunakan titik akhir instance untuk replikasi logis dalam string koneksi host. Aplikasi lain yang menggunakan konfigurasi yang sama akan menampilkan pesan kesalahan berikut:
replication slot
slot_name
is already active for PIDx
providing immediate feedback. -
Saat menggunakan
pglogical
ekstensi, Anda hanya dapat menggunakan titik akhir penulis cluster. Ekstensi memiliki keterbatasan yang diketahui yang dapat membuat slot replikasi logis yang tidak digunakan selama sinkronisasi tabel. Slot replikasi basi menyimpan file write-ahead log (WAL) dan dapat menyebabkan masalah ruang disk.