Transportieren Sie PostgreSQL-Datenbanken zwischen zwei Amazon RDS-DB-Instances mithilfe von pg_transport - AWS Prescriptive Guidance

Die vorliegende Übersetzung wurde maschinell erstellt. Im Falle eines Konflikts oder eines Widerspruchs zwischen dieser übersetzten Fassung und der englischen Fassung (einschließlich infolge von Verzögerungen bei der Übersetzung) ist die englische Fassung maßgeblich.

Transportieren Sie PostgreSQL-Datenbanken zwischen zwei Amazon RDS-DB-Instances mithilfe von pg_transport

Erstellt von Raunak Rishabh (AWS) und Jitender Kumar (AWS)

Umgebung: PoC oder Pilotprojekt

Quelle: Datenbanken: Relational

Ziel: Amazon RDS for PostgreSQL

R-Typ: Umziehen

Arbeitslast: Open Source

Technologien: Migration; Datenbanken

AWS-Dienste: Amazon RDS

Übersicht

Dieses Muster beschreibt die Schritte für die Migration extrem großer Datenbanken zwischen zwei Amazon Relational Database Service (Amazon RDS) für PostgreSQL-DB-Instances mithilfe der Erweiterung pg_transport. Diese Erweiterung bietet einen physischen Transportmechanismus, um jede Datenbank zu verschieben. Durch das Streamen der Datenbankdateien mit minimaler Verarbeitung bietet es eine extrem schnelle Methode für die Migration großer Datenbanken zwischen DB-Instances mit minimaler Ausfallzeit. Diese Erweiterung verwendet ein Pull-Modell, bei dem die Ziel-DB-Instance die Datenbank aus der Quell-DB-Instance importiert.

Voraussetzungen und Einschränkungen

Voraussetzungen

  • Beide DB-Instances müssen dieselbe Hauptversion von PostgreSQL ausführen.

  • Die Datenbank darf auf dem Ziel nicht existieren. Andernfalls schlägt der Transport fehl.

  • In der Quelldatenbank darf keine andere Erweiterung als pg_transport aktiviert sein.

  • Alle Quelldatenbankobjekte müssen sich im Standard-Tablespace pg_default befinden.

  • Die Sicherheitsgruppe der Quell-DB-Instance sollte Traffic von der Ziel-DB-Instance zulassen.

  • Installieren Sie einen PostgreSQL-Client wie psql oder PgAdminum mit der Amazon RDS PostgreSQL-DB-Instance zu arbeiten. Sie können den Client entweder in Ihrem lokalen System installieren oder eine Amazon Elastic Compute Cloud (Amazon EC2) -Instance verwenden. In diesem Muster verwenden wir psql auf einer EC2-Instance.

Einschränkungen

  • Sie können Datenbanken nicht zwischen verschiedenen Hauptversionen von Amazon RDS for PostgreSQL transportieren.

  • Die Zugriffsrechte und der Besitz von der Quelldatenbank werden nicht auf die Zieldatenbank übertragen.

  • Sie können Datenbanken nicht auf Read Replicas oder auf übergeordneten Instanzen von Read Replicas transportieren.

  • Sie können Reg-Datentypen nicht in Datenbanktabellen verwenden, die Sie mit dieser Methode transportieren möchten.

  • Sie können insgesamt bis zu 32 Transporte (einschließlich Importe und Exporte) gleichzeitig auf einer DB-Instance ausführen.

  • Sie können Tabellen nicht umbenennen oder einschließen/ausschließen. Alles wird unverändert migriert.

Vorsicht

  • Erstellen Sie Sicherungskopien, bevor Sie die Erweiterung entfernen, da durch das Entfernen der Erweiterung auch abhängige Objekte und einige Daten entfernt werden, die für den Betrieb der Datenbank von entscheidender Bedeutung sind.

  • Berücksichtigen Sie die Instanzklasse und die Prozesse, die in anderen Datenbanken auf der Quellinstanz ausgeführt werden, wenn Sie die Anzahl der Worker und work_mem Werte für pg_transport bestimmen.

  • Wenn der Transport beginnt, werden alle Verbindungen in der Quelldatenbank beendet und die Datenbank wird in den schreibgeschützten Modus versetzt.

Hinweis: Wenn der Transport in einer Datenbank ausgeführt wird, hat er keine Auswirkungen auf andere Datenbanken auf demselben Server.

Versionen der Produkte

Architektur

