Trasporta i database PostgreSQL tra due istanze DB Amazon RDS utilizzando pg_transport - Prontuario AWS

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

Trasporta i database PostgreSQL tra due istanze DB Amazon RDS utilizzando pg_transport

Creato da Raunak Rishabh (AWS) e Jitender Kumar (AWS)

Ambiente: PoC o pilota

Fonte: Database: Relazionale

Target: Amazon RDS per PostgreSQL

Tipo R: Trasferisci

Carico di lavoro: open source

Tecnologie: migrazione; database

Servizi AWS: Amazon RDS

Riepilogo

Questo modello descrive i passaggi per la migrazione di database estremamente grandi tra due istanze DB di Amazon Relational Database Service (Amazon RDS) per PostgreSQL utilizzando l'estensione pg_transport. Questa estensione fornisce un meccanismo di trasporto fisico per spostare i singoli database. Trasmettendo i file di database con un'elaborazione minima, fornisce un metodo estremamente veloce per migrare database di grandi dimensioni tra istanze DB con tempi di inattività minimi. Questa estensione utilizza un modello pull in cui l'istanza DB di destinazione importa il database dall'istanza DB di origine.

Prerequisiti e limitazioni

Prerequisiti

  • Entrambe le istanze DB devono eseguire la stessa versione principale di PostgreSQL.

  • Il database non deve esistere sulla destinazione. In caso contrario, il trasporto non riesce.

  • Nessuna estensione diversa da pg_transport deve essere abilitata nel database di origine.

  • Tutti gli oggetti del database di origine devono trovarsi nel tablespace pg_default predefinito.

  • Il gruppo di sicurezza dell'istanza DB di origine dovrebbe consentire il traffico proveniente dall'istanza DB di destinazione.

  • Installa un client PostgreSQL come psql o utilizza l'istanza database Amazon PgAdminRDS PostgreSQL. Puoi installare il client nel tuo sistema locale o utilizzare un'istanza Amazon Elastic Compute Cloud (Amazon EC2). In questo modello, utilizziamo psql su un'istanza EC2.

Limitazioni

  • Non puoi trasportare database tra diverse versioni principali di Amazon RDS for PostgreSQL.

  • I privilegi di accesso e la proprietà dal database di origine non vengono trasferiti al database di destinazione.

  • Non è possibile trasportare database su repliche di lettura o su istanze principali di repliche di lettura.

  • Non è possibile utilizzare i tipi di dati reg in nessuna tabella di database che si prevede di trasportare con questo metodo.

  • È possibile eseguire fino a 32 trasporti totali (incluse importazioni ed esportazioni) contemporaneamente su un'istanza DB.

  • Non è possibile rinominare o includere/escludere tabelle. Tutto viene migrato così com'è.

Attenzione

  • Eseguite dei backup prima di rimuovere l'estensione, poiché rimuovendo l'estensione vengono rimossi anche gli oggetti dipendenti e alcuni dati fondamentali per il funzionamento del database.

  • Considera la classe di istanza e i processi in esecuzione su altri database sull'istanza di origine quando determini il numero di worker e work_mem i valori per pg_transport.

  • All'avvio del trasporto, tutte le connessioni sul database di origine vengono interrotte e il database viene messo in modalità di sola lettura.

Nota: quando il trasporto è in esecuzione su un database, non influisce sugli altri database sullo stesso server.

Versioni del prodotto

  • Amazon RDS per PostgreSQL 10.10 e versioni successive e Amazon RDS for PostgreSQL 11.5 e versioni successive. Per informazioni sulla versione più recente, consulta Trasporto di database PostgreSQL tra istanze DB nella documentazione di Amazon RDS.

Architettura

Trasporto di database PostgreSQL tra istanze database Amazon RDS

Strumenti

  • pg_transport fornisce un meccanismo di trasporto fisico per spostare ogni database. Tramite lo streaming dei file di database con un'elaborazione minima, il trasporto fisico sposta i dati molto più velocemente rispetto ai tradizionali processi di dump e load e richiede tempi di inattività minimi. Transportable Database di PostgreSQL utilizza un modello pull in cui l'istanza database di destinazione importa il database dall'istanza database di origine. Questa estensione viene installata sulle istanze DB quando si preparano gli ambienti di origine e di destinazione, come spiegato in questo schema.

  • psql ti consente di connetterti e lavorare con le tue istanze DB PostgreSQL. Per installare psql sul tuo sistema, consulta la pagina dei download di PostgreSQL.

Epiche

AttivitàDescrizioneCompetenze richieste

Crea un gruppo di parametri per il sistema di destinazione.

Specificate un nome di gruppo che lo identifichi come gruppo di parametri di destinazione; ad esempio,pgtarget-param-group. Per istruzioni, consulta la documentazione di Amazon RDS.

DBA

Modificate i parametri per il gruppo di parametri.

Imposta i seguenti parametri:

  1. Aggiungi pg_transport al shared_preload_libraries parametro.

    shared_preload_libraries = pg_stat_statements, pg_transport
  2. Impostare il parametro pg_transport.num_workers. Scegli il numero di lavoratori con cui desideri eseguire il trasporto. Il valore impostato determina il numero di transport.send_file lavoratori che verranno creati nell'origine.

  3. Aumentate il valore di max_worker_processes a più di tre volte il valore dipg_transport.num_workers. Ad esempio, se si imposta il valore pg_transport.num_workers su 4, il max_worker_processes valore deve essere almeno 13. Se ciò fallisce, pg_transport consiglia un valore minimo. 

  4. Impostato su 1pg_transport.timing. Questa impostazione consente la segnalazione delle informazioni sulla tempistica durante il trasporto.

  5. Impostare il parametro pg_transport.work_mem. Questo parametro specifica la memoria massima da allocare a ciascun lavoratore. Il valore predefinito è 128 MB.

