Menyiapkan replikasi aktif-aktif untuk instans DB RDS for PostgreSQL - 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.

Menyiapkan replikasi aktif-aktif untuk instans DB RDS for PostgreSQL

Prosedur berikut menunjukkan kepada Anda bagaimana memulai replikasi aktif-aktif antara dua klaster jika tersedia. pgactive Untuk menjalankan contoh ketersediaan tinggi beberapa wilayah, Anda perlu menerapkan instans Amazon RDS for PostgreSQL di dua wilayah berbeda dan menyiapkan VPC Peering. Untuk informasi selengkapnya, lihat VPC peering.

catatan

Mengirim lalu lintas antar beberapa wilayah dapat menimbulkan biaya tambahan.

Langkah-langkah ini mengasumsikan bahwa RDS untuk instance PostgreSQL DB telah diaktifkan dengan ekstensi. pgactive Untuk informasi selengkapnya, lihat Menginisialisasi kemampuan ekstensi pgactive.

Mengonfigurasi instans DB RDS for PostgreSQL dengan ekstensi pgactive

Contoh berikut menggambarkan cara grup pgactive dibuat, bersama dengan langkah-langkah lain yang diperlukan untuk membuat ekstensi pgactive pada instans DB RDS for PostgreSQL.

  1. Gunakan psql atau alat klien lain agar terhubung ke instans DB RDS for PostgreSQL.

    psql --host=firstinstance.111122223333.aws-region.rds.amazonaws.com --port=5432 --username=postgres --password=PASSWORD --dbname=postgres
  2. Buat basis data pada instans RDS for PostgreSQL menggunakan perintah berikut:

    postgres=> CREATE DATABASE app;
  3. Alihkan koneksi ke basis data baru menggunakan perintah berikut:

    \c app
  4. Buat dan konten tabel menggunakan pernyataan SQL berikut:

    1. Buat contoh tabel menggunakan pernyataan SQL berikut.

      app=> CREATE SCHEMA inventory; CREATE TABLE inventory.products ( id int PRIMARY KEY, product_name text NOT NULL, created_at timestamptz NOT NULL DEFAULT CURRENT_TIMESTAMP);
    2. Mengisi tabel dengan beberapa contoh data yang dihasilkan dengan menggunakan pernyataan SQL berikut.

      app=> INSERT INTO inventory.products (id, product_name) VALUES (1, 'soap'), (2, 'shampoo'), (3, 'conditioner');
    3. Verifikasi bahwa data ada dalam tabel dengan menggunakan pernyataan SQL berikut.

      app=>SELECT count(*) FROM inventory.products; count ------- 3
  5. Buat ekstensi pgactive pada basis data yang ada.

    app=> CREATE EXTENSION pgactive;
  6. Untuk membuat dan menginisialisasi grup pgactive dengan aman, gunakan perintah berikut:

    app=> -- connection info for endpoint1 CREATE SERVER pgactive_server_endpoint1 FOREIGN DATA WRAPPER pgactive_fdw OPTIONS (host '<endpoint1>', dbname 'app'); CREATE USER MAPPING FOR postgres SERVER pgactive_server_endpoint1 OPTIONS (user 'postgres', password '<password>'); -- connection info for endpoint2 CREATE SERVER pgactive_server_endpoint2 FOREIGN DATA WRAPPER pgactive_fdw OPTIONS (host '<endpoint2>', dbname 'app'); CREATE USER MAPPING FOR postgres SERVER pgactive_server_endpoint2 OPTIONS (user 'postgres', password '<password>');

    Sekarang Anda dapat menginisialisasi grup replikasi dan menambahkan contoh pertama ini:

    SELECT pgactive.pgactive_create_group( node_name := 'endpoint1-app', node_dsn := 'user_mapping=postgres pgactive_foreign_server=pgactive_server_endpoint1' );

    Gunakan perintah berikut sebagai metode alternatif tetapi kurang aman untuk membuat dan menginisialisasi grup pgactive:

    app=> SELECT pgactive.pgactive_create_group( node_name := 'node1-app', node_dsn := 'dbname=app host=firstinstance.111122223333.aws-region.rds.amazonaws.com user=postgres password=PASSWORD');

    node1-app adalah nama yang Anda tetapkan untuk mengidentifikasi simpul secara unik dalam grup pgactive.

    catatan

    Untuk melakukan langkah ini dengan sukses pada instans DB yang dapat diakses publik, Anda harus mengaktifkan parameter rds.custom_dns_resolution dengan menyetelnya ke 1.

  7. Untuk memeriksa apakah instans DB sudah siap, gunakan perintah berikut ini:

    app=> SELECT pgactive.pgactive_wait_for_node_ready();

    Jika perintah berhasil, Anda dapat melihat output sebagai berikut:

    pgactive_wait_for_node_ready ------------------------------ (1 row)
Mengonfigurasi instans RDS for PostgreSQL kedua dan bergabung ke grup pgactive

Contoh berikut menggambarkan cara instans DB RDS for PostgreSQL bergabung ke grup pgactive, bersama dengan langkah-langkah lain yang diperlukan untuk membuat ekstensi pgactive pada instans DB.

