Daten von Lakebase replizieren

Dieser Leitfaden zeigt Ihnen, wie Sie Änderungen aus einer Lakebase-Datenbank mit logischer Replikation an einen externen Postgres-Abonnenten veröffentlichen können. Lakebase fungiert als Publisher: Es definiert eine Publikation, und der externe Abonnent verbindet sich, um die Änderungen zu empfangen.

Voraussetzungen

  • Ein Lakebase-Projekt mit der Datenbank, aus der du veröffentlichen möchtest und die die Tabellen enthält, die du veröffentlichen möchtest.
  • Eine Lakebase-Postgres-Rolle, die Mitglied der Rolle databricks_superuser ist, mit der die Publikation erstellt werden kann. Das ist die Rolle, mit der du dich verbindest, nicht die Rolle, die das Abonnentenkonto nutzt. Im ersten Schritt erstellen Sie die Replikationsrolle des Abonnenten.
  • Passwortverbindungen sind im Projekt aktiviert. Der Subscriber verbindet sich mit einer nativen Postgres-Passwortrolle, und Passwortverbindungen sind für neue Projekte standardmäßig deaktiviert. Siehe Verwalten von Kennwortverbindungen.
  • Eine externe Postgres-Datenbank, die als Abonnent fungiert.

Die logische Replikation ist für Ihren Arbeitsbereich von Databricks aktiviert. Lakebase wird standardmäßig mit wal_level = logical ausgeführt, daher gibt es keinen Schritt pro Projekt, um das Veröffentlichen zu aktivieren.

Erstelle eine Replikationsrolle

Schaffen Sie eine eigene Rolle, als die der externe Abonnent sich verbinden kann. Der Abonnent verbindet sich mit einem Postgres-Benutzernamen und Passwort, also erstelle eine native Postgres-Passwortrolle, keine OAuth-Rolle. OAuth-Rollen authentifizieren sich mit kurzlebigen Azure Databricks-Tokens, die von der passwortbasierten Abonnement-Verbindungszeichenfolge nicht verwendet werden können. Die Rolle muss das Attribut REPLICATION haben. Rollen, die du in der Lakebase-App, CLI oder API erstellst, haben dieses Attribut, unabhängig davon, ob du es ihnen gewährst databricks_superuseroder nicht. Geben Sie im Reiter der Lakebase App Rolle hinzufügen>Passwort einen Rollennamen ein. Sie müssen nicht auswählen databricks_superuser. Siehe Erstellen einer nativen Postgres-Kennwortrolle.

Um das Passwort selbst zu setzen, erstelle die Rolle stattdessen mit SQL. Fügen Sie das Attribut REPLICATION hinzu, da mit SQL erstellte Rollen es nicht automatisch erhalten:

CREATE ROLE replication_user WITH LOGIN REPLICATION PASSWORD '<password>';

Wenn die Rolle die von dir replizierten Tabellen nicht besitzt, gewähre ihr Lesezugriff:

GRANT USAGE ON SCHEMA public TO replication_user;
GRANT SELECT ON ALL TABLES IN SCHEMA public TO replication_user;
ALTER DEFAULT PRIVILEGES IN SCHEMA public GRANT SELECT ON TABLES TO replication_user;

Erstellen Sie eine Publikation

Verbinden Sie sich mit der Lakebase-Datenbank als Mitglied der Rolle databricks_superuser und erstellen Sie dann eine Publikation für die Tabellen, die Sie replizieren möchten. Jede Tabelle muss eine PRIMARY KEY oder eine festgelegte Replikatidentität besitzen. Siehe Replica-Identität in der Postgres-Dokumentation.

CREATE PUBLICATION my_publication FOR TABLE orders, customers;

Erlauben Sie dem Teilnehmer, sich zu verbinden

Der externe Abonnent verbindet sich mit Lakebase über den Azure Databricks Edge-Proxy, der die IP-Zugriffsliste für den Arbeitsbereich durchsetzt. Erlauben Sie die IP-Adresse des Abonnenten in der IP-Zugriffsliste des Arbeitsbereichs, damit sie Ihre Lakebase-Datenbank erreichen kann. Siehe „IP-Zugriffsliste verwalten“.

Private Link wird für die Abonnentenverbindung nicht unterstützt. Der Abonnent verbindet sich über den öffentlichen Lakebase-Endpunkt.

Aus externer Datenbank abonnieren

Erstelle in der externen Postgres-Datenbank die Zieltabellen mit denselben Namen und Spalten wie die von dir veröffentlichten Tabellen. Erstellen Sie sie leer: Die erste Kopie scheitert bei doppelten Schlüsseln oder Einschränkungsverstößen, wenn eine Zieltabelle bereits Zeilen enthält. Du kannst die Tabellen manuell erstellen oder das Schema aus Lakebase herunterladen und in den Subscriber laden. Siehe Nur das Schema dumpen.

Dann erstellen Sie als Rolle, die Abonnements auf der externen Datenbank erstellen kann, ein Abonnement, das eine Verbindung zu Lakebase herstellt:

CREATE SUBSCRIPTION my_subscription
CONNECTION 'host=<lakebase-host> port=5432 dbname=<lakebase-db> user=replication_user password=<password> sslmode=verify-full sslrootcert=system'
PUBLICATION my_publication;

Nutze eine direkte Verbindung für den Teilnehmer. Logische Replikation erfordert eine persistente Verbindung, daher muss <lakebase-host> Ihr direkter Endpunkt-Hostname sein, nicht der Hostname des -pooler-Connection-Poolers. Siehe Verbindungspooling.

Note

Lakebase setzt TLS auf allen Verbindungen durch, sodass der Datenverkehr immer verschlüsselt ist und keine Maßnahmen erforderlich sind. Für den stärksten Schutz verbinden Sie sich mit sslmode=verify-full, wodurch auch das Lakebase-Serverzertifikat mit dem Root-Store Ihres Systems überprüft wird. Lakebase verwendet ein öffentlich vertrauenswürdiges Zertifikat, daher ist kein zusätzliches Zertifikat erforderlich. Der schwächere sslmode=require verschlüsselt, authentifiziert den Server aber nicht.

Replikation überprüfen

Beim Subscriber bestätigen Sie, ob die Datensätze angekommen sind, und prüfen Sie den Lag:

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 Replikation überwachen auf dem Abonnenten aus und warten Sie, bis bei jeder Tabelle Ready (fully live) angezeigt wird.

Die Verbindung des Abonnenten hält einen Replikationsslot beim Lakebase-Publisher aufrecht. Während ein Abonnent aktiv repliziert, skaliert Lakebase Compute nicht auf null. Siehe Logische Replikation und Skalierung auf null. Wenn der Abonnent keine Änderungen mehr konsumiert, wird der Slot inaktiv und Lakebase entfernt ihn nach etwa 40 Stunden. Siehe Automatische Entfernung inaktiver Slots.

Nächste Schritte