Terjemahan disediakan oleh mesin penerjemah. Jika konten terjemahan yang diberikan bertentangan dengan versi bahasa Inggris aslinya, utamakan versi bahasa Inggris.
Menyiapkan replikasi logis PostgreSQL dengan cluster DB untuk Amazon RDS Multi-AZ
Dengan menggunakan replikasi logis PostgreSQL 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. 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 instance DB penulis dari cluster Multi-AZ DB, slot disalin secara asinkron ke setiap instans DB pembaca di cluster. Slot pada instans DB pembaca terus disinkronkan dengan yang ada di instans DB penulis.
Replikasi logis didukung untuk cluster Multi-AZ DB 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, cluster Multi-AZ DB yang menjalankan RDS untuk PostgreSQL juga mendukung ekstensi. pglogical
Untuk informasi selengkapnya tentang fitur replikasi logis PostgreSQL, lihat Logical replication
Prasyarat
Untuk mengkonfigurasi replikasi logis PostgreSQL Multi-AZ untuk cluster DB, Anda harus memenuhi prasyarat berikut.
-
Akun pengguna Anda harus menjadi anggota
rds_superusergrup dan memilikirds_superuserhak istimewa. Untuk informasi selengkapnya, lihat Memahami peran dan izin PostgreSQL. -
Cluster Multi-AZ DB Anda harus dikaitkan dengan grup parameter cluster DB kustom sehingga Anda dapat mengonfigurasi nilai parameter yang dijelaskan dalam prosedur berikut. Untuk informasi selengkapnya, lihat Bekerja dengan grup parameter cluster DB untuk cluster Multi-AZ DB.
Menyiapkan replikasi logis
Untuk mengatur replikasi logis untuk cluster Multi-AZ DB, Anda mengaktifkan parameter tertentu dalam grup parameter cluster DB terkait, lalu membuat slot replikasi logis.
catatan
Dimulai dengan PostgreSQL versi 16, Anda dapat menggunakan instance DB pembaca dari Multi-AZ cluster DB untuk replikasi logis.
Untuk mengatur replikasi logis untuk RDS untuk PostgreSQL DB cluster Multi-AZ
-
Buka grup parameter cluster DB kustom yang terkait dengan RDS Anda untuk PostgreSQL Multi-AZ DB cluster.
Di bidang pencarian Parameter, cari parameter
rds.logical_replicationstatis 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
-
-
Reboot cluster Multi-AZ DB agar nilai parameter diterapkan. Untuk petunjuk, lihat Mem-boot ulang instans Multi-AZ DB cluster dan reader DB untuk Amazon RDS.
-
Buat slot replikasi logis pada instance DB penulis dari cluster Multi-AZ DB seperti yang dijelaskan dalamMenggunakan slot replikasi logis. Proses ini mengharuskan Anda menentukan plugin decoding. Saat ini, RDS untuk PostgreSQL mendukung plugin
test_decoding,wal2json, danpgoutputyang dikirimkan dengan PostgreSQL.Slot disalin secara asinkron ke setiap instans DB pembaca di klaster.
-
Verifikasi status slot pada semua instance DB pembaca dari cluster Multi-AZ DB. Untuk melakukannya, periksa
pg_replication_slotstampilan pada semua instans DB pembaca dan pastikan bahwaconfirmed_flush_lsnstatus 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 Multi-AZ DB yang menjalankan PostgreSQL versi 16:
-
Anda hanya dapat menggunakan instance DB penulis untuk membuat atau menjatuhkan slot replikasi logis. Misalnya,
CREATE SUBSCRIPTIONperintah 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-nameCONNECTION host=writer-endpointPostgres=>ALTER SUBSCRIPTIONsubscription-nameREFRESH PUBLICATION -
Anda harus menunggu sinkronisasi tabel selesai sebelum menggunakan instance DB pembaca untuk replikasi logis. Anda dapat menggunakan tabel
pg_subscription_relkatalog untuk memantau sinkronisasi tabel. Sinkronisasi tabel selesai ketikasrsubstatekolom 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-nameCONNECTION host=reader-instance-endpointAnda 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 slotslot_nameis already active for PIDxproviding immediate feedback. -
Saat menggunakan
pglogicalekstensi, 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.