

Le traduzioni sono generate tramite traduzione automatica. In caso di conflitto tra il contenuto di una traduzione e la versione originale in Inglese, quest'ultima prevarrà.

# Configurazione della replica active-active per istanze database RDS per PostgreSQL
<a name="Appendix.PostgreSQL.CommonDBATasks.pgactive.setup-replication"></a>

La seguente procedura mostra come avviare la replica attiva-attiva istanze database RDS per PostgreSQL in cui è disponibile `pgactive`. Per eseguire l'esempio di elevata disponibilità multiregionale, devi distribuire istanze Amazon RDS per PostgreSQL in due regioni diverse e configurare il peering VPC. Per ulteriori informazioni, consulta [Peering VPC](https://docs.aws.amazon.com/vpc/latest/peering/what-is-vpc-peering.html).

**Nota**  
L'invio di traffico tra più regioni può comportare costi aggiuntivi.

Questi passaggi presuppongono che l’istanza database RDS per PostgreSQL sia stata abilitata con l’estensione `pgactive`. Per ulteriori informazioni, consulta [Inizializzazione della funzionalità di estensione pgactive](Appendix.PostgreSQL.CommonDBATasks.pgactive.basic-setup.md). 

**Configurazione della prima istanza database RDS per PostgreSQL con l'estensione `pgactive`**

L'esempio seguente illustra come viene creato il gruppo `pgactive`, insieme ad altri passaggi necessari per creare l'estensione `pgactive`sull'istanza database RDS per PostgreSQL.

1. Usa `psql` o un altro strumento client per connetterti alla tua prima istanza database RDS per PostgreSQL.

   ```
   psql --host=firstinstance.111122223333.aws-region.rds.amazonaws.com --port=5432 --username=postgres --password=PASSWORD --dbname=postgres
   ```

1. Crea un database sull'istanza RDS per PostgreSQL utilizzando il seguente comando:

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

1. Passa alla connessione al nuovo database utilizzando il seguente comando:

   ```
   \c app
   ```

1. Crea e popola una tabella di esempio utilizzando le seguenti istruzioni SQL:

   1. Crea una tabella di esempio utilizzando la seguente istruzione SQL.

      ```
      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. Popola la tabella con alcuni dati di esempio utilizzando la seguente istruzione SQL.

      ```
      app=> INSERT INTO inventory.products (id, product_name)
      VALUES (1, 'soap'), (2, 'shampoo'), (3, 'conditioner');
      ```

   1. Verifica che i dati siano presenti nella tabella utilizzando la seguente istruzione SQL.

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

1. Crea l'estensione `pgactive` database esistente.

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

1. Per creare e inizializzare il gruppo pgactive in modo sicuro, utilizza i seguenti comandi:

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

   Ora puoi inizializzare il gruppo di replica e aggiungere questa prima istanza:

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

   Utilizza i seguenti comandi come metodo alternativo, ma meno sicuro, per creare e inizializzare il gruppo 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 è il nome che assegni per identificare in modo univoco un nodo nel gruppo `pgactive`.
**Nota**  
Per eseguire correttamente questo passaggio su un'istanza database accessibile pubblicamente, è necessario attivare il parametro `rds.custom_dns_resolution` impostandolo su `1`.

1. Per verificare se l'istanza database è pronta, usa il seguente comando:

   ```
   app=> SELECT pgactive.pgactive_wait_for_node_ready();
   ```

   Se il comando viene eseguito correttamente, verrà visualizzato il seguente output:

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

**Configurazione della seconda istanza RDS per PostgreSQL e collegamento al gruppo `pgactive`**

L'esempio seguente illustra come puoi collegare un'istanza database RDS per PostgreSQL al gruppo `pgactive`, insieme ad altri passaggi necessari per creare l'estensione `pgactive` sull'istanza database.

Questi passaggi presuppongono che sia stata eseguita la configurazione di un ulteriore istanza database RDS per PostgreSQL con l'estensione `pgactive`. Per ulteriori informazioni, consulta [Inizializzazione della funzionalità di estensione pgactive](Appendix.PostgreSQL.CommonDBATasks.pgactive.basic-setup.md). 

1. Utilizza `psql` per connetterti all'istanza per cui vuoi ricevere gli aggiornamenti dal publisher.

   ```
   psql --host=secondinstance.111122223333.aws-region.rds.amazonaws.com --port=5432 --username=postgres --password=PASSWORD --dbname=postgres
   ```

1. Crea un database sulla seconda istanza database RDS per PostgreSQL utilizzando il seguente comando:

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

1. Passa alla connessione al nuovo database utilizzando il seguente comando:

   ```
   \c app
   ```

1. Crea l'estensione `pgactive` database esistente.

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

1. Unisci la seconda istanza database RDS per PostgreSQL al gruppo `pgactive` in modo più sicuro utilizzando i seguenti comandi:

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

   Utilizza i comandi indicati di seguito come metodo alternativo, ma meno sicuro, per unire la seconda istanza database RDS per PostgreSQL al gruppo `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 è il nome che assegni per identificare in modo univoco un nodo nel gruppo `pgactive`.

1. Per verificare se l'istanza database è pronta, usa il seguente comando:

   ```
   app=> SELECT pgactive.pgactive_wait_for_node_ready(); 
   ```

   Se il comando viene eseguito correttamente, verrà visualizzato il seguente output:

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

   Se il primo database RDS per PostgreSQL è relativamente grande, puoi vedere l'emissione di `pgactive.pgactive_wait_for_node_ready()` del report sullo stato di avanzamento dell'operazione di ripristino. L'esito si presenta in maniera analoga all'immagine riportata di seguito.

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

   Da questo momento in poi, `pgactive` sincronizza i dati tra le due istanze database.

1. Puoi utilizzare il comando seguente per verificare se il database della seconda istanza database contiene i dati:

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

   Se i dati vengono sincronizzati correttamente, verrà visualizzato il seguente output:

   ```
    count
   -------
    3
   ```

1. Esegui il seguente comando per inserire nuovi valori:

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

1. Connettiti al database della prima istanza database ed esegui la seguente query:

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

   Se la replica active-active è inizializzata, l'output è simile al seguente:

   ```
   count
   -------
    4
   ```

**Scollegamento e rimozione di un'istanza database dal gruppo `pgactive`**

Puoi scollegare e rimuovere un'istanza database dal gruppo `pgactive` utilizzando la procedura seguente:

1. Puoi scollegare la seconda istanza database dalla prima istanza database utilizzando il seguente comando:

   ```
   app=> SELECT * FROM pgactive.pgactive_detach_nodes(ARRAY[‘node2-app']);
   ```

1. Rimuovi l'estensione `pgactive` dalla seconda istanza database utilizzando il seguente comando:

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

   Per rimuovere forzatamente l'estensione:

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

1. Elimina l'estensione usando il seguente comando:

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