Replicar dados para o Lakebase
Este guia mostra como replicar dados de um banco de dados Postgres externo para o Lakebase usando replicação lógica. O Lakebase atua como o assinante: ele se conecta ao seu banco de dados de origem, copia os dados existentes e aplica alterações contínuas até você fazer a transição. Use isso para migrar um banco de dados de outro provedor Postgres, como Amazon Aurora PostgreSQL ou Amazon RDS para PostgreSQL, ou de um servidor Postgres autogerenciado para o Lakebase.
Pré-requisitos
- Um banco de dados Postgres de origem com um endpoint público que o Lakebase pode acessar.
- Acesso de superusuário no banco de dados de origem ou a account de administrador em um serviço Postgres gerenciar. Configurar
wal_level, criar uma função com o atributoREPLICATIONe criar uma publicação, tudo requer este nível de acesso. - Um projeto Lakebase para o banco de dados de destino.
- Uma função do Lakebase Postgres para criar a inscrição: um membro da função
databricks_superuser, ou uma função à qual foi concedida a função predefinidapg_create_subscription. Consulte Criar funções do Postgres.
A replicação lógica é suportada no Lakebase. Não há o passo por projeto para ativá-la. Como assinante, o Lakebase não requer uma alteração de wal_level. Apenas o editor de origem precisa de wal_level = logical.
Preparar o banco de dados de origem
Em seu banco de dados Postgres de origem, defina o log de write-ahead para logical e confirme se há capacidade para replicação. O exemplo a seguir é para Postgres autogerenciado. Seu provedor de Postgres gerenciado pode usar configurações diferentes:
ALTER SYSTEM SET wal_level = logical;
ALTER SYSTEM SET max_wal_senders = 10;
ALTER SYSTEM SET max_replication_slots = 10;
Reinicie o banco de dados de origem para que a alteração wal_level entre em vigor. Em um serviço gerenciado, use o grupo de parâmetros do provedor ou os sinalizadores para definir wal_level como logical. Por exemplo, no Amazon Aurora PostgreSQL, defina rds.logical_replication como 1 no grupo de parâmetros do cluster de DB e reinicie o cluster. No Amazon RDS para PostgreSQL, defina o mesmo parâmetro no grupo de parâmetros de DB e reinicie a instância.
Crie uma role para replicação e conceda acesso de leitura às tabelas que você vai replicar:
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 instrução CREATE ROLE funciona conforme escrito em um servidor Postgres autogerenciado. Alguns provedores gerenciados do Postgres não permitem o atributo REPLICATION diretamente e, em vez disso, concedem acesso de replicação por meio de uma função específica do provedor. Se a sua fonte roda em um serviço gerenciado, siga a documentação do provedor para dar acesso de replicação à função, depois use essa função no lugar de replication_user nos passos que se seguem. Por exemplo, no Amazon Aurora PostgreSQL e no Amazon RDS for PostgreSQL, crie a função sem WITH REPLICATION e execução GRANT rds_replication TO replication_user.
Crie uma publicação para as tabelas que você deseja replicar. Cada tabela deve ter uma PRIMARY KEY ou uma identidade de réplica definida. Consulte Identidade de réplica na documentação do Postgres.
CREATE PUBLICATION my_publication FOR TABLE orders, customers;
Permitir que o Lakebase alcance a origem
Como assinante, o Lakebase faz uma chamada externa para seu banco de dados de origem. Essa conexão de saída é regida pela política de rede da sua account, que controla os destinos de internet que as cargas de trabalho Serverless podem alcançar. Ele não é controlado por uma configuração de projeto do Lakebase ou por uma função dentro do banco de dados.
Se você precisa fazer uma alteração depende se sua account aplica uma política de rede:
- Nenhuma política de rede ativa : O Lakebase pode alcançar qualquer editor que tenha um endpoint público alcançável. Nenhuma alteração é necessária.
- Uma política de rede ativa : adicione o host do banco de dados de origem aos destinos de internet permitidos na política de rede da account. Consulte Gerenciar políticas de rede. Se o host não for permitido, a inscrição será rejeitada quando você a criar. Consulte Solução de problemas.
O Link Privado não é suportado para a conexão do assinante. O banco de dados de origem deve estar acessível através do seu endpoint público.
Criar as tabelas de destino
A replicação lógica copia dados, não o esquema. Crie as tabelas no banco de dados Lakebase de destino com os mesmos nomes e colunas da origem antes de começar a replicação. Você pode criá-los manualmente ou despejar o esquema da origem e carregá-lo no Lakebase. Consulte Despejar apenas o esquema.
Crie as tabelas de destino vazias. A cópia inicial da tabela falha em keys duplicadas ou violações de restrição se uma tabela de destino já contiver linhas.
Criar a inscrição
Conecte-se ao banco de dados Lakebase de destino como uma função que possa criar inscrições (consulte Pré-requisitos), e então crie uma inscrição que se conecte ao editor de origem:
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;
Começar a inscrição inicia um slot de replicação no editor de origem, copia as linhas existentes e, em seguida, faz a transmissão das alterações em andamento.
The replication slot makes the source database retain write-ahead log (WAL) until Lakebase confirms it has received the changes. If the subscription stops consuming changes, for example because it is disabled, disconnected, or failing, WAL accumulates on the source without limit. On a production source, this can fill the source's storage and cause an outage.
While replication runs, monitor how much WAL the slot retains on the source:
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;
To cap the risk on a self-managed source, set max_slot_wal_keep_size to limit how much WAL a slot can retain. If a slot exceeds the limit, Postgres invalidates it and the subscription must be re-created. Drop the subscription as soon as you finish the migration. See Replication slots and storage.
When Lakebase subscribes, it connects out to your source database and sends the replication role's credentials to it. sslmode=verify-full with sslrootcert=system encrypts the connection and verifies the source's identity, which protects the relayed credentials against a man-in-the-middle. It works when your source uses a publicly trusted certificate authority. The weaker sslmode=require encrypts but does not verify the source. Verifying a source that uses a private certificate authority is not supported.
Verificar replicação
No banco de dados de destino do Lakebase, confirme se as linhas existentes chegaram:
SELECT COUNT(*) FROM orders;
Insira ou atualize uma linha na origem e, em seguida, query o destino novamente. A alteração aparece no Lakebase em alguns segundos.
Monitorar e mudar
Acompanhe a cópia inicial e a latência contínua:
SELECT subname, received_lsn, latest_end_lsn, last_msg_receipt_time
FROM pg_catalog.pg_stat_subscription;
Para confirmar que a cópia inicial terminou, faça a execução da query de status de sincronização por tabela em Monitorar replicação no assinante e aguarde até que cada tabela exiba Ready (fully live).
Quando o destino estiver atualizado, pare as gravações na origem, confirme se o destino está totalmente atualizado e altere seu aplicativo para os detalhes da conexão do Lakebase.
A replicação lógica não copia valores de sequência ou contadores de identidade. Antes de retomar as gravações no Lakebase, redefina cada sequência de destino para corresponder aos dados replicados, caso contrário, novas inserções em colunas SERIAL ou de identidade podem gerar chaves principais duplicadas:
SELECT pg_catalog.setval(pg_catalog.pg_get_serial_sequence('orders', 'id'), (SELECT MAX(id) FROM orders));
Depois que seu aplicativo estiver em execução no Lakebase, cancele a inscrição para parar de replicar da origem. Quando a origem estiver acessível, cancelar a inscrição também removerá o slot de replicação nela. Consulte Remover uma inscrição ou publicação.
Para monitoramento e limpeza, consulte Gerenciar e monitorar a replicação lógica.
Os passos seguintes
- Gerenciar replicação : monitore inscrições, gerencie slots e solucione problemas. Consulte Gerenciar e monitorar a replicação lógica.
- Transmissão do Lakebase : publique alterações do Lakebase para um assinante externo do Postgres. Consulte Replicar dados do Lakebase.
- Comparar métodos : Escolha a maneira certa de mover dados para dentro e para fora do Lakebase. Consulte Mover dados para dentro e para fora do Lakebase.