

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 logica PostgreSQL con cluster DB per Amazon RDS Multi-AZ
<a name="USER_MultiAZDBCluster_LogicalRepl"></a>

Utilizzando la replica logica PostgreSQL con Multi-AZ il cluster DB, è possibile replicare e sincronizzare singole tabelle anziché l'intera istanza del database. La replica logica utilizza un modello di pubblicazione e sottoscrizione per replicare le modifiche da un'origine in uno o più destinatari. Funziona utilizzando i record di modifica del WAL (write-ahead log) PostgreSQL. Per ulteriori informazioni, consulta [Esecuzione della replica logica per Amazon RDS for PostgreSQL](PostgreSQL.Concepts.General.FeatureSupport.LogicalReplication.md).

Quando si crea un nuovo slot di replica logica sull'istanza Writer DB di un cluster Multi-AZ DB, lo slot viene copiato in modo asincrono su ogni istanza DB reader del cluster. Gli slot delle istanze database di lettura vengono continuamente sincronizzati con quelli dell'istanza database di scrittura.

La replica logica è supportata per i cluster Multi-AZ DB che eseguono RDS per PostgreSQL versione 14.8-R2 e successive e 15.3-R2 e successive.

**Nota**  
Oltre alla funzionalità di replica logica nativa di PostgreSQL, anche i cluster Multi-AZ DB che eseguono RDS per PostgreSQL supportano l'estensione. `pglogical`

