Use a API do Data Transmission service (DTS) para configure 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 source e de destino devem ser 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 Procedure.
Observações de uso
-
Na sincronização bidirecional, a tarefa direta executa a sincronização inicial completa e a incremental. A tarefa 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 source e de destino enquanto a tarefa de sincronização bidirecional estiver em execução.
O DTS consome recursos dos bancos de dados de source 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 as especificações do servidor forem insuficientes, os serviços de banco de dados podem ficar indisponíveis. Antes de iniciar a sincronização, avalie o impacto no desempenho das instâncias de source e de destino. Recomendamos execute a sincronização em horários de baixa demanda.
Não execute os comandos
FLUSHDBouFLUSHALLna instância de source. Caso contrário, haverá inconsistência de dados entre a source e o destino.-
Se a memória do destino se esgotar, a evicção de dados poderá causar inconsistências entre a source e o destino. A política padrão maxmemory-policy do Tair (Redis OSS-Compatible) é volatile-lru, que 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 source tiver chaves com política de expiração, o banco de dados de destino poderá apresentar menos chaves ao serem verificadas por comandos como
info. Isso ocorre porque as chaves expiradas podem não ser excluídas imediatamente.NotaA quantidade de chaves sem política de expiração ou ainda válidas é idêntica nos bancos de dados de source e de 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 mais detalhes sobre como ative a conexão direta, consulte Enable direct connection.
Se você redimensionar a instância Redis de source (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 assegurar a consistência.
Se o endereço de conexão da instância Redis de source mudar durante a sincronização (por exemplo, devido à mudança de zona de disponibilidade ou migração de rede clássica para vpc), reconfigure a tarefa.
-
Ao sincronizar de uma instância Redis standalone para uma cluster, os 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.
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 acabar, a tarefa do DTS falhará com um erro de Out of Memory (OOM).
Se o recurso de criptografia transparente de dados (TDE) estiver ativado na instância de source ou de destino, não será possível usar o DTS para sincronizar dados entre elas.
Para instâncias Redis autogerenciadas na source, recomendamos defina 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 source 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 configure ou redefinir a tarefa, se o objeto de destino de uma corresponder ao objeto de sincronização da outra:
Permita que apenas uma tarefa sincronize dados completos e incrementais. A outra tarefa deve ter suporte somente a sincronização incremental.
Os dados da source da tarefa atual serão sincronizados exclusivamente com o destino dessa mesma tarefa, não servindo como fonte 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 Billing overview. |
Limites
Não há suporte para sincronização em cascata unidirecional. Para mais informações, consulte Synchronization topologies.
Comandos que podem ser sincronizados
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 source ou de destino estiver implantada na arquitetura cluster.)
Comandos PUBLISH não podem ser sincronizados.
Ao execute os comandos EVAL ou EVALSHA para chamar scripts Lua, o DTS não consegue 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. Como resultado, 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 crie um usuário do Resource Access Management (ram), conceder a esse usuário as permissões de acesso ao DTS e 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.
Crie 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 source está localizada.
Especifique um valor para estes parâmetros com base nas suas necessidades 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 source.
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.
Configure uma tarefa de sincronização unidirecional
Neste exemplo, a conta do banco de dados de source tem permissões de leitura no banco de dados de source. A conta do banco de dados de destino tem permissões de leitura e gravação no banco de dados de destino.
Ao configure a sincronização unidirecional, também é possível usar um banco de dados Redis autogerenciado ou uma instância Tair (Redis-compatible) como source ou destino. O método de configuração é semelhante ao deste exemplo, mas você deve ajustar os parâmetros correspondentes da solicitação, como MigrationReserved.
Faça login no openapi Explorer.
-
Configure os parâmetros da solicitação conforme suas necessidades de negócio.
NotaÉ obrigatório defina 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.
Configure tarefas de sincronização bidirecional
Neste exemplo, as contas de banco de dados usadas para sincronização têm 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 Configure a one-way synchronization task 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 de dados no console do DTS ou chamando a operação Query the status of a data synchronization job.
-
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.
NotaÉ obrigatório defina 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
-
Synchronization task status and performance
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 auxiliar no gerencie das tarefas de sincronização.
-
Add synchronization objects ou Remove an object from a data synchronization task
Durante uma tarefa de sincronização de dados, adicione ou remova objetos da tarefa conforme necessário.