Transport von PostgreSQL-Datenbanken zwischen Amazon RDS-DB-Instances

Tools

  • pg_transport bietet einen physischen Transportmechanismus zum Verschieben jeder Datenbank. Durch das Streamen der Datenbankdateien mit minimaler Verarbeitung werden Daten beim physischen Transport viel schneller übertragen als bei herkömmlichen Dump- und Ladeprozessen und es sind nur minimale Ausfallzeiten erforderlich. PostgreSQL-Transportdatenbanken verwenden ein Pull-Modell, bei dem die Ziel-DB-Instance die Datenbank aus der Quell-DB-Instance importiert. Sie installieren diese Erweiterung auf Ihren DB-Instances, wenn Sie die Quell- und Zielumgebungen vorbereiten, wie in diesem Muster erklärt.

  • Mit psql können Sie eine Verbindung zu Ihren PostgreSQL-DB-Instances herstellen und mit ihnen arbeiten. Informationen zur Installation von psql auf Ihrem System finden Sie auf der PostgreSQL-Downloadseite.

Epen

AufgabeBeschreibungErforderliche Fähigkeiten

Erstellen Sie eine Parametergruppe für das Zielsystem.

Geben Sie einen Gruppennamen an, der sie als Zielparametergruppe identifiziert, zum Beispielpgtarget-param-group. Anweisungen finden Sie in der Amazon RDS-Dokumentation.

DBA

Ändern Sie die Parameter für die Parametergruppe.

Legen Sie die folgenden Parameter fest:

  1. Fügen pg_transport Sie dem shared_preload_libraries Parameter hinzu.

    shared_preload_libraries = pg_stat_statements, pg_transport
  2. Legen Sie den Parameter pg_transport.num_workers fest. Wählen Sie die Anzahl der Mitarbeiter aus, mit denen Sie den Transport durchführen möchten. Der von Ihnen festgelegte Wert bestimmt die Anzahl der transport.send_file Mitarbeiter, die in der Quelle erstellt werden.

  3. Erhöhen Sie den Wert von max_worker_processes auf mehr als das Dreifache des Werts vonpg_transport.num_workers. Wenn Sie beispielsweise den Wert pg_transport.num_workers auf 4 setzen, sollte der max_worker_processes Wert mindestens 13 sein. Wenn dies fehlschlägt, empfiehlt pg_transport einen Mindestwert. 

  4. Auf 1 gesetztpg_transport.timing. Diese Einstellung ermöglicht die Meldung von Zeitinformationen während des Transports.

  5. Legen Sie den Parameter pg_transport.work_mem fest. Dieser Parameter gibt den maximalen Arbeitsspeicher an, der jedem Worker zugewiesen werden soll. Der Standardwert lautet 128 MB.

Weitere Informationen zu diesen Parametern finden Sie in der Amazon RDS-Dokumentation.

DBA
AufgabeBeschreibungErforderliche Fähigkeiten

Erstellen Sie eine Parametergruppe für das Quellsystem.

Geben Sie einen Gruppennamen an, der sie als Quellparametergruppe identifiziert, z. B.pgsource-param-group. Anweisungen finden Sie in der Amazon RDS-Dokumentation.

DBA

Ändern Sie die Parameter für die Parametergruppe.

Legen Sie die folgenden Parameter fest:

  1. Fügen pg_transport Sie dem shared_preload_libraries Parameter hinzu.

    shared_preload_libraries = pg_stat_statements, pg_transport
  2. Legen Sie den Parameter pg_transport.num_workers fest. Der Wert dieses Parameters, der im Ziel definiert ist, bestimmt die Anzahl der zu verwendenden transport.send_file Arbeitskräfte. Wenn auf dieser Instanz ein Import ausgeführt wird, erhöhen Sie diesen Wert, berücksichtigen Sie jedoch die Anzahl der Worker, die bereits ausgeführt werden.

  3. Erhöhen Sie den Wert von max_worker_processes auf mehr als das Dreifache des Werts von pg_transport.num_workers auf dem Ziel. Wenn Sie beispielsweise den Wert 4 für das Ziel pg_transport.num_workers auf 4 setzen, sollte der max_worker_processes Wert in der Quelle mindestens 13 sein. Wenn dies fehlschlägt, empfiehlt pg_transport einen Mindestwert. 

  4. Legen Sie den Parameter pg_transport.work_mem fest. Dieser Parameter gibt den maximalen Speicher an, der jedem Worker zugewiesen werden soll. Der Standardwert lautet 128 MB.