Langkah-langkah ini mengasumsikan bahwa instans DB RDS for PostgreSQL lainnya telah disiapkan dengan ekstensi pgactive. Untuk informasi selengkapnya, lihat Menginisialisasi kemampuan ekstensi pgactive.

  1. Gunakan psql untuk terhubung ke instans yang ingin Anda terima pembaruan dari penerbit.

    psql --host=secondinstance.111122223333.aws-region.rds.amazonaws.com --port=5432 --username=postgres --password=PASSWORD --dbname=postgres
  2. Buat basis data pada instans DB RDS for PostgreSQL kedua menggunakan perintah berikut:

    postgres=> CREATE DATABASE app;
  3. Alihkan koneksi ke basis data baru menggunakan perintah berikut:

    \c app
  4. Buat ekstensi pgactive pada basis data yang ada.

    app=> CREATE EXTENSION pgactive;
  5. Bergabunglah dengan kedua PostgreSQL ke grup dengan cara yang lebih aman menggunakan perintah berikut: pgactive

    -- connection info for endpoint1 CREATE SERVER pgactive_server_endpoint1 FOREIGN DATA WRAPPER pgactive_fdw OPTIONS (host '<endpoint1>', dbname 'app'); CREATE USER MAPPING FOR postgres SERVER pgactive_server_endpoint1 OPTIONS (user 'postgres', password '<password>'); -- connection info for endpoint2 CREATE SERVER pgactive_server_endpoint2 FOREIGN DATA WRAPPER pgactive_fdw OPTIONS (host '<endpoint2>', dbname 'app'); CREATE USER MAPPING FOR postgres SERVER pgactive_server_endpoint2 OPTIONS (user 'postgres', password '<password>');
    SELECT pgactive.pgactive_join_group( node_name := 'endpoint2-app', node_dsn := 'user_mapping=postgres pgactive_foreign_server=pgactive_server_endpoint2', join_using_dsn := 'user_mapping=postgres pgactive_foreign_server=pgactive_server_endpoint1' );

    Gunakan perintah berikut sebagai metode alternatif tetapi kurang aman untuk bergabung dengan ke grup pgactive

    app=> SELECT pgactive.pgactive_join_group( node_name := 'node2-app', node_dsn := 'dbname=app host=secondinstance.111122223333.aws-region.rds.amazonaws.com user=postgres password=PASSWORD', join_using_dsn := 'dbname=app host=firstinstance.111122223333.aws-region.rds.amazonaws.com user=postgres password=PASSWORD');

    node2-app adalah nama yang Anda tetapkan untuk mengidentifikasi simpul secara unik dalam grup pgactive.

  6. Untuk memeriksa apakah instans DB sudah siap, gunakan perintah berikut ini:

    app=> SELECT pgactive.pgactive_wait_for_node_ready();

    Jika perintah berhasil, Anda dapat melihat output sebagai berikut:

    pgactive_wait_for_node_ready ------------------------------ (1 row)

    Jika basis data RDS for PostgreSQL pertama relatif besar, Anda dapat melihat pgactive.pgactive_wait_for_node_ready() yang merilis laporan kemajuan operasi pemulihan. Output akan terlihat serupa dengan yang berikut ini:

    NOTICE: restoring database 'app', 6% of 7483 MB complete NOTICE: restoring database 'app', 42% of 7483 MB complete NOTICE: restoring database 'app', 77% of 7483 MB complete NOTICE: restoring database 'app', 98% of 7483 MB complete NOTICE: successfully restored database 'app' from node node1-app in 00:04:12.274956 pgactive_wait_for_node_ready ------------------------------ (1 row)

    Dari titik ini ke depan, pgactive menyinkronkan data antara dua instans DB.

  7. Anda dapat menggunakan perintah berikut untuk memverifikasi apakah basis data instans DB kedua memiliki data:

    app=> SELECT count(*) FROM inventory.products;

    Jika data berhasil disinkronkan, Anda akan melihat output sebagai berikut:

    count ------- 3
  8. Jalankan perintah berikut ini untuk memasukkan nilai baru:

    app=> INSERT INTO inventory.products (id, product_name) VALUES (4, 'lotion');
  9. Hubungkan ke basis data instans DB pertama dan jalankan kueri berikut:

    app=> SELECT count(*) FROM inventory.products;

    Jika replikasi aktif-aktif diinisialisasi, output serupa dengan berikut ini:

    count ------- 4
Melepas dan menghapus instans DB dari grup pgactive

Anda dapat melepas dan menghapus instans DB dari grup pgactive menggunakan langkah-langkah berikut:

  1. Anda dapat melepas instans DB kedua dari instans DB pertama menggunakan perintah berikut:

    app=> SELECT * FROM pgactive.pgactive_detach_nodes(ARRAY[‘node2-app']);
  2. Menghapus ekstensi pgactive dari instans DB kedua menggunakan perintah berikut:

    app=> SELECT * FROM pgactive.pgactive_remove();

    Untuk menghapus ekstensi secara paksa:

    app=> SELECT * FROM pgactive.pgactive_remove(true);
  3. Hapus sementara ekstensi menggunakan perintah berikut ini:

    app=> DROP EXTENSION pgactive;