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.
-
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
-
Buat basis data pada instans RDS for PostgreSQL menggunakan perintah berikut:
postgres=>
CREATE DATABASEapp
; -
Alihkan koneksi ke basis data baru menggunakan perintah berikut:
\c
app
-
Buat dan konten tabel menggunakan pernyataan SQL berikut:
-
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); -
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'); -
Verifikasi bahwa data ada dalam tabel dengan menggunakan pernyataan SQL berikut.
app=>
SELECT count(*) FROM inventory.products;count ------- 3
-
-
Buat ekstensi
pgactive
pada basis data yang ada.app=>
CREATE EXTENSION pgactive; -
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 ke1
. -
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.
-
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
-
Buat basis data pada instans DB RDS for PostgreSQL kedua menggunakan perintah berikut:
postgres=>
CREATE DATABASEapp
; -
Alihkan koneksi ke basis data baru menggunakan perintah berikut:
\c
app
-
Buat ekstensi
pgactive
pada basis data yang ada.app=>
CREATE EXTENSION pgactive; -
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
. -
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. -
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
-
Jalankan perintah berikut ini untuk memasukkan nilai baru:
app=>
INSERT INTO inventory.products (id, product_name) VALUES (4, 'lotion'); -
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:
-
Anda dapat melepas instans DB kedua dari instans DB pertama menggunakan perintah berikut:
app=>
SELECT * FROM pgactive.pgactive_detach_nodes(ARRAY[‘node2-app
']); -
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); -
Hapus sementara ekstensi menggunakan perintah berikut ini:
app=>
DROP EXTENSION pgactive;