Hinweis
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, sich anzumelden oder das Verzeichnis zu wechseln.
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, das Verzeichnis zu wechseln.
Dieser Leitfaden zeigt Ihnen, wie Sie Daten aus einer externen Postgres-Datenbank mithilfe der logischen Replikation in Lakebase replizieren können. Lakebase fungiert als Subscriber: Es verbindet sich mit deiner Quelldatenbank, kopiert die vorhandenen Daten und wendet laufende Änderungen an, bis du umschaltest. Nutzen Sie dies, um eine Datenbank von einem anderen Postgres-Anbieter, wie Amazon Aurora PostgreSQL oder Amazon RDS für PostgreSQL, oder von einem selbstverwalteten Postgres-Server nach Lakebase zu migrieren.
Voraussetzungen
- Eine Postgres-Quelldatenbank mit einem öffentlichen Endpunkt, den Lakebase erreichen kann.
- Superuser-Zugriff auf die Quelldatenbank oder das Admin-Konto eines verwalteten Postgres-Dienstes. Das Setzen von
wal_level, das Erstellen einer Rolle mit dem AttributREPLICATIONund das Erstellen einer Publikation erfordern alle diese Zugriffsebene. - Ein Lakebase-Projekt für die Zieldatenbank.
- Eine Lakebase-Postgres-Rolle zur Erstellung des Abonnements: ein Mitglied der
databricks_superuserRolle oder eine Rolle, der die vordefiniertepg_create_subscriptionRolle gewährt wurde. Siehe Erstellen von Postgres-Rollen.
Logische Replikation ist für Ihren Arbeitsbereich von Databricks aktiviert. Es gibt keinen projektbezogenen Schritt, um es einzuschalten. Da Lakebase der Abonnent ist, ist keine wal_level Änderung erforderlich. Nur der Quellverlag benötigt wal_level = logical.
Bereite die Quelldatenbank vor
Setzen Sie in Ihrer Quell-Postgres-Datenbank das Write-Ahead-Log auf logical und bestätigen Sie, dass Kapazitäten zur Replikation vorhanden sind. Das folgende Beispiel gilt für selbstverwaltetes Postgres. Ihr verwalteter Postgres-Anbieter könnte andere Einstellungen verwenden:
ALTER SYSTEM SET wal_level = logical;
ALTER SYSTEM SET max_wal_senders = 10;
ALTER SYSTEM SET max_replication_slots = 10;
Starte die Quelldatenbank neu, damit die wal_level Änderung wirksam wird. Bei einem verwalteten Dienst verwenden Sie die Parametergruppe oder Flags des Anbieters, um logical auf wal_level zu setzen. Zum Beispiel setzen Sie bei Amazon Aurora PostgreSQL rds.logical_replication in der Datenbank-Cluster-Parametergruppe auf 1 und starten Sie den Cluster neu. Auf Amazon RDS für PostgreSQL setzen Sie denselben Parameter in der Datenbank-Parametergruppe und starten Sie die Instanz neu.
Erstelle eine Rolle für die Replikation und gewähre ihr Lesezugriff auf die Tabellen, die du replizierst:
CREATE ROLE replication_user WITH REPLICATION LOGIN PASSWORD '<password>';
GRANT USAGE ON SCHEMA public TO replication_user;
GRANT SELECT ON ALL TABLES IN SCHEMA public TO replication_user;
Diese CREATE ROLE Aussage funktioniert wie geschrieben auf einem selbstverwalteten Postgres-Server. Einige verwaltete Postgres-Anbieter erlauben das Attribut REPLICATION nicht direkt und gewähren stattdessen Replikationszugriff über eine anbieterspezifische Rolle. Wenn deine Quelle auf einem verwalteten Dienst läuft, folge der Dokumentation des Anbieters, um der Rolle Replikationszugriff zu gewähren, und nutze diese Rolle anstelle von replication_user in den folgenden Schritten. Zum Beispiel erstelle bei Amazon Aurora PostgreSQL und Amazon RDS für PostgreSQL die Rolle ohne WITH REPLICATION und führe dann GRANT rds_replication TO replication_user aus.
Erstelle eine Veröffentlichung für die Tabellen, die du replizieren möchtest. Jede Tabelle muss eine PRIMARY KEY oder eine Replica-Identität festgelegt haben. Siehe Replica-Identität in der Postgres-Dokumentation.
CREATE PUBLICATION my_publication FOR TABLE orders, customers;
Erlauben Sie Lakebase, auf die Quelle zuzugreifen
Als Subscriber wählt sich Lakebase nach außen in Ihre Quelldatenbank ein. Diese ausgehende Verbindung wird durch die Netzwerkrichtlinie Ihres Kontos geregelt, die die Internetziele steuert, die serverlose Workloads erreichen können. Sie wird nicht durch eine Lakebase-Projekteinstellung oder eine Rolle in der Datenbank gesteuert.
Ob Sie eine Änderung vornehmen müssen, hängt davon ab, ob Ihr Konto eine Netzwerkrichtlinie durchsetzt:
- Keine aktive Netzwerkrichtlinie: Lakebase kann jeden Publisher erreichen, der einen erreichbaren öffentlichen Endpunkt hat. Es ist keine Änderung erforderlich.
- Eine aktive Netzwerkrichtlinie: Fügen Sie den Host der Quelldatenbank zu den erlaubten Internetzielen in der Netzwerkrichtlinie des Kontos hinzu. Siehe "Verwalten von Netzwerkrichtlinien". Wenn der Host nicht erlaubt ist, wird das Abonnement beim Erstellen abgelehnt. Informationen hierzu finden Sie unter Problembehandlung.
Private Link wird für die Abonnentenverbindung nicht unterstützt. Die Quelldatenbank muss über ihren öffentlichen Endpunkt erreichbar sein.
Erstellen Sie die Zieltabellen
Logische Replikation kopiert Daten, nicht Schema. Erstellen Sie die Tabellen in der Ziel-Lakebase-Datenbank mit denselben Namen und Spalten wie die Quelle, bevor Sie mit der Replikation beginnen. Du kannst sie manuell erstellen oder das Schema aus der Quelle exportieren und in Lakebase laden. Weitere Informationen unter Nur das Schema exportieren.
Erstelle die Zieltabellen leer. Die anfängliche Tabellenkopie scheitert bei doppelten Schlüsseln oder Einschränkungsverletzungen, wenn eine Zieltabelle bereits Zeilen enthält.
Erstellen Sie das Abonnement
Verbinden Sie sich mit der Ziel-Lakebase-Datenbank als Rolle, die Subskriptionen erstellen kann (siehe Voraussetzungen), und erstellen Sie dann eine Subskription, die mit dem Quellpublisher verbunden ist:
CREATE SUBSCRIPTION my_subscription
CONNECTION 'host=<source-host> port=5432 dbname=<source-db> user=replication_user password=<password> sslmode=verify-full sslrootcert=system'
PUBLICATION my_publication;
Das Erstellen des Abonnements startet einen Replikationsslot im Quell-Publisher, kopiert die vorhandenen Zeilen und streamt dann laufende Änderungen.
Warning
Der Replikationsslot sorgt dafür, dass die Quelldatenbank das Write-Ahead-Log (WAL) aufbehält, bis Lakebase bestätigt, dass es die Änderungen erhalten hat. Wenn das Abonnement keine Änderungen mehr konsumiert, zum Beispiel weil es deaktiviert ist, getrennt ist oder fehlschlägt, sammelt sich WAL unbegrenzt auf der Quelle. Bei einer Produktionsquelle kann dies den Speicher der Quelle füllen und zu einem Ausfall führen.
Während der Replikation beobachten Sie, wie viel WAL der Slot auf der Quelle zurückhält:
SELECT slot_name, active,
pg_catalog.pg_size_pretty(pg_catalog.pg_wal_lsn_diff(pg_catalog.pg_current_wal_lsn(), restart_lsn)) AS retained_wal
FROM pg_catalog.pg_replication_slots;
Um das Risiko bei einer selbstverwalteten Quelle zu begrenzen, legen Sie max_slot_wal_keep_size fest, um zu begrenzen, wie viel WAL ein Slot beibehalten kann. Überschreitet ein Slot das Limit, macht Postgres es ungültig und die Subskription muss neu erstellt werden. Kündige das Abonnement, sobald du die Migration abgeschlossen hast. Siehe Replikationsslots und Speicher.
Note
Wenn Lakebase ein Abonnement herstellt, verbindet es sich mit Ihrer Quelldatenbank und sendet die Zugangsdaten der Replikationsrolle an sie.
sslmode=verify-full mit sslrootcert=system verschlüsselt die Verbindung und verifiziert die Identität des Ursprungs, was die übermittelten Zugangsdaten gegen einen Mann-in-der-Mitte schützt. Es funktioniert, wenn deine Quelle ein Zertifikat einer öffentlich vertrauenswürdigen Zertifizierungsstelle verwendet. Die schwächere sslmode=require verschlüsselt, verifiziert aber nicht die Herkunft. Die Überprüfung einer Quelle, die eine private Zertifizierungsstelle verwendet, wird nicht unterstützt.
Überwachen und umschalten
Verfolgen Sie die erste Kopie und die andauernde Verzögerung:
SELECT subname, received_lsn, latest_end_lsn, last_msg_receipt_time
FROM pg_catalog.pg_stat_subscription;
Um zu bestätigen, dass die erste Kopie fertig ist, führen Sie die Statusabfrage pro Tabelle in Monitor replication auf dem Abonnenten aus und warten Sie, bis bei jeder Tabelle Ready (fully live) angezeigt wird.
Wenn das Ziel aufgeholt hat, stoppen Sie Schreibvorgänge auf der Quelle, bestätigen, dass das Ziel vollständig aktuell ist, und schalten Sie Ihre Anwendung auf die Lakebase-Verbindungsdetails um.
Logische Replikation kopiert keine Sequenzwerte oder Identitätszähler. Bevor Sie die Schreibvorgänge auf Lakebase fortsetzen, setzen Sie jede Zielsequenz zurück, um mit den replizierten Daten übereinzustimmen, oder neue Einfügungen in SERIAL oder Identitätsspalten können doppelte Primärschlüssel generieren:
SELECT pg_catalog.setval(pg_catalog.pg_get_serial_sequence('orders', 'id'), (SELECT MAX(id) FROM orders));
Sobald deine Anwendung gegen Lakebase läuft, beende die Subscription, um die Replikation von der Quelle zu stoppen. Wenn die Quelle erreichbar ist, entfernt das Löschen der Subskription auch den Replikationsslot darauf. Siehe „Entfernen eines Abonnements oder einer Publikation“.
Informationen zur Überwachung und Bereinigung finden Sie unter Logische Replikation verwalten und überwachen.
Nächste Schritte
- Replikation verwalten: Abonnements überwachen, Slots verwalten und Probleme beheben. Siehe Logische Replikation verwalten und überwachen.
- Stream von Lakebase: Änderungen von Lakebase an einen externen Postgres-Abonnenten veröffentlichen. Siehe Daten von Lakebase replizieren.
- Vergleichen Sie Methoden: Wählen Sie die richtige Methode, um Daten in Lakebase hinein und wieder heraus zu bewegen. Siehe Daten in Lakebase importieren und aus Lakebase exportieren.