O Data Transmission service (DTS) oferece suporte à sincronização bidirecional de dados em tempo real entre dois bancos de dados PostgreSQL, incluindo o ApsaraDB RDS for PostgreSQL e instâncias PostgreSQL autogerenciadas. A sincronização bidirecional é ideal para georredundância ativa (arquitetura baseada em células) e recuperação de desastres. Este tópico descreve como configurar a sincronização bidirecional entre instâncias do ApsaraDB RDS for PostgreSQL. É possível aplicar o mesmo procedimento a outras fontes de dados PostgreSQL.
Pré-requisitos
-
As instâncias de origem e de destino do ApsaraDB RDS for PostgreSQL já foram criadas. Para mais informações, consulte Crie uma instância do ApsaraDB RDS for PostgreSQL.
NotaPara ver as versões de banco de dados compatíveis, consulte Overview of synchronization scenarios.
O parâmetro
wal_levelestá definido comologicaltanto para a instância de origem quanto para a de destino do ApsaraDB RDS for PostgreSQL. Para mais informações, consulte Modify instance parameters.
Limitações
Tipo | Descrição |
Limites para os bancos de dados de origem e de destino |
|
Outros limites |
|
Casos especiais |
|
Faturamento
|
Tipo de sincronização |
Preço |
|
Sincronização de esquema e sincronização completa de dados |
Gratuito. |
|
Sincronização incremental de dados |
Cobrado. Para mais informações, consulte Billing overview. |
Topologias de sincronização suportadas
O DTS suporta a sincronização bidirecional apenas entre dois bancos de dados PostgreSQL. Topologias de sincronização bidirecional com múltiplos nós não são suportadas.
Detecção de conflitos
Para garantir a consistência dos dados, certifique-se de que os registros de dados com a mesma chave primária, chave primária de negócio ou chave única sejam atualizados em apenas uma das instâncias de banco de dados na sincronização bidirecional. Se os registros de dados forem atualizados em ambas as instâncias, o DTS aplicará a política de resolução de conflitos configurada na tarefa.
O DTS verifica e corrige conflitos para maximizar a estabilidade das tarefas de sincronização bidirecional. O DTS pode detectar os seguintes tipos de conflitos:
-
Conflitos de unicidade causados por operações INSERT
Na sincronização bidirecional, se registros com a mesma chave primária forem inseridos em ambas as instâncias de banco de dados simultaneamente (ou em rápida sucessão), um conflito de restrição de unicidade será acionado. Quando a instrução INSERT for sincronizada com a instância par, ela falhará porque já existe um registro com o mesmo valor de chave primária.
-
Registros incompatíveis em operações UPDATE
Se os registros a serem atualizados não existirem na instância de destino, o DTS converterá a operação UPDATE em uma operação INSERT. No entanto, podem ocorrer conflitos de unicidade.
O registro a ser atualizado por uma operação UPDATE causa um conflito de chave primária ou chave única.
-
Registros inexistentes a serem excluídos
Os registros a serem excluídos não existem na instância de destino. Nesse caso, o DTS ignora a operação DELETE, independentemente da política de resolução de conflitos especificada.
Devido a diferenças de tempo e latência, o DTS não pode garantir 100% de prevenção de conflitos. Para garantir a consistência, atualize registros com a mesma chave primária ou única em apenas uma instância de banco de dados por vez.
O DTS fornece várias estratégias de resolução para os conflitos de dados mencionados, as quais podem ser selecionadas ao configurar a sincronização bidirecional.
Etapa 5: Configurar objetos a serem sincronizados
Na etapa Configure Objects, defina os seguintes parâmetros:
|
Parâmetro |
Descrição |
|
Synchronization Types |
A opção Incremental Data Synchronization é selecionada por padrão. Selecione também Schema Synchronization e Full Data Synchronization para sincronizar dados históricos como linha de base para a sincronização incremental. A seleção de Schema Synchronization faz com que o DTS sincronize os esquemas das tabelas, incluindo chaves estrangeiras. |
|
Synchronization Topology |
Selecione One-way Synchronization. |
|
Processing Mode of Conflicting Tables |
Precheck and Report Errors (padrão): a pré-verificação falha se a origem e o destino possuírem tabelas com o mesmo nome. Use o mapeamento de nomes de objetos para renomear tabelas conflitantes no destino, se necessário. Ignore Errors and Proceed: ignora a verificação de conflito de nomes. Durante a sincronização completa, os registros existentes no destino com valores de chave primária ou única correspondentes são mantidos. Durante a sincronização incremental, eles são sobrescritos. Se os esquemas forem diferentes, a inicialização poderá falhar parcialmente. Use com cautela. |
|
Capitalization of Object Names in Destination Instance |
Controla a capitalização dos nomes de bancos de dados, tabelas e colunas no destino. O padrão é DTS default policy. Consulte Especificar a capitalização dos nomes dos objetos. |
|
Source Objects |
Selecione colunas, tabelas ou esquemas e clique no ícone de seta para movê-los para Selected Objects. |
|
Selected Objects |
Clique com o botão direito em um objeto para renomeá-lo (consulte Mapear o nome de um único objeto), filtrar por operação SQL ou adicionar condições WHERE (consulte Set filter conditions). Para renomear vários objetos de uma vez, clique em Batch Edit. Note que renomear um objeto pode interromper a sincronização de objetos dependentes. |
Operações SQL suportadas
|
Tipo de operação |
Operação SQL |
|
DML |
|
|
DDL |
|
Instruções DDL são sincronizadas apenas em tarefas diretas (da origem para o destino). Tarefas reversas filtram automaticamente as instruções DDL.
Ao executar DDL para modificar o esquema de uma tabela durante a sincronização bidirecional, certifique-se de que as gravações DML em ambos os bancos de dados sejam consistentes com o novo esquema. Por exemplo, se você exclua uma coluna da origem, o destino ainda poderá gravar dados com base no esquema antigo que inclui a coluna excluída, causando falhas.
Procedimento
-
Compre uma instância de sincronização bidirecional de dados. Para mais informações, consulte Purchase a synchronization instance.
ImportanteNa página de compra, defina o tipo de banco de dados de origem e de destino como PostgreSQL e defina a topologia de sincronização como Two-way Synchronization.
-
Faça login na nova página DTS Sync Tasks.
NotaTambém é possível fazer login no Data Management (DMS). Na barra de menu superior, selecione Data + AI. No painel de navegação à esquerda, escolha .
No canto superior esquerdo da página, selecione a região da instância de destino.
Encontre a instância de sincronização que você comprou e clique em Configure Task na coluna Actions da primeira tarefa de sincronização.
-
Configure os bancos de dados de origem e de destino.
AvisoApós selecionar as instâncias de origem e de destino, leia atentamente as limitações exibidas na parte superior da página. Caso as limitações não sejam seguidas, a tarefa poderá falhar ou poderá ocorrer inconsistência de dados.
Categoria
Parâmetro
Descrição
N/A
Task Name
O DTS gera automaticamente um nome para a tarefa. Recomendamos especificar um nome descritivo para fácil identificação. O nome não precisa ser único.
Source Database
Database Type
Selecione PostgreSQL.
Connection Type
Selecione Alibaba Cloud Instance.
Instance Region
A região da instância de origem selecionada na compra. Este valor não pode ser alterado.
Instance ID
Selecione o ID da instância de origem do ApsaraDB RDS for PostgreSQL.
Database Name
Insira o nome do banco de dados ao qual os objetos a serem sincronizados pertencem na instância de origem do ApsaraDB RDS for PostgreSQL.
Database Account
Insira uma conta com privilégios elevados na instância de origem do ApsaraDB RDS for PostgreSQL. A conta deve ser a proprietária do banco de dados especificado. Para mais informações, consulte Create an account e Create a database.
Database Password
Insira a senha correspondente à conta do banco de dados.
Encryption
Especifica se a conexão com o banco de dados de origem deve ser criptografada. Configure este parâmetro com base nos requisitos do seu negócio. Neste exemplo, Non-encrypted é selecionado.
Se você deseja estabelecer uma conexão criptografada por SSL com o banco de dados de origem, execute as seguintes etapas: Selecione SSL-encrypted, faça o upload de CA Certificate, Client Certificate e Private Key of Client Certificate conforme necessário, e então especifique Private Key Password of Client Certificate.
Nota-
Se você definir Encryption como SSL-encrypted para um banco de dados PostgreSQL autogerenciado, deve fazer o upload de CA Certificate.
-
Para usar o certificado de cliente, faça o upload de Client Certificate e Private Key of Client Certificate e especifique Private Key Password of Client Certificate.
-
Para informações sobre como configurar a criptografia SSL para uma instância do ApsaraDB RDS for PostgreSQL, consulte SSL encryption.
Destination Database
Database Type
Selecione PostgreSQL.
Connection Type
Selecione Alibaba Cloud Instance.
Instance Region
A região da instância de destino selecionada na compra. Este valor não pode ser alterado.
Instance ID
Selecione o ID da instância de destino do ApsaraDB RDS for PostgreSQL.
Database Name
Insira o nome do banco de dados ao qual os objetos a serem sincronizados pertencem na instância de destino do ApsaraDB RDS for PostgreSQL.
Database Account
Insira uma conta com privilégios elevados na instância de destino do ApsaraDB RDS for PostgreSQL. A conta deve ser a proprietária do banco de dados especificado. Para mais informações, consulte Create an account e Create a database.
Database Password
Insira a senha correspondente à conta do banco de dados.
Encryption
Especifica se a conexão com o banco de dados de origem deve ser criptografada. Configure este parâmetro com base nos requisitos do seu negócio. Neste exemplo, Non-encrypted é selecionado.
Se você deseja estabelecer uma conexão criptografada por SSL com o banco de dados de origem, execute as seguintes etapas: Selecione SSL-encrypted, faça o upload de CA Certificate, Client Certificate e Private Key of Client Certificate conforme necessário, e então especifique Private Key Password of Client Certificate.
Nota-
Se você definir Encryption como SSL-encrypted para um banco de dados PostgreSQL autogerenciado, deve fazer o upload de CA Certificate.
-
Para usar o certificado de cliente, faça o upload de Client Certificate e Private Key of Client Certificate e especifique Private Key Password of Client Certificate.
-
Para informações sobre como configurar a criptografia SSL para uma instância do ApsaraDB RDS for PostgreSQL, consulte SSL encryption.
-
-
Após concluir a configuração, clique em Test Connectivity and Proceed na parte inferior da página.
NotaCertifique-se de que os blocos CIDR de endereços IP dos servidores do DTS foram adicionados às configurações de segurança dos bancos de dados de origem e de destino para permitir o acesso dos servidores do DTS. Isso pode ser feito de forma automática ou manual. Para mais informações, consulte Add the IP address CIDR blocks of DTS servers to a whitelist.
Se o banco de dados de origem ou de destino for autogerenciado (onde o Access Method não é Alibaba Cloud Instance), clique também em Test Connectivity na caixa de diálogo CIDR Blocks of DTS Servers.
-
Configure os objetos da tarefa.
-
Na página Configure Objects, configure os objetos a serem sincronizados.
Parâmetro
Descrição
Synchronization Types
A opção Incremental Data Synchronization está selecionada. Por padrão, selecione também Schema Synchronization e Full Data Synchronization. Após a conclusão da pré-verificação, o DTS realiza uma sincronização completa de dados dos objetos selecionados da instância de origem para o cluster de destino. Isso serve como dados de linha de base para a subsequente sincronização incremental de dados.
NotaSe a opção Schema Synchronization estiver selecionada, o DTS sincroniza os esquemas das tabelas (incluindo chaves estrangeiras) do banco de dados de origem para o banco de dados de destino.
Processing Mode of Conflicting Tables
-
Precheck and Report Errors: Verifica se existe uma tabela com o mesmo nome no banco de dados de destino. Se não existir, a pré-verificação é aprovada. Se existir, a pré-verificação falha e a tarefa de sincronização de dados não é iniciada.
NotaCaso não seja possível excluir ou renomear a tabela com o mesmo nome no banco de dados de destino, mapeie-a para um nome diferente. Para mais informações, consulte Map table and column names.
-
Ignore Errors and Proceed: Ignora a verificação de nomes de tabelas duplicados no banco de dados de destino.
AvisoA seleção de Ignore Errors and Proceed pode causar inconsistência de dados e colocar seu negócio em risco. Por exemplo:
-
Se os esquemas das tabelas forem iguais e um registro no banco de dados de destino tiver o mesmo valor de chave primária ou única que um registro no banco de dados de origem:
-
Durante a sincronização completa, o DTS mantém o registro no cluster de destino. O registro correspondente do banco de dados de origem não é sincronizado.
-
Durante a sincronização incremental, o registro do banco de dados de origem sobrescreve o registro no banco de dados de destino.
-
-
Se os esquemas das tabelas forem diferentes, a sincronização inicial de dados poderá falhar. Isso pode resultar na sincronização de apenas dados parciais de colunas ou em uma falha completa de sincronização. Prossiga com cautela.
-
Synchronization Topology
Selecione Two-way Synchronization.
Exclude DDL Operations
Yes: As operações DDL não são sincronizadas.
No: As operações DDL são sincronizadas.
ImportantePara garantir a estabilidade da sincronização bidirecional, apenas a tarefa direta (da origem para o destino) permite escolher se as operações DDL serão sincronizadas. A tarefa reversa (do destino para a origem) filtra automaticamente as operações DDL.
Conflict Resolution Policy
Se encontrar qualquer um dos tipos de conflito descritos acima, selecione uma política de resolução de conflitos com base nos requisitos do seu negócio.
-
TaskFailed (If a conflict occurs, an error is reported and the task is stopped)
Se ocorrer um conflito de dados durante a sincronização, a tarefa reportará um erro e será interrompida. A tarefa entra no estado Failed e requer intervenção manual.
-
Ignore (If a conflict occurs, the conflicting record in the destination instance is used)
Se ocorrer um conflito de dados durante a sincronização, a instrução de sincronização atual é ignorada e o processo continua. O registro conflitante no banco de dados de destino é mantido.
-
Overwrite (If a conflict occurs, the conflicting record in the destination instance is overwritten)
Se ocorrer um conflito de dados durante a sincronização, o registro conflitante no banco de dados de destino é sobrescrito.
NotaSe a tarefa de sincronização for pausada ou reiniciada e apresentar latência, essas políticas ficarão temporariamente ineficazes. Durante o período de latência, os dados de destino são sobrescritos por padrão.
Capitalization of Object Names in Destination Instance
É possível configurar a política de diferenciação de maiúsculas e minúsculas para os nomes de objetos de banco de dados, tabelas e colunas sincronizados com a instância de destino. Por padrão, a DTS default policy é selecionada. Também é possível optar por usar as políticas padrão dos bancos de dados de origem e de destino. Para mais informações, consulte Case sensitivity policy for destination object names.
Source Objects
Na caixa Source Objects, clique em um objeto a ser sincronizado e, em seguida, clique em
para movê-lo para a caixa Selected Objects.NotaÉ possível selecionar esquemas ou tabelas como objetos de sincronização. Ao selecionar tabelas, outros objetos, como visualizações, gatilhos e procedimentos armazenados, não serão sincronizados com o banco de dados de destino.
Se uma tabela a ser sincronizada contiver colunas do tipo SERIAL e você selecionar Schema Synchronization como tipo de sincronização, recomendamos selecionar também as sequências ou sincronizar o esquema inteiro.
Selected Objects
-
Para renomear um único objeto de sincronização na instância de destino, clique com o botão direito no objeto na caixa Selected Objects. Para mais informações sobre como renomear objetos, consulte Map a single database, table, or column.
-
Para alterar os nomes de vários objetos de sincronização na instância de destino em lote, clique em Batch Edit no canto superior direito da caixa Selected Objects. Para mais informações, consulte Map databases, tables, and columns in a batch.
NotaPara selecionar operações SQL específicas para sincronizar no nível do esquema ou da tabela, clique com o botão direito no objeto alvo na seção Selected Objects e selecione as operações SQL na caixa de diálogo.
Para filtrar dados com condições WHERE, clique com o botão direito em uma tabela na seção Selected Objects e defina as condições de filtro na caixa de diálogo. Para mais informações, consulte Filter data by using SQL conditions.
O uso do recurso de mapeamento de nomes de objetos pode causar falha na sincronização de objetos dependentes.
-
-
Clique em Next: Advanced Settings para configurar parâmetros avançados.
Parâmetro
Descrição
Dedicated Cluster for Task Scheduling
Por padrão, o DTS agenda tarefas em um cluster compartilhado e não é necessário selecionar um cluster. Para um desempenho mais estável, compre um cluster dedicado para executar tarefas de sincronização do DTS. Para mais informações, consulte What is a DTS dedicated cluster?.
Retry Time for Failed Connections
Após o início de uma tarefa de sincronização, se a conexão com o banco de dados de origem ou de destino falhar, o DTS reportará um erro e começará imediatamente a tentar reconectar. A duração padrão de tentativa é de 720 minutos. Também é possível especificar uma duração personalizada de 10 a 1.440 minutos. Recomendamos definir a duração para 30 minutos ou mais. Se o DTS conseguir se reconectar ao banco de dados dentro da duração especificada, a tarefa de sincronização será retomada automaticamente. Caso contrário, a tarefa falhará.
Nota-
Caso haja várias instâncias do DTS (por exemplo, Instância A e Instância B) que compartilham a mesma origem ou destino, e o tempo de tentativa de rede seja definido como 30 minutos para a Instância A e 60 minutos para a Instância B, a duração menor, de 30 minutos, será usada para ambas.
-
Como o DTS cobra pelo tempo de execução da tarefa durante o período de tentativa de conexão, recomendamos personalizar a duração da tentativa com base nas necessidades do seu negócio ou liberar a instância do DTS o mais rápido possível após a liberação das instâncias de banco de dados de origem e de destino.
Retry Time for Other Issues
Após o início da tarefa de sincronização, se ocorrerem outros problemas não relacionados à conectividade com o banco de dados de origem ou de destino (como exceções de execução DDL ou DML), o DTS reportará um erro e iniciará imediatamente operações contínuas de tentativa. A duração padrão é de 10 minutos. Também é possível personalizar a duração dentro do intervalo de 1 a 1.440 minutos. Recomendamos definir para 10 minutos ou mais. Se as operações relevantes forem bem-sucedidas dentro da duração definida, a tarefa de sincronização será retomada automaticamente. Caso contrário, a tarefa falhará.
ImportanteO valor para Retry Time for Other Issues deve ser menor que o valor para Retry Time for Failed Connections.
Enable Throttling for Full Data Synchronization
Durante a etapa de sincronização completa, o DTS consome recursos de leitura e gravação dos bancos de dados de origem e de destino, o que pode aumentar a carga do banco de dados. Para reduzir a carga nos bancos de dados de origem e de destino, defina um limite de taxa para a tarefa de sincronização completa configurando os parâmetros Queries per second (QPS) to the source database, RPS of Full Data Migration e Data migration speed for full migration (MB/s).
Nota-
Este item de configuração está disponível apenas quando Synchronization Types está definido como Full Data Synchronization.
-
Também é possível ajustar a taxa de sincronização completa após a instância de sincronização estar em execução.
Enable Throttling for Incremental Data Synchronization
Também é possível definir um limite de taxa para a tarefa de sincronização incremental. Para aliviar a pressão no banco de dados de destino, defina RPS of Incremental Data Synchronization e Data synchronization speed for incremental synchronization (MB/s).
Environment Tag
Opcional. Selecione uma tag de ambiente para rotular a instância. Não é necessário neste exemplo.
Configure ETL
Escolha se deseja ativar o recurso de extração, transformação e carga (ETL). Para mais informações, consulte What is ETL? Valores válidos:
-
Yes: Ativa o recurso ETL. Insira instruções de processamento de dados no editor de código. Para mais informações, consulte Configure ETL in a data migration or data synchronization task.
-
No: Desativa o recurso ETL.
Monitoring and Alerting
Especifique se deseja configurar alertas. Se a sincronização falhar ou a latência exceder o limiar especificado, uma notificação será enviada para um contato de alerta.
-
No: Nenhum alerta é configurado.
-
Yes: Configure alertas definindo um limiar de alerta e especificando um alert notification. Para mais informações, consulte Configure monitoring and alerting during task configuration.
-
-
Clique em Next: Data Validation para configurar uma tarefa de validação de dados.
Para usar o recurso de validação de dados, consulte Configure data validation para obter instruções de configuração.
-
-
Salve a tarefa e execute uma pré-verificação.
Para visualizar os parâmetros da API para configurar esta instância, passe o mouse sobre o botão Next: Save Task Settings and Precheck e clique em Preview OpenAPI parameters no balão.
Após visualizar os parâmetros da API, clique em Next: Save Task Settings and Precheck na parte inferior da página.
NotaAntes do início da tarefa de sincronização, o DTS executa uma pré-verificação. A tarefa só pode ser iniciada após a aprovação de todos os itens de pré-verificação.
Se a pré-verificação falhar, clique em View Details para o item com falha. Corrija o problema conforme instruído e execute a pré-verificação novamente.
-
Se a pré-verificação retornar um aviso:
Se um item de verificação falhar e não puder ser ignorado, clique em View Details ao lado do item. Siga as instruções para corrigir o problema e execute a pré-verificação novamente.
Para itens de verificação que podem ser ignorados, clique em Confirm Alert Details, Ignore, OK e Precheck Again em sequência para pular o aviso e executar a pré-verificação novamente. Ignorar o item de aviso pode causar problemas como inconsistência de dados e apresentar riscos ao seu negócio.
Após a Success Rate atingir 100%, clique em Back.
-
Configure a tarefa de sincronização reversa.
Aguarde a tarefa de sincronização direta concluir a sincronização inicial. O Status deve mostrar Running.
Localize a tarefa de sincronização reversa e clique em Configure Task.
-
Siga da Etapa 5 à Etapa 9 para configurar a tarefa de sincronização reversa.
ImportanteAo configurar a tarefa reversa, troque as instâncias de origem e de destino: o destino da tarefa direta torna-se a origem da tarefa reversa, e vice-versa. Verifique se todos os detalhes da instância (nome do banco de dados, conta e senha) estão corretos.
Os campos Instance Region para a tarefa reversa não podem ser alterados. A tarefa reversa requer menos parâmetros do que a tarefa direta. Configure apenas os parâmetros mostrados no console.
A verificação de Processing Mode of Conflicting Tables para a tarefa reversa não detecta tabelas que foram sincronizadas pela tarefa direta.
A tarefa reversa não pode sincronizar objetos da lista Selected Objects da tarefa direta.
Não use o recurso de mapeamento de nomes de objetos para a tarefa reversa. Isso pode causar inconsistências de dados.
Após configurar a tarefa reversa, aguarde o Status de ambas as tarefas de sincronização mostrar Running. A sincronização bidirecional agora está totalmente configurada.