Gerenciar migração avançada

A migração avançada é uma solução para migrar dados de bancos de dados grandes com menos tempo de inatividade. Esse recurso está disponível apenas para o PostgreSQL.

Requisitos da origem da migração

Para configurar a origem da migração, é preciso ajustar a instância de origem e os bancos de dados de origem subjacentes.

Versões compatíveis

As versões autogerenciadas do PostgreSQL compatíveis são:

  • PostgreSQL: 9.4, 9.5, 9.6, 10, 11, 12, 13, 14 e 15
  • AlloyDB Omni: 15

Configuração da instância de origem

A instância de origem precisa incluir o banco de dados postgres padrão. Se ele não existir, será necessário criar um. A biblioteca pglogical precisa ser instalada na origem e incluída na variável de configuração shared_preload_libraries.

Configuração do banco de dados de origem

A migração migra todos os bancos de dados na instância de origem, exceto os bancos de dados de modelo (template0 e template1 para origens locais). Para cada banco de dados que será migrado, siga estas etapas:

  • Instalar extensão: execute CREATE EXTENSION IF NOT EXISTS pglogical para instalar a extensão no banco de dados.
  • Restrição de chave primária: os dados são migrados apenas para tabelas com chaves primárias. Para tabelas sem chaves primárias, a migração copia apenas o esquema da tabela, não os dados. Além disso, para tabelas sem chaves primárias, essa migração só oferece suporte ao snapshot inicial e às instruções INSERT durante a fase de captura de dados alterados (CDC). É necessário processar as instruções UPDATE e DELETE manualmente.
  • Privilégios do usuário: o usuário do banco de dados que você usa para se conectar à instância de origem precisa ter privilégios suficientes no banco de dados padrão postgres, no esquema pglogical e em todos os esquemas de migração (exceto esquemas de informações e esquemas que começam com pg_). Especificamente para o PostgreSQL, conceda os seguintes privilégios:

    GRANT USAGE on SCHEMA <SCHEMA> to <USER>;
    GRANT SELECT on ALL TABLES in SCHEMA pglogical to <USER>;
    GRANT SELECT on ALL TABLES in SCHEMA <SCHEMA> to <USER>;
    GRANT SELECT on ALL SEQUENCES in SCHEMA <SCHEMA> to <USER>;
    ALTER USER <USER> with REPLICATION role;
    

Suporte a DDL

Somente as mudanças na linguagem de manipulação de dados (DML) são sincronizadas automaticamente durante a migração. A linguagem de definição de dados (DDL) precisa ser gerenciada manualmente para garantir que os bancos de dados de origem e destino permaneçam compatíveis durante a migração. Recomendamos usar pglogical.replicate_ddl_command para executar DDL na origem e no destino em um ponto consistente.

Conectividade e autorização

Abra o firewall de rede e configure o arquivo pg_hba.conf para aceitar conexões de entrada do endereço IP de saída de destino (o endpoint de migração), que é fornecido no console do GDC.

Gerenciar migração

Um usuário com o papel de administrador de banco de dados do projeto precisa realizar as etapas a seguir. Use o console do GDC ou a CLI do Distributed Cloud para gerenciar migrações:

Console

  1. No menu principal, escolha Serviço de banco de dados.
  2. Clique em Criar migração.
  3. Na caixa de diálogo Começar, revise os requisitos da fonte e da conectividade.
  4. Na caixa de diálogo Especifique seu banco de dados de origem, informe o nome do host ou o endereço IP, o nome de usuário, a senha, o tipo de criptografia e o certificado do banco de dados de origem.
  5. Na caixa de diálogo Configurar seu cluster, especifique o ID do cluster, a senha, a versão do banco de dados, a CPU, a memória e a capacidade de armazenamento do cluster de banco de dados de destino. Escolha memória suficiente para armazenar sua maior tabela.
  6. Clique em Criar. A criação da migração e do cluster de banco de dados de destino pode levar alguns minutos. O status muda de Reconciling para Ready quando o cluster está pronto. O status da migração muda para Unsynced quando a migração é configurada com êxito. Use as seguintes opções para gerenciar sua migração:
    1. Iniciar: inicia a migração e muda o status para Running.
    2. Interromper: interrompe a migração e muda o status para Stopped.
    3. Promover: promove o cluster de banco de dados de destino a um banco de dados independente.
    4. Excluir: exclui a migração e o cluster de banco de dados de destino criados para essa migração.

Faça a rotação periódica da senha do usuário de replicação do banco de dados de origem seguindo estas etapas:

  1. Acesse Banco de dados de origem e clique em editar Editar.
  2. Faça as mudanças para girar a senha do usuário de replicação.
  3. Clique em Salvar para aplicar as alterações.

Depois que a mudança é aplicada, o back-end de migração usa a nova senha.