Per ulteriori informazioni sulla funzionalità di replica logica di PostgreSQL, consulta la sezione relativa alla [replica logica](https://www.postgresql.org/docs/current/logical-replication.html) nella documentazione di PostgreSQL.

**Topics**
+ [Prerequisiti](#multi-az-db-clusters-logical-replication-prereqs)
+ [Configurazione della replica logica](#multi-az-db-clusters-logical-replication)
+ [Limitazioni e consigli](#multi-az-db-clusters-logical-replication-limitations)

## Prerequisiti
<a name="multi-az-db-clusters-logical-replication-prereqs"></a>

Per configurare la replica logica PostgreSQL Multi-AZ per i cluster DB, è necessario soddisfare i seguenti prerequisiti.
+ L'account utente deve essere membro del gruppo `rds_superuser` e disporre dei privilegi `rds_superuser`. Per ulteriori informazioni, consulta [Informazioni su ruoli e autorizzazioni di PostgreSQL](Appendix.PostgreSQL.CommonDBATasks.Roles.md).
+ Il cluster Multi-AZ DB deve essere associato a un gruppo di parametri del cluster DB personalizzato in modo da poter configurare i valori dei parametri descritti nella procedura seguente. Per ulteriori informazioni, consulta [Utilizzo dei gruppi di parametri del cluster DB per i cluster Multi-AZ DB](USER_WorkingWithDBClusterParamGroups.md).

## Configurazione della replica logica
<a name="multi-az-db-clusters-logical-replication"></a>

Per configurare la replica logica per un cluster Multi-AZ DB, si abilitano parametri specifici all'interno del gruppo di parametri del cluster DB associato, quindi si creano slot di replica logica.

**Nota**  
A partire dalla versione 16 di PostgreSQL, è possibile utilizzare istanze Reader DB del Multi-AZ cluster DB per la replica logica.

**Per configurare la replica logica per un cluster DB RDS per PostgreSQL Multi-AZ**

1. Apri il gruppo di parametri del cluster DB personalizzato associato al tuo cluster DB RDS per PostgreSQL Multi-AZ . 

1. Nel campo di ricerca **Parametri**, individua il parametro statico `rds.logical_replication` e imposta il relativo valore su `1`. La modifica di questo parametro può aumentare la generazione di WAL, quindi abilita questo parametro la solo quando utilizzi slot logici.

1. Nell'ambito di questa modifica, configura i seguenti parametri del cluster database.
   + `max_wal_senders`
   + `max_replication_slots`
   + `max_connections`

   A secondo dell'utilizzo previsto, potrebbe anche essere necessario modificare i valori dei seguenti parametri. Tuttavia, in molti casi, i valori predefiniti sono sufficienti.
   + `max_logical_replication_workers`
   + `max_sync_workers_per_subscription`

1. Riavvia il cluster Multi-AZ DB per rendere effettivi i valori dei parametri. Per istruzioni, consulta [Riavvio di un cluster Multi-AZ DB e di lettura di istanze DB per Amazon RDS](multi-az-db-clusters-concepts-rebooting.md).

1. Crea uno slot di replica logica sull'istanza Writer DB del cluster Multi-AZ DB come spiegato in. [Lavorare con gli slot di replica logica](PostgreSQL.Concepts.General.FeatureSupport.LogicalReplication.md#PostgreSQL.Concepts.General.FeatureSupport.LogicalReplicationSlots) Questo processo richiede che venga specificato un plug-in di decodifica. Attualmente RDS per PostgreSQL supporta i plugin `test_decoding`, `wal2json` e `pgoutput` forniti con PostgreSQL.

   Lo slot viene copiato in modo asincrono su ogni istanza database di lettura nel cluster.

1. Verifica lo stato dello slot su tutte le istanze DB di lettura del cluster Multi-AZ DB. A tale scopo, verifica la vista `pg_replication_slots` su tutte le istanze database di lettura e assicurati che lo stato `confirmed_flush_lsn` stia progredendo mentre l'applicazione sta utilizzando attivamente le modifiche logiche.

   I seguenti comandi mostrano come controllare lo stato di replica sulle istanze database di lettura.

   ```
   % psql -h test-postgres-instance-2.abcdefabcdef.us-west-2.rds.amazonaws.com
   
   postgres=> select slot_name, slot_type, confirmed_flush_lsn from pg_replication_slots;
     slot_name   | slot_type | confirmed_flush_lsn
   --------------+-----------+---------------------
    logical_slot | logical   | 32/{{D0001700}}
   (1 row)
   
   postgres=> select slot_name, slot_type, confirmed_flush_lsn from pg_replication_slots;
     slot_name   | slot_type | confirmed_flush_lsn
   --------------+-----------+---------------------
    logical_slot | logical   | 32/{{D8003628}}
   (1 row)
   
   % psql -h test-postgres-instance-3.abcdefabcdef.us-west-2.rds.amazonaws.com
   
   postgres=> select slot_name, slot_type, confirmed_flush_lsn from pg_replication_slots;
     slot_name   | slot_type | confirmed_flush_lsn
   --------------+-----------+---------------------
    logical_slot | logical   | 32/{{D0001700}}
   (1 row)
   
   postgres=> select slot_name, slot_type, confirmed_flush_lsn from pg_replication_slots;
     slot_name   | slot_type | confirmed_flush_lsn
   --------------+-----------+---------------------
    logical_slot | logical   | 32/{{D8003628}}
   (1 row)
   ```

Dopo aver completato le attività di replica, interrompi il processo di replica, elimina gli slot di replica e disattiva la replica logica. Per disattivare la replica logica, modifica il gruppo di parametri del cluster database e reimposta il valore di `rds.logical_replication` su `0`. Riavvia il cluster database per applicare la modifica apportata al parametro.

## Limitazioni e consigli
<a name="multi-az-db-clusters-logical-replication-limitations"></a>

Le seguenti limitazioni e raccomandazioni si applicano all'utilizzo della replica logica con cluster Multi-AZ DB che eseguono PostgreSQL versione 16:
+ È possibile utilizzare solo istanze database di scrittura per creare o eliminare slot di replica logica. Ad esempio, il comando `CREATE SUBSCRIPTION` deve utilizzare l’endpoint di scrittura del cluster nella stringa di connessione host.
+ È necessario utilizzare l’endpoint di scrittura del cluster durante qualsiasi sincronizzazione o risincronizzazione delle tabelle. Ad esempio, è possibile utilizzare i seguenti comandi per risincronizzare una tabella appena aggiunta:

  ```
  Postgres=>ALTER SUBSCRIPTION {{subscription-name}} CONNECTION host={{writer-endpoint}}
  Postgres=>ALTER SUBSCRIPTION {{subscription-name}} REFRESH PUBLICATION
  ```
+ È necessario attendere il completamento della sincronizzazione della tabella prima di utilizzare le istanze database di lettura per la replica logica. È possibile utilizzare la tabella di catalogo `[pg\_subscription\_rel](https://www.postgresql.org/docs/current/catalog-pg-subscription-rel.html)` per monitorare la sincronizzazione della tabella. La sincronizzazione della tabella è completata quando la colonna `srsubstate` è impostata su Pronto (`r`).
+ È consigliabile utilizzare gli endpoint dell’istanza per la connessione della replica logica una volta completata la sincronizzazione iniziale della tabella. Il seguente comando riduce il carico sull’istanza database di scrittura spostando la replica su una delle istanze database di lettura:

  ```
  Postgres=>ALTER SUBSCRIPTION {{subscription-name}} CONNECTION host={{reader-instance-endpoint}}
  ```

  Non è possibile utilizzare lo stesso slot su più di un’istanza database alla volta. Quando due o più applicazioni replicano le modifiche logiche da diverse istanze database nel cluster, alcune modifiche potrebbero andare perse a causa di un failover del cluster o di un problema di rete. In queste situazioni, è possibile utilizzare gli endpoint dell’istanza per la replica logica nella stringa di connessione host. L’altra applicazione che utilizza la stessa configurazione mostrerà il seguente messaggio di errore:

  ```
  replication slot {{slot_name}} is already active for PID {{x}} providing immediate feedback.
  ```
+ Se si utilizza l’estensione `pglogical`, è possibile utilizzare solo l’endpoint del cluster di scrittura. L’estensione presenta limitazioni note che possono creare slot di replica logica inutilizzati durante la sincronizzazione della tabella. Gli slot di replica obsoleti riservano i file WAL (write-ahead log) e possono causare problemi di spazio su disco.