Use a API do Data Transmission Service (DTS) para configurar a sincronização de dados unidirecional ou bidirecional em instâncias Tair (Redis OSS-Compatible) Enhanced Edition. Este tópico descreve as observações de uso e fornece exemplos de código.
Pré-requisitos
As instâncias de origem e de destino são instâncias Tair (Redis OSS-Compatible) Enhanced Edition.
Se uma instância Tair usar persistent memory como storage medium, verifique se o parâmetro appendonly está definido como yes. Para mais informações, consulte Procedimento.
Observações de uso
-
Na sincronização bidirecional, a tarefa de sincronização direta executa a sincronização inicial completa e a incremental. A tarefa de sincronização reversa executa apenas a sincronização incremental.
AvisoPara garantir a consistência dos dados, não modifique nem grave dados na mesma chave nos bancos de dados de origem e de destino enquanto a tarefa de sincronização bidirecional estiver em execução.
O DTS consome recursos dos bancos de dados de origem e de destino durante a sincronização inicial completa, o que pode aumentar a carga nos servidores. Se você sincronizar um grande volume de dados ou se as especificações do servidor forem insuficientes, os serviços de banco de dados podem ficar indisponíveis. Antes de iniciar, avalie o impacto da sincronização no desempenho das instâncias de origem e de destino. Recomendamos executar a sincronização em horários de baixa demanda.
Não execute os comandos
FLUSHDBouFLUSHALLna instância de origem. Caso contrário, haverá inconsistência de dados entre a origem e o destino.-
Se a memória do destino se esgotar, a evicção de dados poderá causar inconsistências entre a origem e o destino. A política padrão maxmemory-policy do Tair (Redis OSS-Compatible) é volatile-lru. Essa política não interrompe a tarefa, mas pode remover dados.
Defina a política de evicção do destino como noeviction para evitar perda de dados. Com essa política, as operações de gravação falham e a tarefa para quando a memória se esgota, mas nenhum dado é removido.
-
Se o banco de dados de origem tiver chaves com política de expiração, o banco de dados de destino pode relatar menos chaves ao usar comandos como
info. Isso ocorre porque chaves expiradas podem não ser excluídas imediatamente.NotaA quantidade de chaves sem política de expiração ou ainda válidas permanece igual em ambos os bancos de dados, origem e destino.
-
Se a conexão direta estiver desativada na instância de destino Tair (Redis OSS-Compatible) Enhanced Edition, o DTS usará o modo de encaminhamento por proxy para gravar dados nessa instância.
NotaPara saber como ativar a conexão direta, consulte Ativar conexão direta.
Se você dimensionar a instância Redis de origem (adicionar ou remover shards) ou alterar suas especificações durante a sincronização, reconfigure a tarefa. Limpe todos os dados sincronizados no destino antes da reconfiguração para garantir a consistência.
Reconfigure a tarefa se o endereço de conexão da instância Redis de origem mudar durante a sincronização (por exemplo, devido a uma alteração de zona de disponibilidade ou migração de rede clássica para VPC).
-
Ao sincronizar de uma instância Redis standalone para uma cluster, lembre-se de que clusters Redis permitem que um único comando opere em apenas um slot. Operações com múltiplas chaves em slots diferentes retornam o seguinte erro:
CROSSSLOT Keys in request don't hash to the same slotPara evitar interrupções na tarefa, execute apenas operações de chave única durante a sincronização do DTS.
A tarefa do DTS falhará com um erro de Out of Memory (OOM) se a instância de destino for do tipo cluster e um de seus shards atingir o limite de memória, ou se o espaço de armazenamento da instância de destino se esgotar.
Se o recurso de criptografia transparente de dados (TDE) estiver ativado na instância de origem ou de destino, não será possível usar o DTS para sincronizar dados da origem para o destino.
Se a instância Redis de origem for autogerenciada, recomendamos definir o tempo limite de replicação entre slave e master (repl-timeout) para 600 segundos usando o comando
config set repl-timeout 600. Se o banco de dados de origem contiver um grande volume de dados, aumente o valor do parâmetro repl-timeout.-
Uma tarefa de sincronização bidirecional inclui tarefas de sincronização direta e reversa. Ao configurar ou redefinir a tarefa, se o objeto de destino de uma tarefa corresponder ao objeto de sincronização da outra:
Permita que apenas uma tarefa sincronize dados completos e incrementais. A outra tarefa deve suportar apenas sincronização incremental.
Os dados da origem da tarefa atual são sincronizados apenas com o destino da tarefa atual. Eles não servem como dados de origem para a outra tarefa.
Faturamento
|
Tipo de sincronização |
Preço |
|
Sincronização de esquema e sincronização completa de dados |
Gratuito. |
|
Sincronização incremental de dados |
Pago. Para mais informações, consulte Visão geral do faturamento. |
Limites
A sincronização em cascata unidirecional não é suportada. Para mais detalhes, consulte Topologias de sincronização.
Comandos sincronizáveis
APPEND
BITOP, BLPOP, BRPOP e BRPOPLPUSH
DECR, DECRBY e DEL
EVAL, EVALSHA, EXEC, EXPIRE e EXPIREAT
GEOADD e GETSET
HDEL, HINCRBY, HINCRBYFLOAT, HMSET, HSET e HSETNX
INCR, INCRBY e INCRBYFLOAT
LINSERT, LPOP, LPUSH, LPUSHX, LREM, LSET e LTRIM
MOVE, MSET, MSETNX e MULTI
PERSIST, PEXPIRE, PEXPIREAT, PFADD, PFMERGE e PSETEX
RENAME, RENAMENX, RPOP, RPOPLPUSH, RPUSH e RPUSHX
SADD, SDIFFSTORE, SELECT, SET, SETBIT, SETEX, SETNX, SETRANGE, SINTERSTORE, SMOVE, SPOP, SREM e SUNIONSTORE
UNLINK, ZADD, ZINCRBY, ZINTERSTORE, ZREM, ZREMRANGEBYLEX, ZUNIONSTORE, ZREMRANGEBYRANK e ZREMRANGEBYSCORE
SWAPDB (Este comando não pode ser sincronizado se a instância de origem ou de destino estiver implantada na arquitetura de cluster.)
Comandos PUBLISH não são sincronizáveis.
Se você executar os comandos EVAL ou EVALSHA para chamar scripts Lua, o DTS não conseguirá identificar se esses scripts foram executados no banco de dados de destino. Isso acontece porque o banco de dados de destino não retorna explicitamente os resultados da execução de scripts Lua durante a sincronização incremental.
Quando o DTS executa o comando SYNC ou PSYNC para transferir dados do tipo LIST, ele não limpa os dados existentes. Consequentemente, a instância de destino pode conter registros de dados duplicados.
Antes de começar
Para proteger o par de AccessKey da sua conta Alibaba Cloud, recomendamos criar um usuário do Resource Access Management (RAM), conceder a esse usuário as permissões de acesso ao DTS e, em seguida, usar o par de AccessKey do usuário RAM para chamar o SDK do DTS para Java. Para mais informações, consulte Controlar o acesso a recursos usando usuários RAM.
Criar uma instância de sincronização de dados
Faça login no OpenAPI Explorer.
-
Configure os parâmetros da solicitação conforme suas necessidades de negócio. A tabela a seguir descreve os parâmetros.
Parâmetro
Descrição
Valor
SourceRegion
ID da região onde a instância de origem está localizada.
Especifique um valor para estes parâmetros de acordo com seus requisitos de negócio.
DestRegion
ID da região onde a instância de destino está localizada.
Topology
Topologia de sincronização. Valores válidos:
-
oneway (padrão): sincronização unidirecional.
-
bidirectional: sincronização bidirecional.
SynchronizationJobClass
Classe da instância de sincronização de dados.
PayType
Método de faturamento da instância de sincronização de dados. Valores válidos:
-
PrePaid: assinatura.
-
PostPaid (padrão): pagamento conforme o uso.
SourceEndpoint.InstanceType
Tipo da instância de origem.
Defina o valor como Redis.
DestinationEndpoint.InstanceType
Tipo da instância de destino.
Defina o valor como Redis.
NotaPara mais informações, consulte CreateSynchronizationJob.
-
Na parte inferior da página, clique em Initiate Call.
-
Na aba Response, visualize a resposta da API.
NotaAnote o ID da instância de sincronização (
SynchronizationJobId) retornado na resposta.ImportanteSe a solicitação falhar, modifique os parâmetros com base na message retornada na resposta e envie a solicitação novamente até obter sucesso.
-
Opcional: Obtenha o código de exemplo do SDK.
Clique na aba SDK Sample Code.
Especifique a versão do SDK e a linguagem de programação.
Clique no ícone de cópia no canto superior direito da seção de código para copiá-lo.
Configurar uma tarefa de sincronização unidirecional
Neste exemplo, a conta de banco de dados da instância de origem tem permissões de leitura no banco de dados de origem. A conta de banco de dados da instância de destino tem permissões de leitura e gravação no banco de dados de destino.
Ao configurar a sincronização unidirecional, você também pode usar um banco de dados Redis autogerenciado ou uma instância Tair (Redis-compatible) como origem ou destino. O método de configuração é semelhante ao deste exemplo, mas é necessário ajustar os parâmetros de solicitação correspondentes, como MigrationReserved.
Faça login no OpenAPI Explorer.
-
Configure os parâmetros da solicitação conforme suas necessidades de negócio.
NotaDefina o parâmetro SynchronizationDirection como Forward. Para mais informações, consulte ConfigureSynchronizationJob.
Na parte inferior da página, clique em Initiate Call.
-
Na aba Response, visualize a resposta da API.
ImportanteSe a chamada falhar, verifique a Message na resposta, corrija o problema e tente novamente.
-
Opcional. Obtenha o código de exemplo do SDK.
Clique na aba SDK Sample Code.
Especifique a versão do SDK e a linguagem de programação.
Clique no ícone de cópia no canto superior direito da seção de código para copiá-lo.
Configurar tarefas de sincronização bidirecional
Neste exemplo, as contas de banco de dados usadas para sincronização possuem permissões de leitura e gravação.
Configure uma tarefa de sincronização de dados na direção direta. Para mais informações, consulte a seção Configurar uma tarefa de sincronização unidirecional deste tópico.
-
Aguarde até que a tarefa de sincronização direta conclua a inicialização e seu status mude para Synchronizing.
NotaVisualize o status da tarefa de sincronização no console do DTS ou chamando a operação Consultar o status de uma tarefa de sincronização de dados.
-
Configure a tarefa de sincronização de dados na direção reversa.
Opcional. Faça login no OpenAPI Explorer.
-
Configure os parâmetros da solicitação conforme suas necessidades de negócio.
NotaDefina o parâmetro SynchronizationDirection como Reverse. Para mais informações, consulte ConfigureSynchronizationJob.
Na parte inferior da página, clique em Initiate Call.
-
Na aba Response, visualize a resposta da API.
ImportanteSe a chamada falhar, verifique a Message na resposta, corrija o problema e tente novamente.
-
Opcional. Obtenha o código de exemplo do SDK.
Clique na aba SDK Sample Code.
Especifique a versão do SDK e a linguagem de programação.
Clique no ícone de cópia no canto superior direito da seção de código para copiá-lo.
Referências
-
Status e desempenho da tarefa de sincronização
Monitore o desempenho da sincronização de dados usando o métricas de desempenho. O DTS fornece métricas de conexão e desempenho para ajudar você a gerenciar tarefas de sincronização.
-
Adicionar objetos de sincronização ou Remover um objeto de uma tarefa de sincronização de dados
Durante uma tarefa de sincronização, adicione ou remova objetos conforme necessário.