gdcloud

  1. Antes de usar a CLI do Distributed Cloud, instale e inicialize. Em seguida, faça a autenticação com sua organização.

  2. Crie uma migração:

    gdcloud database connection-profiles create DB_ENGINE_TYPE SOURCE_CONNECTION_PROFILE \
        --username REPLICATION_USERNAME \
        --password REPLICATION_PASSWORD \
        --ca-certificate CA_CERT_FILE_PATH
    
    gdcloud database migrations create MIGRATION_NAME \
        --source SOURCE_CONNECTION_PROFILE \
        --destination DESTINATION_DBCLUSTER
    
    gdcloud database clusters create DESTINATION_DBCLUSTER \
        --database-version DB_VERSION \
        --admin-password ADMIN_PASSWORD
    

    Substitua as seguintes variáveis:

    • DB_ENGINE_TYPE, o tipo de mecanismo de banco de dados para migração. Os valores aceitos são: postgresql.
    • SOURCE_CONNECTION_PROFILE, o nome do novo perfil de conexão.
    • REPLICATION_USERNAME, o nome do usuário de replicação do banco de dados de origem.
    • REPLICATION_PASSWORD, a senha do usuário de replicação do banco de dados de origem.
    • CA_CERT_FILE_PATH, o caminho para o certificado de CA do banco de dados de origem.
    • MIGRATION_NAME, o nome da nova migração.
    • DESTINATION_DBCLUSTER, o nome do cluster de banco de dados de destino.
    • DB_VERSION, a string de versão do novo cluster. Por exemplo, POSTGRESQL_13.
    • ADMIN_PASSWORD, a senha do usuário administrador para o novo cluster.
  3. Inicie uma migração:

    gdcloud database migrations start MIGRATION_NAME
    
  4. Interromper uma migração:

    gdcloud database migrations stop MIGRATION_NAME
    
  5. Promover uma migração:

    gdcloud database migrations promote MIGRATION_NAME
    
  6. Liste os perfis de conexão atuais:

    gdcloud database connection-profiles list DB_ENGINE_TYPE
    
  7. Liste a migração atual:

    gdcloud database migrations list --destination DESTINATION_DBCLUSTER
    

API

Para bancos de dados de origem do PostgreSQL:

Crie um secret para armazenar o certificado de CA do banco de dados de origem:

apiVersion: v1
data:
  ca.crt:  SOURCE_DB_CA_CERT
kind: Secret
metadata:
  annotations:
    propagation.gdch.gke.io/target-namespace:  USER_PROJECT
  name: es-crt-EXTERNAL_SERVER_NAME
  namespace: USER_PROJECT
type: Opaque

Crie um secret para armazenar a senha do usuário de migração do banco de dados de origem:

apiVersion: v1
data:
  password: SOURCE_DB_USER_PASSWORD
kind: Secret
metadata:
  annotations:
    propagation.gdch.gke.io/target-namespace: USER_PROJECT
  name: es-pw-EXTERNAL_SERVER_NAME
  namespace: USER_PROJECT
type: Opaque

Crie um externalserver:

apiVersion: DBENGINE_NAME.dbadmin.gdc.goog/v1
kind: ExternalServer
metadata:
  name: EXTERNAL_SERVER_NAME
  namespace: USER_PROJECT
spec:
  host: SOURCE_DB_HOST
  port: 5432
  username: SOURCE_DB_USERNAME
  password:
    name: es-pw-EXTERNAL_SERVER_NAME
    namespace: USER_PROJECT
  certRef:
    name: es-crt-EXTERNAL_SERVER_NAME
    namespace: USER_PROJECT

Crie uma migração:

apiVersion: DBENGINE_NAME.dbadmin.gdc.goog/v1
kind: Migration
metadata:
  name: MIGRATION_NAME
  namespace: USER_PROJECT
spec:
  source:
    reference:
      apiVersion: DBENGINE_NAME.dbadmin.gdc.goog/v1
      kind: ExternalServer
      name: EXTERNAL_SERVER_NAME
  target:
    reference:
      apiVersion: DBENGINE_NAME.dbadmin.gdc.goog/v1
      kind: DBCluster
      name: DBCLUSTER_NAME
  control: MIGRATION_CONTROL

Substitua as seguintes variáveis:

  • EXTERNAL_SERVER_NAME: o nome do externalserver que representa o banco de dados de origem.
  • USER_PROJECT: o nome do projeto do usuário em que o externalserver é criado.
  • DBENGINE_NAME: o nome do mecanismo de banco de dados. Os valores aceitos são: postgresql.
  • SOURCE_DB_CA_CERT: o certificado da CA do banco de dados de origem.
  • SOURCE_DB_USER_PASSWORD: a senha do usuário de migração do banco de dados de origem.
  • SOURCE_DB_USERNAME: o nome de usuário da migração do banco de dados de origem.
  • SOURCE_DB_HOST: o endereço do host de migração do banco de dados de origem.
  • MIGRATION_NAME: o nome da operação de migração.
  • DBCLUSTER_NAME: o nome do cluster de banco de dados de destino da migração.
  • MIGRATION_CONTROL: os controles da operação de migração. Precisa ser start ou stop quando a migração é criada. Ele precisa ser promote para promover o cluster de banco de dados de destino da migração.