Replicare i dati in Lakebase

Questa guida ti mostra come replicare dati da un database Postgres esterno in Lakebase usando la replica logica. Lakebase agisce come sottoscrittore: si collega al tuo database di origine, copia i dati esistenti e applica modifiche continue finché non effettui il passaggio. Usa questo per migrare in Lakebase un database da un altro provider Postgres, come Amazon Aurora PostgreSQL o Amazon RDS for PostgreSQL, oppure da un server Postgres autogestito.

Prerequisiti

  • Un database sorgente di Postgres con un endpoint pubblico che Lakebase può raggiungere.
  • Accesso superutente sul database sorgente, o l'account amministratore su un servizio Postgres gestito. Impostare wal_level, creare un ruolo con l'attributo REPLICATION e creare una pubblicazione richiedono tutti questo livello di accesso.
  • Un progetto Lakebase per il database target.
  • Un ruolo Lakebase Postgres per creare la sottoscrizione: un membro del databricks_superuser ruolo, o un ruolo a cui è stato assegnato il pg_create_subscription ruolo predefinito. Vedere Creare ruoli Postgres.

La replicazione logica è supportata in Lakebase. Non c'è un passaggio per progetto per attivarlo. In quanto sottoscrittore, Lakebase non richiede alcuna modifica wal_level. Solo l'editore di origine necessita di wal_level = logical.

Prepara il database sorgente

Nel database Postgres sorgente, imposta il registro write-ahead (WAL) su logical e conferma che c'è capacità di replicazione. Il seguente esempio è per Postgres autogestito. Il tuo provider Postgres gestito potrebbe utilizzare impostazioni diverse:

ALTER SYSTEM SET wal_level = logical;
ALTER SYSTEM SET max_wal_senders = 10;
ALTER SYSTEM SET max_replication_slots = 10;

Riavvia il database sorgente affinché la modifica wal_level abbia effetto. Su un servizio gestito, usa il gruppo di parametri o le flag del fornitore per impostare wal_level su logical. Ad esempio, su Amazon Aurora PostgreSQL, imposta rds.logical_replication su 1 nel gruppo di parametri del cluster del database e riavvia il cluster. Su Amazon RDS per PostgreSQL, imposta lo stesso parametro nel gruppo di parametri del database e riavvia l'istanza.

Crea un ruolo per la replica e concedigli accesso in lettura alle tabelle che replichi:

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;

Questa CREATE ROLE istruzione funziona come scritta su un server Postgres autogestito. Alcuni provider Postgres gestiti non consentono direttamente l'attributo REPLICATION e concedono invece l'accesso alla replicazione tramite un ruolo specifico del provider. Se la tua origine funziona su un servizio gestito, segui la documentazione del provider per concedere al ruolo l'accesso per la replica, poi usa quel ruolo al posto di replication_user nei passaggi successivi. Ad esempio, su Amazon Aurora PostgreSQL e Amazon RDS for PostgreSQL, crea il ruolo senza WITH REPLICATION e poi esegui GRANT rds_replication TO replication_user.

Crea una pubblicazione per le tabelle che vuoi replicare. Ogni tabella deve avere un PRIMARY KEY o un'identità di replica impostata. Vedi Replica identity nella documentazione Postgres.

CREATE PUBLICATION my_publication FOR TABLE orders, customers;

Consenti a Lakebase di raggiungere l'origine

In qualità di sottoscrittore, Lakebase si connette in uscita al tuo database di origine. Questa connessione in uscita è regolata dalla policy di rete del tuo account, che controlla le destinazioni internet che i carichi di lavoro serverless possono raggiungere. Non è controllato da un progetto Lakebase né da un ruolo interno al database.

Se devi effettuare una modifica dipende dal fatto che il tuo account applichi una politica di rete:

  • Nessuna politica di rete attiva: Lakebase può raggiungere qualsiasi publisher che abbia un endpoint pubblico raggiungibile. Non è necessaria alcuna modifica.
  • Una policy di rete attiva: aggiungere l'host del database sorgente alle destinazioni internet consentite nella policy di rete dell'account. Vedere Gestire i criteri di rete. Se l'host non è permesso, la sottoscrizione viene rifiutata quando la crei. Vedere Risoluzione dei problemi.

