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
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.
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.
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 pgactivesull'istanza database RDS per PostgreSQL.
-
Usa
psqlo 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 -
Crea un database sull'istanza RDS per PostgreSQL utilizzando il seguente comando:
postgres=>CREATE DATABASEapp; -
Passa alla connessione al nuovo database utilizzando il seguente comando:
\capp -
Crea e popola una tabella di esempio utilizzando le seguenti istruzioni SQL:
-
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); -
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'); -
Verifica che i dati siano presenti nella tabella utilizzando la seguente istruzione SQL.
app=>SELECT count(*) FROM inventory.products;count ------- 3
-
-
Crea l'estensione
pgactivedatabase esistente.app=>CREATE EXTENSION pgactive; -
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=apphost=firstinstance.111122223333.aws-region.rds.amazonaws.com user=postgrespassword=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_resolutionimpostandolo su1. -
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.
-
Utilizza
psqlper 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 -
Crea un database sulla seconda istanza database RDS per PostgreSQL utilizzando il seguente comando:
postgres=>CREATE DATABASEapp; -
Passa alla connessione al nuovo database utilizzando il seguente comando:
\capp -
Crea l'estensione
pgactivedatabase esistente.app=>CREATE EXTENSION pgactive; -
Unisci la seconda istanza database RDS per PostgreSQL al gruppo
pgactivein 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
pgactiveapp=>SELECT pgactive.pgactive_join_group( node_name :='node2-app', node_dsn := 'dbname=apphost=secondinstance.111122223333.aws-region.rds.amazonaws.com user=postgrespassword=PASSWORD', join_using_dsn := 'dbname=apphost=firstinstance.111122223333.aws-region.rds.amazonaws.com user=postgrespassword=PASSWORD');node2-app è il nome che assegni per identificare in modo univoco un nodo nel gruppo
pgactive. -
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,
pgactivesincronizza i dati tra le due istanze database. -
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 -
Esegui il seguente comando per inserire nuovi valori:
app=>INSERT INTO inventory.products (id, product_name) VALUES (4, 'lotion'); -
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:
-
Puoi scollegare la seconda istanza database dalla prima istanza database utilizzando il seguente comando:
app=>SELECT * FROM pgactive.pgactive_detach_nodes(ARRAY[‘node2-app']); -
Rimuovi l'estensione
pgactivedalla 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); -
Elimina l'estensione usando il seguente comando:
app=>DROP EXTENSION pgactive;