Terjemahan disediakan oleh mesin penerjemah. Jika konten terjemahan yang diberikan bertentangan dengan versi bahasa Inggris aslinya, utamakan versi bahasa Inggris.
Menyiapkan replikasi SQL logis Postgre dengan cluster DB multi-AZ untuk Amazon RDS
Dengan menggunakan replikasi SQL logis Postgre dengan cluster DB multi-AZ Anda, Anda dapat mereplikasi dan menyinkronkan tabel individual daripada seluruh instance database. Replikasi logis menggunakan model penerbit dan berlangganan untuk mereplikasi perubahan dari sumber ke satu atau lebih penerima. Ia bekerja dengan menggunakan catatan perubahan dari Postgre SQL write-ahead log (). WAL Untuk informasi selengkapnya, lihat Melakukan replikasi logis untuk Amazon RDS untuk Postgre SQL.
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 cluster DB multi-AZ yang berjalan RDS untuk Postgre SQL versi 14.8-R2 dan lebih tinggi, dan 15.3-R2 dan lebih tinggi.
catatan
Selain fitur replikasi SQL logis Postgre asli, cluster DB multi-AZ yang berjalan RDS untuk SQL Postgre juga mendukung ekstensi. pglogical
Untuk informasi lebih lanjut tentang replikasi SQL logis Postgre, lihat Replikasi logis
Prasyarat
Untuk mengkonfigurasi replikasi SQL logis Postgre untuk cluster 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 SQL peran dan izin Postgre. -
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 Postgre SQL versi 16, Anda dapat menggunakan instance DB pembaca dari cluster DB multi-AZ untuk replikasi logis.
Untuk mengatur replikasi logis untuk cluster DB RDS multi-AZ Postgre SQL
-
Buka grup parameter cluster DB kustom yang terkait dengan cluster DB SQL multi-AZ RDS for Postgre Anda.
Di bidang pencarian Parameter, cari parameter
rds.logical_replication
statis dan atur nilainya ke1
. Perubahan parameter ini dapat meningkatkan WAL generasi, jadi aktifkan hanya ketika 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 Mem-boot ulang cluster DB multi-AZ dan instans DB pembaca untuk Amazon RDS.
-
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 Postgre SQL mendukung
test_decoding
,wal2json
, danpgoutput
plugin yang dikirimkan dengan Postgre. SQLSlot 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 SQL Postgre 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 SUBSCRIPTIONsubscription-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 log (WAL) tulis di depan dan dapat menyebabkan masalah ruang disk.