

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
<a name="Appendix.PostgreSQL.CommonDBATasks.pgactive.setup-replication"></a>

Prosedur berikut menunjukkan cara 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](https://docs.aws.amazon.com/vpc/latest/peering/what-is-vpc-peering.html).

**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](Appendix.PostgreSQL.CommonDBATasks.pgactive.basic-setup.md). 

**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
   ```

1. Buat basis data pada instans RDS for PostgreSQL menggunakan perintah berikut:

   ```
   postgres=> CREATE DATABASE app;
   ```

1. Alihkan koneksi ke basis data baru menggunakan perintah berikut:

   ```
   \c app
   ```

1. 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);
      ```

   1. 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');
      ```

   1. Verifikasi bahwa data ada dalam tabel dengan menggunakan pernyataan SQL berikut.

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

1. Buat ekstensi `pgactive` pada basis data yang ada.

   ```
   app=> CREATE EXTENSION pgactive;
   ```

1. 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`.

1. 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](Appendix.PostgreSQL.CommonDBATasks.pgactive.basic-setup.md). 

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
   ```

1. Buat basis data pada instans DB RDS for PostgreSQL kedua menggunakan perintah berikut:

   ```
   postgres=> CREATE DATABASE app;
   ```

1. Alihkan koneksi ke basis data baru menggunakan perintah berikut:

   ```
   \c app
   ```

1. Buat ekstensi `pgactive` pada basis data yang ada.

   ```
   app=> CREATE EXTENSION pgactive;
   ```

1. 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`.

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

1. 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
   ```

1. Jalankan perintah berikut ini untuk memasukkan nilai baru:

   ```
   app=> INSERT INTO inventory.products (id, product_name) VALUES (4, 'lotion');
   ```

1. 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']);
   ```

1. 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);
   ```

1. Hapus sementara ekstensi menggunakan perintah berikut ini:

   ```
   app=> DROP EXTENSION pgactive;
   ```