Replikera data från Lakebase

Denna guide visar hur du publicerar ändringar från en Lakebase-databas till en extern Postgres-abonnent med hjälp av logisk replikering. Lakebase fungerar som publicerare: den definierar en publikation, och den externa subscribern ansluter för att ta emot ändringarna.

Förutsättningar

  • Ett Lakebase-projekt som innehåller databasen du vill publicera från och tabellerna du vill publicera.
  • En roll i Lakebase Postgres som är en del av databricks_superuser rollen för att skapa publikationen. Det här är rollen du ansluter som, inte rollen som prenumeranten har. Du skapar prenumerantens replikationsroll i första steget.
  • Lösenordsanslutningar är aktiverade för projektet. prenumeranten ansluter till en nativ Postgres-lösenordsroll, och lösenordsanslutningar är inaktiverade som standard för nya projekt. Se Hantera lösenordsanslutningar.
  • En extern Postgres-databas som fungerar som prenumerant. Prenumeranten kan också vara en Lakebase-databas i en annan region. Replikering mellan Lakebase-databaser i samma region stöds inte.

Logisk replikering stöds i Lakebase, som körs med wal_level = logical som standard, så det finns inget steg per projekt för att aktivera publicering.

Skapa en replikationsroll

Skapa en dedikerad roll som den externa prenumeranten kan ansluta som. Abonnenten kopplar upp sig med ett Postgres-användarnamn och lösenord, så skapa en lokal Postgres-lösenordsroll, inte en OAuth-roll. OAuth-roller autentiseras med kortlivade Azure Databricks-token, vilka den lösenordsbaserade prenumerationsanslutningssträngen inte kan använda. Rollen måste ha attributet REPLICATION . Roller du skapar i Lakebase-appen, CLI eller API:et har detta attribut, oavsett om du beviljar dem databricks_superuser eller inte. I fliken Lägg till roll>Lösenord i Lakebase App, ange ett rollnamn. Du behöver inte välja databricks_superuser. Se Skapa en intern Postgres-lösenordsroll.

För att själv ställa in lösenordet, skapa rollen med SQL istället. Inkludera attributet REPLICATION , eftersom roller skapade med SQL inte får det automatiskt:

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

Om rollen inte äger de tabeller du replikerar, ge den läsbehörighet:

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;

Skapa en publikation

Anslut dig till Lakebase-databasen som medlem i databricks_superuser rollen, och skapa sedan en publikation för de tabeller du vill replikera. Varje tabell måste ha en PRIMARY KEY eller en inställd replikaidentitet. Se Replica-identitet i Postgres-dokumentationen.

CREATE PUBLICATION my_publication FOR TABLE orders, customers;

Låt abonnenten ansluta

Den externa abonnenten ansluter till Lakebase via Azure Databricks edge-proxy, som tillämpar arbetsområdets IP-åtkomstlista. Tillåt abonnentens IP-adress i arbetsområdets IP-åtkomstlista så att den kan nå din Lakebase-databas. Se Hantera IP-åtkomstlistan.

Private Link stöds inte för abonnentanslutningen. Abonnenten ansluter över den offentliga Lakebase-endpointen.

Prenumerera från den externa databasen

På den externa Postgres-databasen, skapa måltabellerna med samma namn och kolumner som de tabeller du publicerar. Skapa dem tomma: den initiala kopian misslyckas vid dubblettnycklar eller begränsningsbrott om en måltabell redan innehåller rader. Du kan skapa tabellerna manuellt, eller dumpa schemat från Lakebase och ladda in det i prenumeranten. Se Dump schemat endast.

Sedan, som en roll som kan skapa prenumerationer på den externa databasen, skapa en prenumeration som ansluter till Lakebase:

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;

Använd en direktanslutning för abonnenten. Logisk replikering kräver en beständig anslutning, så <lakebase-host> måste vara ditt direkta endpoint-värdnamn, inte -pooler anslutningspoolens värdnamn. Se Anslutningspoolning.

Note

Lakebase upprätthåller TLS på alla anslutningar, så trafiken krypteras alltid utan att någon åtgärd behövs. För det starkaste skyddet, koppla upp dig med sslmode=verify-full, som också verifierar Lakebase-servercertifikatet mot ditt systems rotcertifikatsarkiv. Lakebase använder ett offentligt betrott certifikat, så inget extra certifikat behövs. Det svagare sslmode=require krypterar men verifierar inte servern.

Verifiera replikeringen

På den externa prenumeranten, bekräfta att de befintliga posterna har anlänt:

SELECT COUNT(*) FROM orders;

Lägg in eller uppdatera en rad på Lakebase, och fråga sedan subscriber igen. Ändringen visas hos abonnenten inom några sekunder.

Kontrollera prenumerationsstatus och fördröjning hos abonnenten:

SELECT subname, received_lsn, latest_end_lsn, last_msg_receipt_time
FROM pg_catalog.pg_stat_subscription;

För att bekräfta att den initiala kopian är klar, kör statusfrågan per tabellsynkronisering i Monitor-replikering på prenumeranten och vänta tills varje tabell visar Ready (fully live).

Prenumerantens anslutning upprätthåller en replikeringsslot på Lakebase-publiceraren. Medan en abonnent aktivt replikerar, skalar inte Lakebase compute till noll. Se Logisk replikation och skala till noll. Om abonnenten slutar konsumera ändringar blir sloten inaktiv och Lakebase tar bort den efter cirka 40 timmar. Se Automatisk borttagning av inaktiva platser.

Nästa steg