Per ulteriori informazioni su questi parametri, consulta la documentazione di Amazon RDS.

DBA
AttivitàDescrizioneCompetenze richieste

Crea un gruppo di parametri per il sistema di origine.

Specificate un nome di gruppo che lo identifichi come gruppo di parametri di origine; ad esempio,pgsource-param-group. Per istruzioni, consulta la documentazione di Amazon RDS.

DBA

Modificate i parametri per il gruppo di parametri.

Imposta i seguenti parametri:

  1. Aggiungi pg_transport al shared_preload_libraries parametro.

    shared_preload_libraries = pg_stat_statements, pg_transport
  2. Impostare il parametro pg_transport.num_workers. Il valore di questo parametro definito nell'obiettivo determina il numero di transport.send_file lavoratori da utilizzare. Se hai un'importazione in esecuzione su questa istanza, aumenta questo valore, ma considera il numero di lavoratori già in esecuzione.

  3. Aumentate il valore max_worker_processes di oltre tre volte il valore dell'pg_transport.num_workersobiettivo. Ad esempio, se imposti il valore su 4 sulla destinazione, il max_worker_processes valore sull'origine deve essere almeno 13. pg_transport.num_workers Se ciò fallisce, pg_transport consiglia un valore minimo. 

  4. Impostare il parametro pg_transport.work_mem. Questo parametro specifica la memoria massima da allocare a ciascun lavoratore. Il valore predefinito è 128 MB.

Per ulteriori informazioni su questi parametri, consulta la documentazione di Amazon RDS.

DBA
AttivitàDescrizioneCompetenze richieste

Crea una nuova istanza DB Amazon RDS for PostgreSQL in cui trasportare il database di origine.

Determina la classe dell'istanza e la versione di PostgreSQL in base ai tuoi requisiti aziendali.

DBA, amministratore di sistema, architetto del database

Modifica il gruppo di sicurezza della destinazione per consentire le connessioni sulla porta dell'istanza DB dall'istanza EC2.

Per impostazione predefinita, la porta per l'istanza PostgreSQL è 5432. Se stai usando un'altra porta, le connessioni a quella porta devono essere aperte per l'istanza EC2.

DBA, amministratore di sistema

Modifica l'istanza e assegna il nuovo gruppo di parametri di destinazione.

Ad esempio, pgtarget-param-group.

DBA

Riavvia l'istanza database Amazon RDS di destinazione.

I parametri shared_preload_libraries e max_worker_processes sono parametri statici e richiedono il riavvio dell'istanza.

DBA, amministratore di sistema

Connect al database dall'istanza EC2 utilizzando psql.

Utilizza il comando : 

psql -h <rds_end_point> -p PORT -U username -d database -W
DBA

Crea l'estensione pg_transport.

Esegui la seguente query come utente con il ruolo: rds_superuser

create extension pg_transport;
DBA
AttivitàDescrizioneCompetenze richieste

Modifica il gruppo di sicurezza dell'origine per consentire le connessioni sulla porta dell'istanza DB dall'istanza Amazon EC2 e dall'istanza DB di destinazione

Per impostazione predefinita, la porta per l'istanza PostgreSQL è 5432. Se stai usando un'altra porta, le connessioni a quella porta devono essere aperte per l'istanza EC2.

DBA, amministratore di sistema

Modifica l'istanza e assegna il nuovo gruppo di parametri di origine.

Ad esempio, pgsource-param-group.

DBA

Riavvia l'istanza database Amazon RDS di origine.

I parametri shared_preload_libraries e max_worker_processes sono parametri statici e richiedono il riavvio dell'istanza.

DBA

Connect al database dall'istanza EC2 utilizzando psql.

Utilizza il comando : 

psql -h <rds_end_point> -p PORT -U username -d database -W
DBA

Crea l'estensione pg_transport e rimuovi tutte le altre estensioni dai database da trasportare.

Il trasporto avrà esito negativo se nel database di origine sono installate estensioni diverse da pg_transport. Questo comando deve essere eseguito da un utente con il ruolo. rds_superuser

DBA
AttivitàDescrizioneCompetenze richieste

Esegui una corsa a secco.

Usa la transport.import_from_server funzione per eseguire prima una corsa a secco:

SELECT transport.import_from_server( 'source-db-instance-endpoint', source-db-instance-port, 'source-db-instance-user', 'source-user-password', 'source-database-name', 'destination-user-password', 'true');

L'ultimo parametro di questa funzione (impostato sutrue) definisce il funzionamento a secco.

Questa funzione visualizza tutti gli errori che si possono verificare durante l'esecuzione del trasporto principale. Risolvete gli errori prima di eseguire il trasporto principale.

DBA

Se l'esecuzione a secco ha esito positivo, avvia il trasporto del database.

Esegui la transport.import_from_server funzione per eseguire il trasporto. Si collega alla fonte e importa i dati. 

SELECT transport.import_from_server( 'source-db-instance-endpoint', source-db-instance-port, 'source-db-instance-user', 'source-user-password', 'source-database-name', 'destination-user-password', false);

L'ultimo parametro di questa funzione (impostato sufalse) indica che non si tratta di un funzionamento a secco.

DBA

Eseguire le fasi successive al trasporto.

Una volta completato il trasporto del database:

  • Convalida i dati nell'ambiente di destinazione.

  • Aggiungi tutti i ruoli e le autorizzazioni alla destinazione.

  • Abilita tutte le estensioni richieste nella destinazione e nell'origine, se necessario.

  • Ripristina il valore del max_worker_processes parametro.

DBA

Risorse correlate