Rufen Sie WAL-Dateien von der AWS RDS PostgreSQL-Instanz ab

18

Wir haben eine Postgres RDS-Instanz bei Amazon Web Services. Wir haben automatische Backups aktiviert und machen täglich Snapshots. Wir möchten eine lokale "aktuelle" Sicherung der RDS-Instanz erstellen, die wir selbst verwalten können. Das Ausführen von pg_dump für die Instanz ist nicht ausreichend, da die Datenbank zu jedem Zeitpunkt wiederhergestellt werden soll. Wir würden eine lokale Sicherung von RDS und allen WAL-Dateien vorziehen, da diese Sicherung erstellt wurde. Fragen:

  1. Ist es möglich, auf die WAL-Dateien und Sicherungen zuzugreifen, die RDS in seiner Sicherungsroutine automatisch erstellt? Das wäre ideal. Ich möchte eine lokale Kopie davon herunterladen. Nach der ersten Untersuchung habe ich das Gefühl, dass die Antwort auf diese Frage "Nein" lautet. Es hört sich so an, als würde RDS seine WAL-Dateien und Backups in S3 speichern, aber es macht sie für uns unzugänglich. Ich würde die Bestätigung lieben.

  2. Gibt es eine andere Möglichkeit, auf Transaktionen (WAL-Dateien) zuzugreifen, die in der RDS-Instanz aufgetreten sind? Ich stelle mir vor, wir sollten in der Lage sein, eine Postgres-Datenbank für eine EC2-Instanz zu erstellen und Transaktionen von unserer primären "Live" -RDS-Instanz in diese EC2-Instanz einzugeben. Sobald unsere EC2-Instanz aktualisiert ist, können wir WAL-Dateien von dort abrufen. Was für Kopfschmerzen: / Ist dieses Setup möglich? Was ist die Magie, um von unserer RDS-Instanz zur EC2-Instanz zu "füttern", damit sie immer auf dem neuesten Stand ist?

Vielen Dank!

jason.zissman
quelle

Antworten:

17

Update: Ich habe dies in den AWS-Foren gepostet. Bitte melden Sie sich an und fragen Sie dort nach .


Zum Zeitpunkt des Schreibens unterstützt Amazon RDS keine physische Replikation außerhalb von RDS. Sie können GRANTdas REPLICATIONRecht eines rds_superuserBenutzers mit einem Login, aber Sie können keine replicationEinträge für externe IPs in konfigurieren pg_hba.conf.

Außerdem werden beim Erstellen einer DB-Parametergruppe in RDS einige Schlüsselparameter angezeigt, jedoch gesperrt, z. B. archive_commanddie gesperrt sind /etc/rds/dbbin/pgscripts/rds_wal_archive %p. AWS RDS für PostgreSQL macht diese WALs anscheinend nicht für den externen Zugriff verfügbar (z. B. über S3), wie dies erforderlich wäre, wenn Sie die WAL-Versandreplikation für externe PITR verwenden würden.

Wenn Sie also Wal-Shipping möchten, verwenden Sie an dieser Stelle kein RDS. Es ist eine einfach zu verwendende Datenbank in Dosen, aber einfach zu verwenden bedeutet oft, dass sie auch begrenzt ist, und das ist hier sicherlich der Fall. Wie Joe Love in den Kommentaren ausführt, werden WAL-Versand und PITR innerhalb von RDS bereitgestellt , aber Sie können von außerhalb von RDS keinen Zugriff auf die WAL erhalten .

Sie müssen daher die eigenen Backup-Funktionen von RDS verwenden - Speicherauszüge, Snapshots und ein eigenes WAL-basiertes PITR.


