Topik ini menjelaskan fitur langganan logis dari ApsaraDB RDS for PostgreSQL. Fitur ini mendukung sinkronisasi satu arah tingkat tabel secara quasi-real-time antara beberapa instance ApsaraDB RDS for PostgreSQL dan cocok untuk skenario bisnis seperti berbagi data, agregasi data, dan pemisahan data.
Deskripsi fitur
Jika Anda menerapkan bisnis di lebih dari satu wilayah, Anda dapat menggunakan langganan logis untuk berbagi data antar wilayah tersebut. Sebagai contoh, Anda dapat membagikan data dari pusat data yang melayani suatu wilayah ke wilayah lain atau mengumpulkan data dari wilayah lain ke pusat data. Hal ini memungkinkan Anda menganalisis dan menanyakan semua data bisnis secara real-time.
Berikut adalah ilustrasi proses langganan logis:
Buat publikasi di database testdb01 pada instance RDS penerbit dan publikasikan tabel public.t1.
Buat langganan bernama sub1_from_pub1 di database testdb02 pada instance RDS pelanggan untuk berlangganan data dari tabel public.t1.
Untuk informasi lebih lanjut, lihat Prinsip dan praktik terbaik langganan logis.
Catatan penggunaan
Anda dapat membuat langganan logis antara dua tabel pada satu instance RDS atau antara dua instance RDS dalam virtual private cloud (VPC) yang sama yang dapat dihubungkan menggunakan endpoint internal.
Prasyarat
Instance RDS harus menjalankan PostgreSQL 10 atau versi lebih baru dan menggunakan disk cloud.
Parameter wal_level harus disetel ke logical untuk instance RDS Anda. Anda dapat mengonfigurasi ulang parameter ini di halaman Parameters di konsol ApsaraDB RDS. Setelah mengonfigurasi ulang parameter ini, Anda harus me-restart instance RDS agar nilai baru diterapkan. Me-restart instance RDS akan memutus koneksi aplikasi Anda. Untuk memastikan kelangsungan bisnis, kami sarankan Anda mengambil tindakan yang sesuai sebelum me-restart instance RDS.
Jika Anda ingin membuat langganan logis antara dua instance RDS dalam VPC yang sama, tambahkan blok CIDR dari VPC ke daftar putih alamat IP instance RDS. Sebagai contoh, Anda dapat menambahkan 172.16.0.0/16 ke daftar putih alamat IP. Untuk informasi lebih lanjut, lihat Konfigurasikan daftar putih alamat IP.
Akun yang digunakan harus memiliki izin peran rds_superuser. Akun tersebut bisa menjadi akun istimewa dari instance RDS Anda atau akun standar yang dibuat menggunakan akun istimewa dengan pernyataan
CREATE ROLE xxx WITH SUPERUSER.
Prosedur
Buat publikasi di penerbit
Hubungkan ke instance RDS penerbit. Untuk informasi lebih lanjut, lihat Hubungkan ke instance ApsaraDB RDS for PostgreSQL.
Eksekusi pernyataan berikut untuk membuat publikasi di database penerbit:
CREATE PUBLICATION <Nama Publikasi> FOR TABLE <Nama Tabel>;Contoh
CREATE PUBLICATION pub1 FOR TABLE public.t1;CatatanAnda hanya dapat mempublikasikan tabel dasar persisten. Untuk informasi lebih lanjut, lihat CREATE PUBLICATION.
Anda dapat mengeksekusi pernyataan
SELECT * FROM pg_publication;untuk melihat publikasi yang ada di database.
Buat langganan di pelanggan
Hubungkan ke instance RDS pelanggan. Untuk informasi lebih lanjut, lihat Hubungkan ke instance ApsaraDB RDS for PostgreSQL.
Buat langganan di database pelanggan:
Penerbit dan pelanggan adalah database berbeda pada instance RDS yang sama
Buat slot replikasi logis di database penerbit.
SELECT pg_create_logical_replication_slot('<slot_name>', 'pgoutput');Buat tabel di database pelanggan dengan skema dan nama yang sama dengan tabel di database penerbit yang ingin Anda langgani.
Buat langganan logis di database pelanggan.
Jika instance RDS Anda menjalankan PostgreSQL 16 atau versi lebih baru, eksekusi pernyataan berikut:
CREATE SUBSCRIPTION <Nama Langganan> CONNECTION 'host=127.0.0.1 port=<Port Internet> user=<Nama Pengguna akun yang memiliki izin publikasi> password=<Kata Sandi akun> dbname=<Nama database penerbit>' PUBLICATION publication_name WITH (create_slot=false,slot_name=<slot_name>);Jika instance RDS Anda menjalankan versi dari PostgreSQL 10 hingga PostgreSQL 15, eksekusi pernyataan berikut:
CREATE SUBSCRIPTION <Nama Langganan> CONNECTION 'dbname=<Nama database penerbit>' PUBLICATION publication_name WITH (create_slot=false,slot_name=<slot_name>);
PentingJika database penerbit dan pelanggan berada pada instance RDS yang sama, gunakan klausa WITH untuk menambahkan pengaturan langganan
create_slot=false.Penerbit dan pelanggan adalah database berbeda pada instance RDS yang berbeda
Buat tabel di database pelanggan dengan skema dan nama yang sama dengan tabel di database penerbit yang ingin Anda langgani.
Buat langganan logis di database pelanggan.
CREATE SUBSCRIPTION <Nama Langganan> CONNECTION 'host=<Titik akhir Internet instance RDS penerbit> port=<Port Internet instance RDS penerbit> user=<Nama Pengguna akun pada instance RDS penerbit yang memiliki izin publikasi> password=<Kata Sandi akun> dbname=<Nama database pada instance RDS penerbit>' PUBLICATION <Nama publikasi di database penerbit>;
Contoh:
CREATE SUBSCRIPTION sub1_from_pub1 CONNECTION 'host=pgm-2ze7n9zb0n1f****.pg.rds.aliyuncs.comm port=5432 user=testdbuser password=****x dbname=testdb01' PUBLICATION pub1 WITH (enabled, create_slot, slot_name='sub1_from_pub1');CatatanAnda dapat mengeksekusi pernyataan
SELECT * FROM pg_subscription;untuk melihat langganan dari seluruh sistem database Anda.Gunakan klausa
WITHuntuk menambahkan parameter langganan ke nama publikasi pada database penerbit. Untuk informasi lebih lanjut, lihat CREATE SUBSCRIPTION.