Terjemahan disediakan oleh mesin penerjemah. Jika konten terjemahan yang diberikan bertentangan dengan versi bahasa Inggris aslinya, utamakan versi bahasa Inggris.
Melakukan replikasi logis untuk Amazon RDS for PostgreSQL
Dimulai dengan versi 10.4, RDS for PostgreSQL mendukung publikasi dan langganan sintaks yang diperkenalkan di PostgreSQL 10. Untuk mempelajari selengkapnya, lihat Logical replication
catatan
Selain fitur replikasi logis PostgreSQL asli yang diperkenalkan di PostgreSQL 10, RDS for PostgreSQL juga mendukung ekstensi pglogical
. Untuk informasi selengkapnya, lihat Menggunakan pglogical untuk menyinkronkan data di seluruh instans.
Berikut ini, Anda dapat menemukan informasi tentang pengaturan replikasi logis untuk instans DB RDS for PostgreSQL.
Topik
Memahami replikasi logis dan decoding logis
RDS for PostgreSQL mendukung streaming write-ahead log (WAL) menggunakan slot replikasi logis PostgreSQL. Penggunaan decoding logis juga didukung. Anda dapat menyiapkan slot replikasi logis pada instans Anda dan mengalirkan perubahan basis data melalui slot ini ke klien seperti pg_recvlogical
. Anda membuat slot replikasi logis di tingkat basis data, dan slot tersebut mendukung koneksi replikasi ke satu basis data.
Klien yang paling umum untuk replikasi logis PostgreSQL AWS Database Migration Service adalah atau host yang dikelola khusus pada instance Amazon. EC2 Slot replikasi logis tidak memiliki informasi tentang penerima aliran. Selain itu, target tidak perlu merupakan basis data replika. Jika Anda menyiapkan slot replikasi logis dan tidak membaca dari slot, data dapat ditulis dan mengisi penyimpanan instans DB Anda dengan cepat.
Anda mengaktifkan replikasi logis PostgreSQL dan decoding logis untuk Amazon RDS dengan parameter, jenis koneksi replikasi, dan peran keamanan. Klien untuk decoding logis dapat berupa klien yang dapat membuat koneksi replikasi ke basis data pada instans DB PostgreSQL.
Cara mengaktifkan decoding logis untuk instans DB RDS for PostgreSQL
-
Pastikan akun pengguna yang Anda gunakan memiliki peran berikut:
-
Peran
rds_superuser
agar Anda dapat mengaktifkan replikasi logis -
Peran
rds_replication
untuk memberikan izin guna mengelola slot logis dan mengalirkan data menggunakan slot logis
-
-
Atur parameter statis
rds.logical_replication
ke 1. Sebagai bagian dari penerapan parameter ini, atur juga parameterwal_level
,max_wal_senders
,max_replication_slots
, danmax_connections
. Perubahan parameter ini dapat meningkatkan pembuatan WAL, jadi atur parameterrds.logical_replication
hanya saat Anda menggunakan slot logis. -
Boot ulang instans DB agar parameter
rds.logical_replication
statis berlaku. -
Buat slot replikasi logis sebagaimana dijelaskan di bagian selanjutnya. Proses ini mengharuskan Anda menentukan plugin decoding. Saat ini, RDS for PostgreSQL mendukung plugin output test_decoding dan wal2json yang dikirimkan dengan PostgreSQL.
Untuk informasi selengkapnya tentang decoding logis PostgreSQL, lihat dokumentasi PostgreSQL
Menggunakan slot replikasi logis
Anda dapat menggunakan perintah SQL untuk bekerja dengan slot logis. Misalnya, perintah berikut membuat slot logis bernama test_slot
menggunakan plugin output test_decoding
PostgreSQL default.
SELECT * FROM pg_create_logical_replication_slot('test_slot', 'test_decoding');
slot_name | xlog_position -----------------+--------------- regression_slot | 0/16B1970 (1 row)
Untuk membuat daftar slot logis, gunakan perintah berikut.
SELECT * FROM pg_replication_slots;
Untuk membatalkan daftar slot logis, gunakan perintah berikut.
SELECT pg_drop_replication_slot('test_slot');
pg_drop_replication_slot ----------------------- (1 row)
Untuk contoh selengkapnya tentang bekerja dengan slot replikasi logis, lihat Logical decoding examples
Setelah Anda membuat slot replikasi logis, Anda dapat memulai pengaliran. Contoh berikut menunjukkan bagaimana decoding logis dikontrol melalui protokol replikasi streaming. Contoh ini menggunakan program pg_recvlogical, yang termasuk dalam distribusi PostgreSQL. Untuk melakukan hal ini, autentikasi klien perlu disiapkan untuk memungkinkan koneksi replikasi.
pg_recvlogical -d postgres --slot test_slot -U postgres --host -
instance-name.111122223333
.aws-region
.rds.amazonaws.com -f - --start
Untuk melihat konten tampilan pg_replication_origin_status
, kueri fungsi pg_show_replication_origin_status
.
SELECT * FROM pg_show_replication_origin_status();
local_id | external_id | remote_lsn | local_lsn ----------+-------------+------------+----------- (0 rows)
Mereplikasi data tingkat tabel menggunakan replikasi logis
Anda dapat menggunakan replikasi logis untuk mereplikasi data dari tabel sumber untuk menargetkan tabel di RDS untuk PostgreSQL. Replikasi logis pertama melakukan pemuatan awal data yang ada dari tabel sumber dan kemudian terus mereplikasi perubahan yang sedang berlangsung.
-
Buat tabel sumber
Connect ke database sumber di RDS Anda untuk PostgreSQL DB instance:
source=> CREATE TABLE testtab (slno int primary key); CREATE TABLE
-
Masukkan data ke dalam tabel sumber
source=> INSERT INTO testtab VALUES (generate_series(1,1000)); INSERT 0 1000
-
Buat publikasi untuk tabel sumber
-
Buat publikasi untuk tabel sumber:
source=> CREATE PUBLICATION testpub FOR TABLE testtab; CREATE PUBLICATION
-
Gunakan kueri SELECT untuk memverifikasi detail publikasi yang dibuat:
source=> SELECT * FROM pg_publication; oid | pubname | pubowner | puballtables | pubinsert | pubupdate | pubdelete | pubtruncate | pubviaroot --------+---------+----------+--------------+-----------+-----------+-----------+-------------+------------ 115069 | testpub | 16395 | f | t | t | t | t | f (1 row)
-
Verifikasi bahwa tabel sumber ditambahkan ke publikasi:
source=> SELECT * FROM pg_publication_tables; pubname | schemaname | tablename ---------+------------+----------- testpub | public | testtab (1 rows)
-
Untuk mereplikasi semua tabel dalam database, gunakan:
CREATE PUBLICATION testpub FOR ALL TABLES;
-
Jika publikasi sudah dibuat untuk tabel individual dan Anda perlu menambahkan tabel baru, Anda dapat menjalankan kueri di bawah ini untuk menambahkan tabel baru ke publikasi yang ada:
ALTER PUBLICATION <publication_name> add table <new_table_name>;
-
-
Connect ke database target dan buat tabel target
-
Connect ke database target dalam instans DB target. Buat tabel target dengan nama yang sama dengan tabel sumber:
target=> CREATE TABLE testtab (slno int primary key); CREATE TABLE
-
Pastikan tidak ada data yang ada di tabel target dengan menjalankan kueri SELECT pada tabel target:
target=> SELECT count(*) FROM testtab; count ------- 0 (1 row)
-
-
Membuat dan memverifikasi langganan di database target
-
Buat langganan di database target:
target=> CREATE SUBSCRIPTION testsub CONNECTION 'host=<source RDS/host endpoint> port=5432 dbname=<source_db_name> user=<user> password=<password>' PUBLICATION testpub; NOTICE: Created replication slot "testsub" on publisher CREATE SUBSCRIPTION
-
Gunakan kueri SELECT untuk memverifikasi bahwa langganan diaktifkan:
target=> SELECT oid, subname, subenabled, subslotname, subpublications FROM pg_subscription; oid | subname | subenabled | subslotname | subpublications -------+---------+------------+-------------+----------------- 16434 | testsub | t | testsub | {testpub} (1 row)
-
Ketika langganan dibuat, itu memuat semua data dari tabel sumber ke tabel target. Jalankan kueri SELECT pada tabel target untuk memverifikasi bahwa data awal dimuat:
target=> SELECT count(*) FROM testtab; count ------- 1000 (1 row)
-
-
Verifikasi slot replikasi dalam database sumber
Pembuatan langganan dalam database target menciptakan slot replikasi dalam database sumber. Verifikasi detail slot replikasi dengan menjalankan kueri SELECT berikut pada database sumber:
source=> SELECT * FROM pg_replication_slots; slot_name | plugin | slot_type | datoid | database | temporary | active | active_pid | xmin | catalog_xmin | restart_lsn | confirmed_flush_lsn | wal_status | safe_wal_size ----------+----------+-----------+--------+----------+-----------+--------+------------+------+--------------+-------------+---------------------+------------+--------------- testsub | pgoutput | logical | 115048 | source | f | t | 846 | | 6945 | 58/B4000568 | 58/B40005A0 | reserved | (1 row)
-
Menguji replikasi
-
Uji apakah perubahan data dalam tabel sumber sedang direplikasi ke tabel target dengan menyisipkan baris ke dalam tabel sumber:
source=> INSERT INTO testtab VALUES(generate_series(1001,2000)); INSERT 0 1000 source=> SELECT count(*) FROM testtab; count ------- 2000 (1 row)
-
Verifikasi jumlah baris dalam tabel target untuk mengonfirmasi bahwa sisipan baru sedang direplikasi:
target=> SELECT count(*) FROM testtab; count ------- 2000 (1 row)
-
-
Menyegarkan langganan setelah menambahkan tabel
-
Saat Anda menambahkan tabel baru ke publikasi yang ada, wajib menyegarkan langganan agar perubahan diterapkan:
ALTER SUBSCRIPTION <subscription_name> REFRESH PUBLICATION;
-
Perintah ini mengambil informasi tabel yang hilang dari penerbit dan memulai replikasi untuk tabel yang ditambahkan ke publikasi berlangganan sejak langganan dibuat atau terakhir diperbarui.
-