Migrieren Sie die Heroku-Datenbank mit minimaler Ausfallzeit zu Amazon RDS

15

Ich habe eine Heroku-Postgres-Datenbank und möchte diese zu Amazon RDS migrieren, um Kosten zu sparen. Wie geht das mit minimalen Ausfallzeiten? In der Regel wird dabei die Datenbank in Echtzeit repliziert und anschließend die replizierte Datenbank als Hauptdatenbank heraufgestuft.

Ich weiß, dass ich eine Follower-Datenbank verwenden kann, um DB in heroku zu migrieren, und ich kann eine Read Replica-Datenbank verwenden, um DB in Amazon RDS zu migrieren. Gibt es eine ähnliche Methode, um eine Datenbankreplikation von heroku DB zu erstellen, die in meinem eigenen Amazon RDS lebt?


quelle
2
Sie können einen Slave in RDS machen, wenn alles repliziert ist. Entfernen Sie den Heroku-Master. Befördern Sie RDS zum Master.
Sam
2
@SamD Ich glaube nicht, dass Amazon PostgreSQL-Slaves unterstützt, die noch von externen Datenbanken empfangen werden. Haben sie das hinzugefügt? Ich sehe es nicht in docs.aws.amazon.com/AmazonRDS/latest/UserGuide/… . Wenn es hinzugefügt wurde, wäre ein Dokumentationslink sehr dankbar. Wie füttert man es am pg_basebackupAnfang? Und mit unterschiedlichen Hauptversionen umgehen?
Craig Ringer

Antworten:

3

Ich bin mir ziemlich sicher, dass Sie hier ein altmodisches Dump-and-Restore durchführen müssen. Amazon bietet anscheinend keine anderen Importoptionen als das Laden in einen Dump:

http://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/PostgreSQL.Procedural.Importing.html

und selbst wenn dies der Fall ist, sind AFAICT die einzigen von Heroku angebotenen Exportoptionen pg_dumps (dh keine Basisbackups oder die Möglichkeit, einen externen Hot-Standby-Knoten einzurichten):

https://devcenter.heroku.com/articles/heroku-postgres-import-export

Wenn Sie Glück haben, verwenden Sie eine Postgres-Version, die neu genug ist, um sowohl parallelisiertes pg_dump (9.3+) als auch parallelisiertes pg_restore (8.4+) zu unterstützen, was Ihre Arbeit etwas beschleunigt. Und hoffentlich können Sie es sich leisten, ein Wartungsfenster einzurichten, in dem Sie Schreibvorgänge auf Ihrer Site sperren, während die Umstellung läuft ...

Josh Kupershmidt
quelle
1

Sie können Ihre aktuelle App mit der RDS-Datenbank verbinden und sie sowohl in Heroku als auch in RDS einfügen lassen. Ich beabsichtige nicht, die Replikation einzurichten, sondern nur in beide Server einzufügen.

Sobald dies eingerichtet ist, werden in beiden Datenbanken neue Datensätze gespeichert.

Es sollte leicht zu erkennen sein, welche Datensätze fehlen (zum Beispiel: In Tabelle 1 fehlen alle Datensätze mit der ID 100 oder niedriger), indem Sie die erste Zeile in der RDS-Datenbank lesen. Dann sollte es nicht allzu schwierig sein, ein einfaches Exportskript zu schreiben, es sei denn, Sie haben viele Tabellen.

Ich hoffe es hilft

Purefan
quelle
1

Es sieht so aus, als ob AWS DMS (Database Migration Service) die Migration von Daten aus externen SQL-Instanzen unterstützt. Ich konnte eine Migrationsaufgabe einrichten, die Daten und Änderungen von Heroku zu RDS repliziert. Ob es bei mir tatsächlich funktioniert ist noch abzuwarten;)

--- EDIT ---

Es sieht so aus, als würden Dienste wie DMS nicht mit Heroku funktionieren, da sie mehr privilegierte Rollen erfordern, als Heroku für ihre Datenbanken zulässt: https://help.heroku.com/E10ZZ6IJ/why-can-ti-use-third-party-tools -zu-replizieren-meine-heroku-postgres-datenbank-zu-einer-nicht-heroku-datenbank

Murphy Randle
quelle