Selbst wenn Sie mit RDS Replikationsverbindungen (für pg_basebackupoder Streaming von Replikationen) herstellen und auf archivierte WAL zugreifen konnten, können Sie diese WAL möglicherweise nicht tatsächlich nutzen. RDS führt ein gepatchtes PostgreSQL aus, obwohl niemand weiß, wie stark gepatcht oder ob es das Format auf der Festplatte erheblich verändert. Es läuft auch auf der von Amazon ausgewählten Architektur, die wahrscheinlich x64 Linux ist, aber nicht leicht zu bestimmen ist. Da das PostgreSQL-Festplattenformat und die Replikation von der Architektur abhängig sind, können Sie nur auf Hosts replizieren, die dieselbe Architektur wie die von Amazon RDS verwenden, und nur dann, wenn Ihr PostgreSQL-Build mit deren kompatibel ist.

Dies bedeutet unter anderem, dass Sie keine einfache Möglichkeit haben, von RDS wegzuwandern. Sie müssten alle Schreibvorgänge in die Datenbank so lange anhalten, bis a ausgeführt pg_dump, wiederhergestellt und die neue Datenbank in Betrieb genommen werden kann. Die üblichen Tricks mit Replikation und Failover, mit rsync usw. funktionieren nicht, da Sie keinen direkten Zugriff auf den DB-Host haben.

Selbst wenn RDS ein nicht gepatchtes PostgreSQL-Programm ausführen würde, möchte Amazon Ihnen pg_basebackupaus Sicherheitsgründen wahrscheinlich nicht erlauben, WAL-Streaming in RDS oder Import in RDS durchzuführen. PostgreSQL behandelt das Datenverzeichnis als vertrauenswürdigen Inhalt, und wenn Sie clevere 'LANGUAGE c'-Funktionen entwickelt haben, die interne Funktionen einbinden, oder andere knifflige Aufgaben ausführen, können Sie den Server möglicherweise ausnutzen, um einen größeren Zugriff zu erhalten, als Sie eigentlich hätten . Daher wird Amazon in Kürze keine eingehenden WAL-Anfragen mehr zulassen.

Sie könnten ausgehenden WAL-Versand unterstützen, aber die oben genannten Probleme mit Formatkompatibilität, Änderungsfreiheit usw. gelten weiterhin.


Verwenden Sie stattdessen ein Tool wie Londiste oder Bucardo.

Craig Ringer
quelle
Wenn RDS PITR nicht unterstützt, wofür ist die Schaltfläche "Auf einen bestimmten Zeitpunkt wiederherstellen" geeignet?
Joe Love
1
RDS unterstützt PITR innerhalb von RDS . Sie können WAL nicht außerhalb von RDS versenden . Ich bearbeite, um dies in der Antwort zu verdeutlichen, da ich sehen kann, wie Sie es lesen konnten, als ob RDS überhaupt keine PITR-Unterstützung hatte.
Craig Ringer
1

Die Replikation mit Trigger-basierten Systemen wie Londiste und Bucardo in und aus RDS wird ab dem 10. November 2014 gemäß einer Antwort in diesem Forenthread unterstützt .

Ankündigung hier

Michel-SLM
quelle
1
Das ist praktisch - aber es ist nicht dasselbe, über das hier gesprochen wird. Sie bieten Unterstützung für die auslöserbasierte logische Replikation wie Bucardo und Londiste mit RDS. Dies fügt keine Unterstützung für "physisches" protokollbasiertes Streaming hinzu, wie es von Hot Standby pg_basebackupusw. verwendet wird. Sie haben die beste Wahl getroffen, da sie aus Sicherheitsgründen die physische Replikation nicht wirklich unterstützen können.
Craig Ringer
Aha, ja. Und danke für die Bearbeitung. Ich habe diese Frage von einem anderen, der allgemeiner nach Replikationsoptionen gefragt hat - sollte bemerkt haben, dass dieser speziell nach WAL-Dateien fragt.
Michel-Slm
Bitte fügen Sie dann auch einen Link zu der entsprechenden Frage hinzu. Das wäre sowieso nützlich.
Craig Ringer
Hier bist du - werde meine Antwort auch dort posten
michel-slm