collegamento privato non è supportato per la connessione del sottoscrittore. Il database sorgente deve essere raggiungibile tramite il suo endpoint pubblico.

Crea le tabelle target

La replicazione logica copia i dati, non lo schema. Crea le tabelle nel database Lakebase di destinazione con gli stessi nomi e colonne della sorgente prima di iniziare la replica. Puoi crearli manualmente, oppure fare il dump dello schema dal sorgente e caricarlo in Lakebase. Vedi solo il dump dello schema.

Crea le tabelle target vuote. La copia iniziale della tabella fallisce su chiavi duplicate o violazioni di vincoli se una tabella target contiene già righe.

Crea l'abbonamento

Connettiti al database target di Lakebase come ruolo che può creare sottoscrizioni (vedi Prerequisiti), poi crea una sottoscrizione che si collega al publisher di origine:

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;

Creare l'abbonamento avvia uno slot di replicazione sull'editore sorgente, copia le righe esistenti e poi trasmette le modifiche in corso.

Warning

Lo slot di replicazione fa sì che il database sorgente conservi il write-ahead log (WAL) finché Lakebase non conferma di aver ricevuto le modifiche. Se la sottoscrizione smette di consumare modifiche, ad esempio perché è disabilitata, disconnessa o in errore, il WAL si accumula sulla sorgente senza limiti. Su una sorgente di produzione, questo può riempire lo spazio di archiviazione della sorgente e causare un'interruzione.

Durante la replicazione, monitora quanto WAL lo slot trattiene sulla sorgente:

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;

Per limitare il rischio su un'origine self-managed, imposta max_slot_wal_keep_size per limitare quanto WAL uno slot può trattenere. Se uno slot supera il limite, Postgres lo invalida e la sottoscrizione deve essere ricreata. Interrompi l'abbonamento appena finisci la migrazione. Vedi slot di replicazione e storage.

Note

Quando Lakebase si sottoscrive, si collega al tuo database sorgente e invia ad esso le credenziali del ruolo di replica. sslmode=verify-full con sslrootcert=system cifra la connessione e verifica l'identità dell'origine, che protegge le credenziali trasmesse contro un attacco man-in-the-middle. Funziona quando la tua origine utilizza un'autorità di certificazione pubblicamente attendibile. L’algoritmo sslmode=require più debole cripta ma non verifica la fonte. La verifica di un'origine che utilizza un'autorità certificatrice privata non è supportata.

Verifica della replicazione

Nel database target Lakebase, conferma che le righe esistenti sono arrivate:

SELECT COUNT(*) FROM orders;

Inserisci o aggiorna una riga sulla sorgente, poi interroga di nuovo il target. Il cambiamento appare su Lakebase in pochi secondi.

Monitora e passa

Tieni traccia della copia iniziale e del lag in corso:

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

Per confermare che la copia iniziale sia completata, esegui la query di stato di sincronizzazione per tabella in Monitor replication sull'abbonato e attendi che ogni tabella legga Ready (fully live).

Quando il target si è allineato, ferma le scritture sulla sorgente, conferma che il target è completamente aggiornato e passa la tua applicazione ai dettagli di connessione di Lakebase.

La replicazione logica non copia i valori della sequenza o i contatori identità. Prima di riprendere le scritture su Lakebase, resetta ogni sequenza target per farla corrispondere ai dati replicati, oppure nuovi inserti in SERIAL o nelle colonne identity possono generare chiavi primarie duplicate:

SELECT pg_catalog.setval(pg_catalog.pg_get_serial_sequence('orders', 'id'), (SELECT MAX(id) FROM orders));

Dopo che la tua applicazione è in esecuzione su Lakebase, elimina la sottoscrizione per fermare la replica dalla fonte sorgente. Quando il server sorgente è raggiungibile, interrompere la sottoscrizione rimuove anche lo slot di replica su di esso. Vedi Rimuovi un abbonamento o una pubblicazione.

Per monitoraggio e pulizia, vedi Gestire e monitorare la replicazione logica.

Passaggi successivi