Puede usar la API de Data Transmission Service (DTS) para configurar la sincronización de datos unidireccional o bidireccional en instancias Tair (Redis OSS-Compatible) Enhanced Edition. En este tema se describen las notas de uso y se proporciona código de ejemplo.
Requisitos previos
Las instancias de origen y destino son instancias Tair (Redis OSS-Compatible) Enhanced Edition.
Si una instancia Tair utiliza persistent memory como storage medium, asegúrese de que el parámetro appendonly esté establecido en yes. Para obtener más información, consulte Procedure.
Notas de uso
-
En la sincronización bidireccional, el trabajo de sincronización directa ejecuta la sincronización inicial completa de datos y la sincronización incremental. El trabajo de sincronización inversa solo ejecuta la sincronización incremental de datos.
AvisoPara garantizar la consistencia de los datos, no modifique ni escriba datos en la misma clave de las bases de datos de origen y destino mientras se ejecuta la tarea de sincronización bidireccional.
DTS consume recursos de las bases de datos de origen y destino durante la sincronización inicial completa de datos, lo cual puede aumentar la carga en los servidores de base de datos. Si sincroniza un gran volumen de datos o si las especificaciones del servidor no cumplen con sus requisitos, los servicios de base de datos podrían dejar de estar disponibles. Antes de sincronizar los datos, evalúe el impacto de esta operación en el rendimiento de las instancias de origen y destino. Se recomienda ejecutar la sincronización fuera del horario de mayor actividad.
No ejecute los comandos
FLUSHDBniFLUSHALLen la instancia de origen. De lo contrario, se generará una inconsistencia de datos entre el origen y el destino.-
Si la instancia de destino se queda sin memoria, el desalojo de datos puede provocar inconsistencias entre el origen y el destino. La política predeterminada maxmemory-policy para Tair (Redis OSS-Compatible) es volatile-lru. Esta configuración no afecta la ejecución de la tarea, pero sí puede desalojar datos.
Establezca la política de desalojo del destino en noeviction para evitar la pérdida de datos. Con esta política, las operaciones de escritura fallan y la tarea se detiene cuando se agota la memoria, pero no se desaloja ningún dato.
-
Si la base de datos de origen contiene claves con una política de expiración, es posible que la base de datos de destino reporte menos claves al consultarla con un comando como
info. Esto ocurre porque las claves expiradas no siempre se eliminan de inmediato.NotaLa cantidad de claves que no tienen una política de expiración o que aún no han expirado es la misma tanto en la base de datos de origen como en la de destino.
-
Si la conexión directa está deshabilitada en la instancia de destino Tair (Redis OSS-Compatible) Enhanced Edition, DTS utiliza el modo de reenvío por proxy para escribir los datos en dicha instancia.
NotaPara obtener más información sobre cómo habilitar la conexión directa, consulte Enable direct connection.
Si escala la instancia Redis de origen (agrega o elimina fragmentos) o cambia sus especificaciones durante la sincronización, vuelva a configurar la tarea. Elimine todos los datos sincronizados del destino antes de reconfigurarla para garantizar la consistencia de los datos.
Si la dirección de conexión de la instancia Redis de origen cambia durante la sincronización (por ejemplo, debido a un cambio de zona de disponibilidad o a una migración de red clásica a VPC), vuelva a configurar la tarea.
-
Al sincronizar desde una instancia Redis independiente hacia una instancia de clúster, tenga en cuenta que los clústeres de Redis permiten que un solo comando opere únicamente sobre un slot. Las operaciones con múltiples claves distribuidas en distintos slots devuelven el siguiente error:
CROSSSLOT Keys in request don't hash to the same slotPara evitar interrupciones en la tarea, ejecute solo operaciones de clave única durante la sincronización de DTS.
Si la instancia de destino es un clúster y uno de sus fragmentos alcanza el límite de memoria, o si la instancia se queda sin espacio de almacenamiento, el trabajo de DTS falla con un error Out of Memory (OOM).
Si la función de cifrado transparente de datos (TDE) está habilitada en la instancia de origen o de destino, no es posible utilizar DTS para sincronizar datos entre ambas bases de datos.
Si la instancia de origen es un Redis autogestionado, se recomienda establecer el tiempo de espera de replicación entre el nodo esclavo y el maestro (repl-timeout) en 600 segundos mediante el comando
config set repl-timeout 600. Si la base de datos de origen contiene un gran volumen de datos, puede aumentar el valor del parámetro repl-timeout.-
Una tarea de sincronización bidireccional incluye tareas de sincronización directa e inversa. Al configurar o restablecer la tarea, si el objeto de destino de una coincide con el objeto de sincronización de la otra, aplique las siguientes consideraciones:
Permita que solo una tarea sincronice datos completos e incrementales. La otra tarea admitirá únicamente la sincronización incremental.
Los datos del origen de la tarea actual se sincronizan exclusivamente con el destino de esa misma tarea. No funcionan como datos de origen para la otra tarea.
Facturación
|
Tipo de sincronización |
Precio |
|
Sincronización de esquemas y sincronización completa de datos |
Sin costo. |
|
Sincronización incremental de datos |
Con costo. Para obtener más información, consulte Billing overview. |
Límites
La sincronización en cascada unidireccional no es compatible. Para obtener más información, consulte Synchronization topologies.
Comandos que se pueden sincronizar
APPEND
BITOP, BLPOP, BRPOP y BRPOPLPUSH
DECR, DECRBY y DEL
EVAL, EVALSHA, EXEC, EXPIRE y EXPIREAT
GEOADD y GETSET
HDEL, HINCRBY, HINCRBYFLOAT, HMSET, HSET y HSETNX
INCR, INCRBY e INCRBYFLOAT
LINSERT, LPOP, LPUSH, LPUSHX, LREM, LSET y LTRIM
MOVE, MSET, MSETNX y MULTI
PERSIST, PEXPIRE, PEXPIREAT, PFADD, PFMERGE y PSETEX
RENAME, RENAMENX, RPOP, RPOPLPUSH, RPUSH y RPUSHX
SADD, SDIFFSTORE, SELECT, SET, SETBIT, SETEX, SETNX, SETRANGE, SINTERSTORE, SMOVE, SPOP, SREM y SUNIONSTORE
UNLINK, ZADD, ZINCRBY, ZINTERSTORE, ZREM, ZREMRANGEBYLEX, ZUNIONSTORE, ZREMRANGEBYRANK y ZREMRANGEBYSCORE
SWAPDB (este comando no se puede sincronizar si la instancia de origen o de destino está desplegada con arquitectura de clúster).
Los comandos PUBLISH no se pueden sincronizar.
Si ejecuta el comando EVAL o EVALSHA para llamar scripts de Lua, DTS no puede identificar si dichos scripts se ejecutaron en la base de datos de destino. Esto se debe a que la base de datos de destino no devuelve explícitamente los resultados de ejecución de los scripts de Lua durante la sincronización incremental de datos.
Cuando DTS ejecuta el comando SYNC o PSYNC para transferir datos de tipo LIST, no elimina los datos existentes. Como resultado, la instancia de destino podría contener registros de datos duplicados.
Antes de empezar
Para proteger el par de AccessKey de su cuenta de Alibaba Cloud, se recomienda crear un usuario de Resource Access Management (RAM), otorgarle permisos de acceso a DTS y utilizar el par de AccessKey de dicho usuario para llamar al SDK de DTS para Java. Para obtener más información, consulte Control del acceso a recursos mediante usuarios de RAM.
Creación de una instancia de sincronización de datos
Inicie sesión en OpenAPI Explorer.
-
Configure los parámetros de la solicitud según sus necesidades de negocio. A continuación se describen los parámetros.
Parámetro
Descripción
Valor
SourceRegion
El identificador de la región donde reside la instancia de origen.
Especifique un valor para estos parámetros según sus necesidades de negocio.
DestRegion
El identificador de la región donde reside la instancia de destino.
Topology
La topología de sincronización. Valores válidos:
-
oneway (predeterminado): sincronización unidireccional.
-
bidirectional: sincronización bidireccional.
SynchronizationJobClass
La clase de la instancia de sincronización de datos.
PayType
El método de facturación de la instancia de sincronización de datos. Valores válidos:
-
PrePaid: subscription.
-
PostPaid (predeterminado): pay-as-you-go.
SourceEndpoint.InstanceType
El tipo de la instancia de origen.
Establezca el valor en Redis.
DestinationEndpoint.InstanceType
El tipo de la instancia de destino.
Establezca el valor en Redis.
NotaPara obtener más información, consulte CreateSynchronizationJob.
-
En la parte inferior de la página, haga clic en Initiate Call.
-
En la pestaña Response, consulte la respuesta de la API.
NotaAnote el identificador de la instancia de sincronización (
SynchronizationJobId) que aparece en la respuesta.ImportanteSi la solicitud falla, modifique los parámetros de acuerdo con el campo message devuelto en la respuesta y envíela nuevamente hasta que se complete con éxito.
-
Opcional: Obtenga el código de ejemplo del SDK.
Haga clic en la pestaña SDK Sample Code.
Especifique la versión del SDK y el lenguaje de programación.
Haga clic en el ícono de copia ubicado en la esquina superior derecha de la sección de código para copiarlo.
Configuración de una tarea de sincronización unidireccional
En este ejemplo, la cuenta de base de datos de la instancia de origen tiene permisos de lectura sobre dicha base de datos. La cuenta de la instancia de destino cuenta con permisos de lectura y escritura sobre su base de datos.
Al configurar la sincronización unidireccional de datos, también puede utilizar una base de datos Redis autogestionada o una instancia Tair (Redis-compatible) como origen o destino. El método de configuración es similar al de este ejemplo, pero debe ajustar los parámetros de solicitud correspondientes, como MigrationReserved.
Inicie sesión en OpenAPI Explorer.
-
Configure los parámetros de la solicitud según sus necesidades de negocio.
NotaDebe establecer el parámetro SynchronizationDirection en Forward. Para obtener más información, consulte ConfigureSynchronizationJob.
En la parte inferior de la página, haga clic en Initiate Call.
-
En la pestaña Response, consulte la respuesta de la API.
ImportanteSi la llamada falla, revise el campo Message de la respuesta, corrija el problema y vuelva a intentarlo.
-
Opcional. Obtenga el código de ejemplo del SDK.
Haga clic en la pestaña SDK Sample Code.
Especifique la versión del SDK y el lenguaje de programación.
Haga clic en el ícono de copia ubicado en la esquina superior derecha de la sección de código para copiarlo.
Configuración de tareas de sincronización bidireccional
En este ejemplo, las cuentas de base de datos utilizadas para la sincronización de datos cuentan con permisos de lectura y escritura.
Configure una tarea de sincronización de datos en dirección directa. Para obtener más información, consulte la sección Configure a one-way synchronization task de este tema.
-
Espere a que el trabajo de sincronización directa finalice la inicialización y su estado cambie a Synchronizing.
NotaPuede consultar el estado de una tarea de sincronización de datos en la consola de DTS o mediante la llamada a la operación Query the status of a data synchronization job.
-
Configure la tarea de sincronización de datos en dirección inversa.
Opcional. Inicie sesión en OpenAPI Explorer.
-
Configure los parámetros de la solicitud según sus necesidades de negocio.
NotaDebe establecer el parámetro SynchronizationDirection en Reverse. Para obtener más información, consulte ConfigureSynchronizationJob.
En la parte inferior de la página, haga clic en Initiate Call.
-
En la pestaña Response, consulte la respuesta de la API.
ImportanteSi la llamada falla, revise el campo Message de la respuesta, corrija el problema y vuelva a intentarlo.
-
Opcional. Obtenga el código de ejemplo del SDK.
Haga clic en la pestaña SDK Sample Code.
Especifique la versión del SDK y el lenguaje de programación.
Haga clic en el ícono de copia ubicado en la esquina superior derecha de la sección de código para copiarlo.
Referencias
-
Synchronization task status and performance
Puede consultar el rendimiento de la sincronización de datos mediante la métricas de rendimiento. DTS proporciona métricas de conexión y de rendimiento para ayudarle a gestionar las tareas de sincronización de datos.
-
Add synchronization objects o Remove an object from a data synchronization task
Durante la ejecución de una tarea de sincronización de datos, puede agregar o quitar objetos de dicha tarea.