Menggunakan replikasi logis PostgreSQL dengan klaster DB Multi-AZ - Layanan Basis Data Relasional Amazon

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 dalam dokumentasi PostgreSQL.

Prasyarat

Untuk mengonfigurasi replikasi logis PostgreSQL untuk klaster DB Multi-AZ, Anda harus memenuhi prasyarat berikut.

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
  1. Buka grup parameter klaster DB kustom yang terkait dengan RDS Anda untuk klaster DB Multi-AZ PostgreSQL.

  2. Di bidang pencarian Parameter, cari parameter rds.logical_replication statis dan atur nilainya ke 1. Perubahan parameter ini dapat meningkatkan pembuatan WAL, jadi aktifkan hanya saat Anda menggunakan slot logis.

  3. 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

  4. 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.

  5. 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, dan pgoutput yang dikirimkan dengan PostgreSQL.

    Slot disalin secara asinkron ke setiap instans DB pembaca di klaster.

  6. 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 bahwa confirmed_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 SUBSCRIPTION subscription-name CONNECTION host=writer-endpoint Postgres=>ALTER SUBSCRIPTION subscription-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 ketika srsubstate 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 SUBSCRITPION subscription-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 PID x 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.