Configurazione della replica active-active per istanze database RDS per PostgreSQL - Amazon Relational Database Service

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 procedura seguente mostra come avviare la replica attiva-attiva tra due cluster . 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 DB RDS for 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.

  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
  2. Crea un database sull'istanza RDS per PostgreSQL utilizzando il seguente comando:

    postgres=> CREATE DATABASE app;
  3. Passa alla connessione al nuovo database utilizzando il seguente comando:

    \c app
  4. 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);
    2. 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');
    3. Verifica che i dati siano presenti nella tabella utilizzando la seguente istruzione SQL.

      app=>SELECT count(*) FROM inventory.products; count ------- 3
  5. Crea l'estensione pgactive database esistente.

    app=> CREATE EXTENSION pgactive;
  6. Per creare e inizializzare in modo sicuro il gruppo pgactive, usa 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' );

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

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

  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
  2. Crea un database sulla seconda istanza database RDS per PostgreSQL utilizzando il seguente comando:

    postgres=> CREATE DATABASE app;
  3. Passa alla connessione al nuovo database utilizzando il seguente comando:

    \c app
  4. Crea l'estensione pgactive database esistente.

    app=> CREATE EXTENSION pgactive;
  5. Unisci la seconda RDS per PostgreSQL al gruppo in modo più sicuro utilizzando i seguenti comandi: 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' );

    Utilizza i seguenti comandi come metodo alternativo ma meno sicuro per aggiungere la seconda istanza DB del cluster Aurora PostgreSQL (RDS ) 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.

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

  7. 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
  8. Esegui il seguente comando per inserire nuovi valori:

    app=> INSERT INTO inventory.products (id, product_name) VALUES (4, 'lotion');
  9. 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']);
  2. 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);
  3. Elimina l'estensione usando il seguente comando:

    app=> DROP EXTENSION pgactive;