Weitere Informationen zu diesen Parametern finden Sie in der Amazon RDS-Dokumentation.

DBA
AufgabeBeschreibungErforderliche Fähigkeiten

Erstellen Sie eine neue Amazon RDS for PostgreSQL PostgreSQL-DB-Instance, in die Sie Ihre Quelldatenbank transportieren möchten.

Ermitteln Sie die Instanzklasse und die PostgreSQL-Version auf der Grundlage Ihrer Geschäftsanforderungen.

DBA, Systemadministrator, Datenbankarchitekt

Ändern Sie die Sicherheitsgruppe des Ziels, um Verbindungen über den DB-Instance-Port von der EC2-Instance aus zuzulassen.

Standardmäßig ist der Port für die PostgreSQL-Instanz 5432. Wenn Sie einen anderen Port verwenden, müssen die Verbindungen zu diesem Port für die EC2-Instance geöffnet sein.

DBA, Systemadministrator

Ändern Sie die Instanz und weisen Sie die neue Zielparametergruppe zu.

z. B. pgtarget-param-group.

DBA

Starten Sie die Amazon RDS-DB-Zielinstanz neu.

Die Parameter shared_preload_libraries und max_worker_processes sind statische Parameter und erfordern einen Neustart der Instance.

DBA, Systemadministrator

Stellen Sie mit psql von der EC2-Instance aus eine Connect zur Datenbank her.

Verwenden Sie den -Befehl: 

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

Erstellen Sie die Erweiterung pg_transport.

Führen Sie die folgende Abfrage als Benutzer mit der rds_superuser Rolle aus:

create extension pg_transport;
DBA
AufgabeBeschreibungErforderliche Fähigkeiten

Ändern Sie die Sicherheitsgruppe der Quelle, um Verbindungen auf dem DB-Instance-Port von der Amazon EC2 EC2-Instance und der Ziel-DB-Instance aus zuzulassen

Standardmäßig ist der Port für die PostgreSQL-Instanz 5432. Wenn Sie einen anderen Port verwenden, müssen die Verbindungen zu diesem Port für die EC2-Instance geöffnet sein.

DBA, Systemadministrator

Ändern Sie die Instanz und weisen Sie die neue Quellparametergruppe zu.

z. B. pgsource-param-group.

DBA

Starten Sie die Amazon RDS-DB-Quell-Instance neu.

Die Parameter shared_preload_libraries und max_worker_processes sind statische Parameter und erfordern einen Neustart der Instance.

DBA

Stellen Sie mit psql von der EC2-Instance aus eine Connect zur Datenbank her.

Verwenden Sie den -Befehl: 

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

Erstellen Sie die Erweiterung pg_transport und entfernen Sie alle anderen Erweiterungen aus den zu transportierenden Datenbanken.

Der Transport schlägt fehl, wenn in der Quelldatenbank andere Erweiterungen als pg_transport installiert sind. Dieser Befehl muss von einem Benutzer mit der rds_superuser Rolle ausgeführt werden.

DBA
AufgabeBeschreibungErforderliche Fähigkeiten

Führen Sie einen Probelauf durch.

Verwenden Sie die transport.import_from_server Funktion, um zuerst einen Probelauf durchzuführen:

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

Der letzte Parameter dieser Funktion (gesetzt auftrue) definiert den Probelauf.

Diese Funktion zeigt alle Fehler an, die beim Ausführen des Haupttransports auftreten würden. Beheben Sie die Fehler, bevor Sie den Haupttransport ausführen.

DBA

Wenn der Probelauf erfolgreich ist, initiieren Sie den Datenbanktransport.

Führen Sie die transport.import_from_server Funktion aus, um den Transport durchzuführen. Sie stellt eine Verbindung zur Quelle her und importiert die Daten. 

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

Der letzte Parameter dieser Funktion (gesetzt auffalse) gibt an, dass es sich nicht um einen Probelauf handelt.

DBA

Führen Sie die Schritte nach dem Transport durch.

Nachdem der Datenbanktransport abgeschlossen ist:

  • Überprüfen Sie die Daten in der Zielumgebung.

  • Fügen Sie dem Ziel alle Rollen und Berechtigungen hinzu.

  • Aktivieren Sie bei Bedarf alle erforderlichen Erweiterungen im Ziel und in der Quelle.

  • Setzt den Wert des max_worker_processes Parameters zurück.

DBA

Zugehörige Ressourcen