Replicar datos hacia Lakebase

Esta guía te muestra cómo replicar datos de una base de datos Postgres externa en Lakebase usando replicación lógica. Lakebase actúa como suscriptor: se conecta a tu base de datos fuente, copia los datos existentes y aplica cambios continuos hasta que completes la migración. Úsalo para migrar una base de datos desde otro proveedor Postgres, como Amazon Aurora PostgreSQL o Amazon RDS para PostgreSQL, o desde un servidor Postgres autogestionado a Lakebase.

Prerrequisitos

  • Una base de datos fuente de Postgres con un endpoint público al que Lakebase pueda acceder.
  • Acceso de superusuario en la base de datos de origen, o la cuenta de administrador en un servicio Postgres gestionado. Configurar wal_level, crear un rol con el REPLICATION atributo y crear una publicación requieren este nivel de acceso.
  • Un proyecto Lakebase para la base de datos objetivo.
  • Un rol de Lakebase Postgres para crear la suscripción: un miembro del databricks_superuser rol, o un rol al que se le conceda el pg_create_subscription rol predefinido. Consulte Creación de roles de Postgres.

La replicación lógica está soportada en Lakebase. No hay un paso por proyecto para activarlo. Como suscriptor, Lakebase no requiere ningún cambio wal_level. Solo el publicador de origen necesita wal_level = logical.

Prepara la base de datos fuente

En tu base de datos Postgres de origen, configura el registro de escritura anticipada en logical y confirma que hay capacidad para la replicación. El siguiente ejemplo es para Postgres autogestionado. Tu proveedor gestionado de Postgres podría usar diferentes configuraciones:

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

Reinicia la base de datos fuente para que el wal_level cambio tenga efecto. En un servicio gestionado, utiliza el grupo de parámetros o las banderas del proveedor para establecer wal_level en logical. Por ejemplo, en Amazon Aurora PostgreSQL, establece rds.logical_replication en 1 en el grupo de parámetros del clúster de base de datos y reinicia el clúster. En Amazon RDS para PostgreSQL, establece el mismo parámetro en el grupo de parámetros de la base de datos y reinicia la instancia.

Crea un rol para replicación y concédele acceso de lectura a las tablas que repliques:

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;

Esta CREATE ROLE sentencia funciona tal como está escrita en un servidor Postgres autogestionado. Algunos proveedores Postgres gestionados no permiten el REPLICATION atributo directamente y, en su lugar, conceden acceso a la replicación a través de un rol específico de cada proveedor. Si tu origen funciona en un servicio gestionado, sigue la documentación del proveedor para dar al rol acceso de replicación y luego usa ese rol en lugar de replication_user en los pasos siguientes. Por ejemplo, en Amazon Aurora PostgreSQL y Amazon RDS for PostgreSQL, crea el rol sin WITH REPLICATION y luego ejecuta GRANT rds_replication TO replication_user.

Crea una publicación para las tablas que quieres replicar. Cada tabla debe tener un PRIMARY KEY o una identidad de réplica configurada. Consulta identidad de réplica en la documentación de Postgres.

CREATE PUBLICATION my_publication FOR TABLE orders, customers;

Permitir que Lakebase llegue a la fuente

Como suscriptor, Lakebase establece una conexión saliente con tu base de datos de origen. Esta conexión saliente está regida por la política de red de tu cuenta, que controla los destinos de internet a los que pueden llegar las cargas de trabajo serverless. No está controlado por una configuración de proyecto de Lakebase ni por un rol dentro de la base de datos.

Si necesitas hacer un cambio depende de si tu cuenta aplica una política de red:

  • No hay política de red activa: Lakebase puede contactar con cualquier editor que tenga un endpoint público accesible. No se necesita ningún cambio.
  • Una política de red activa: añadir el host de la base de datos de origen a los destinos de internet permitidos en la política de red de cuentas. Consulte Administración de directivas de red. Si el host no está permitido, la suscripción se rechaza al crearla. Vea Solución de problemas.

Private Link no es compatible con la conexión del suscriptor. La base de datos de origen debe ser accesible a través de su endpoint público.

Crea las tablas objetivo

La replicación lógica copia datos, no el esquema. Crea las tablas en la base de datos Lakebase de destino con los mismos nombres y columnas que la base de datos de origen antes de empezar la replicación. Puedes crearlos manualmente, o volcar el esquema desde el origen y cargarlo en Lakebase. Ver Volcar solo el esquema.

Crea las tablas objetivo vacías. La copia inicial de la tabla falla en claves duplicadas o violaciones de restricciones si una tabla objetivo ya contiene filas.

Crea la suscripción

Conéctate a la base de datos objetivo de Lakebase como un rol que puede crear suscripciones (ver Requisitos previos), y luego crea una suscripción que se conecte con el editor fuente:

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;

Crear la suscripción inicia una ranura de replicación en el publicador de origen, copia las filas existentes y luego transmite los cambios en curso.

Warning

El slot de replicación hace que la base de datos de origen conserve el registro de escritura anticipada (WAL) hasta que Lakebase confirme que ha recibido los cambios. Si la suscripción deja de consumir cambios, por ejemplo porque está desactivada, desconectada o fallando, WAL se acumula en el origen sin límite. En un origen de producción, esto puede llenar el almacenamiento del origen y provocar una interrupción.

Mientras se ejecuta la replicación, monitoriza cuánto WAL retiene la ranura en la fuente:

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;

Para limitar el riesgo en una fuente autogestionada, configura max_slot_wal_keep_size para limitar cuánto WAL puede retener una ranura. Si un slot supera el límite, Postgres lo invalida y la suscripción debe ser recreada. Da de baja la suscripción en cuanto termines la migración. Consulta Slots de replicación y almacenamiento.

Note

Cuando Lakebase se suscribe, establece una conexión saliente con tu base de datos de origen y le envía las credenciales del rol de replicación. sslmode=verify-full con sslrootcert=system cifra la conexión y verifica la identidad del origen, lo que protege las credenciales retransmitidas frente a un intermediario. Funciona cuando tu origen utiliza una autoridad de certificación de confianza pública. El sslmode=require más débil cifra pero no verifica el origen. No se admite verificar una fuente que utilice una autoridad certificadora privada.

Verificar la replicación

En la base de datos Lakebase de destino, confirma que las filas existentes han llegado:

SELECT COUNT(*) FROM orders;

Inserta o actualiza una fila en el origen y luego vuelve a consultar el objetivo. El cambio aparece en Lakebase en pocos segundos.

Supervisar y realizar la conmutación

Haz un seguimiento de la copia inicial y del retraso en curso:

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

Para confirmar que la copia inicial ha terminado, ejecuta la consulta de estado de sincronización por tabla en Monitor replication sobre el suscriptor y espera hasta que cada tabla lea Ready (fully live).

Cuando el destino se haya puesto al día, detén la escritura en el origen, confirma que el destino está completamente actualizado y cambia tu aplicación a los detalles de conexión de Lakebase.

La replicación lógica no copia valores de secuencia ni contadores de identidad. Antes de reanudar las escrituras en Lakebase, reinicia cada secuencia de destino para que coincida con los datos replicados, o nuevas inserciones en SERIAL o en columnas de identidad pueden generar claves primarias duplicadas:

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

Una vez que tu aplicación esté funcionando contra Lakebase, cancela la suscripción para dejar de replicar desde el origen. Cuando el origen es accesible, eliminar la suscripción también elimina la ranura de replicación en él. Ver Eliminar suscripción o publicación.

Para monitorización y limpieza, consulta Gestionar y monitorizar la replicación lógica.

Pasos siguientes