Join us at MongoDB.local London on 7 May to unlock new possibilities for your data. Use WEB50 to save 50%.
Register now >
Docs Menu
Docs Home
/ /

mongosync Comportamiento

El binario mongosync es el proceso principal utilizado en Mongosync. mongosync migra datos de un clúster a otro.

Para una descripción general del proceso mongosync, consulta Acerca de mongosync.

Para comenzar a usar mongosync, consulta la Guía de inicio rápido.

Para obtener información más detallada, consulte la página de Instalación o Conexión mongosync que mejor se ajuste a su situación.

A partir de 1.9, mongosync incluye un verificador incorporado para realizar una serie de comprobaciones de verificación en todas las colecciones compatibles en el clúster de destino para confirmar que se logró transferir documentos desde el clúster de origen al destino.

Al iniciar el proceso mongosync, proporciona el siguiente descargo de responsabilidad:

Embedded verification is enabled by default. Verification checks for data
consistency between the source and destination clusters. Verification will
cause mongosync to fail if any inconsistencies are detected, but it does not
check for all possible data inconsistencies. Please see the documentation at
https://www.mongodb.com/es/docs/cluster-to-cluster-sync/current/reference/verification/embedded
for more details. Verification requires approximately 0.5 GB of memory per 1
million documents on the source cluster and will fail if insufficient memory
is available. Accepting this disclaimer indicates that you understand the
limitations and memory requirements for this tool. To skip this disclaimer
prompt, use –-acceptDisclaimer.
To disable the embedded verifier, specify 'verification: false' when starting
mongosync. Please see https://www.mongodb.com/es/docs/cluster-to-cluster-sync/current/reference/verification/
for alternative verification methods.
Do you want to continue? (y/n):

Si ya ha leído y aceptado el descargo de responsabilidad, puede comenzar mongosync con la opción para omitir esta --acceptDisclaimer notificación.

mongosync sincroniza los datos de la colección entre un clúster de origen y un clúster de destino. mongosync no se sincroniza users or rol. Como resultado, puedes crear usuarios con diferentes permisos de acceso en cada clúster.

Se pueden configurar opciones para mongosync en un archivo de configuración YAML. Utilice la opción --config. Por ejemplo:

$ mongosync --config /etc/mongosync.conf

Para obtener información sobre las configuraciones disponibles, consulte Configuración.

Mongosync admite la replicación entre clústeres particionados. mongosync replica particiones individuales en paralelo desde el clúster de origen al clúster de destino. Sin embargo, mongosync no preserva la configuración de particionado del clúster de origen.

Importante

Siempre debes desactivar el balanceador en un clúster de destino particionado usando balancerStop. Después de detener el balanceador, espere quince minutos antes de iniciar mongosync. Esto le da al clúster tiempo para finalizar cualquier migración de fragmentos en curso.

Si el clúster de origen o destino es un clúster fragmentado y no está ejecutando mongosync con filtrado de espacio de nombres, debe deshabilitar el equilibrador del clúster de origen ejecutando el comando y balancerStop esperando 15 minutos para que se complete el comando.

Si el clúster origen o destino es un clúster y ejecutas mongosync con el filtrado de namespaces, puedes habilitar globalmente el balanceador del clúster de origen pero debes deshabilitarlo para todas las colecciones dentro del filtro de namespaces. Consulta Cómo deshabilitar el equilibrador para colecciones en sincronización filtrada También puedes desactivar completamente el equilibrador del clúster de origen.

Durante la migración, no ejecute los comandosmoveChunknimoveRange. Si ha habilitado el balanceador del clúster de origen, pero lo ha deshabilitado para las colecciones dentro del filtro de espacio de nombres, no ejecuteshardCollectionen las colecciones dentro del filtro de espacio de nombres. Si ejecutashardCollectionen las colecciones dentro del filtro de espacio de nombres durante la migración, mongosync devuelve un error y se detiene, lo que requiere que inicie la migración desde cero.

A partir de la versión 1.17, mongosync deshabilita el balanceador en los clústeres de origen y destino durante la inicialización si detecta que los balanceadores no están deshabilitados.

Esto solo se aplica durante la inicialización. Si mongosync detecta que cualquiera de los balanceadores está habilitado después de que comience la migración, mongosync fallará.

Después de desactivar el balanceador, mongosync espera 15 minutos para asegurarse de que las migraciones de fragmentos en curso se completen antes de continuar con la migración.

Si la migración no es reversible y mongosync deshabilita el balanceador de origen o de destino durante la inicialización, después de un commit exitoso, mongosync volverá a habilitar el/los balanceador(es) que deshabilitó. Si la migración es reversible, mongosync no vuelve a habilitar ningún balanceador para evitar que los usuarios tengan que esperar 15 minutos.

IMPORTANTE: Si mongosync deshabilita el balanceador para cualquiera de los clústeres y luego falla antes de la confirmación, debe balancerStart mongosync volver a habilitar el balanceador(es) manualmente mediante el comando de base de datos si no planea ejecutar nuevamente.

Si está utilizando un filtro de espacio de nombres y desea habilitar el balanceador de su clúster de origen para colecciones fuera del filtro de espacio de nombres, siga estas instrucciones antes de mongosync comenzar.

1

Antes de iniciar mongosync con un filtro de espacio de nombres, habilite el balanceador para el clúster de origen ejecutando el sh.startBalancer() método mongosh en.

2

Deshabilite el balanceador para cada colección dentro del filtro de espacio de nombres ejecutando el comando setAllowMigrations:

db.adminCommand(
{
setAllowMigrations: “<db>.<collection>”,
allowMigrations: false
}
)

Ejecute el comando anterior para cada colección dentro del filtro de espacio de nombres.

Importante

Si habilita el balanceador del clúster de origen pero no usa un filtro de espacio de nombres, o si no deshabilita el balanceador para todas las colecciones dentro del filtro de espacio de nombres, mongosync falla.

Cuando mongosync se sincroniza con un clúster de destino particionado, predivide los fragmentos para las colecciones particionadas en el clúster de destino. Para cada colección particionada, mongosync intenta crear 90 fragmentos.

Importante

Incluso si el clúster de origen está equilibrado, mongosync no garantiza el equilibrio del clúster de destino. Porque mongosync no permite la ejecución de operaciones de partición durante la migración, debes esperar hasta que sea seguro aceptar escrituras para reequilibrar el clúster de destino. Consulta Balanceador del clúster fragmentado para conocer la orientación sobre cómo reequilibrar el clúster y limitaciones del clúster fragmentado para obtener información sobre las limitaciones del clúster fragmentado en mongosync.

mongosync no conserva la distribución de fragmentos desde el origen hasta el destino, incluso con múltiples instancias de mongosync. No es posible reproducir una pre-división particular de fragmentos de un clúster de origen en el clúster de destino.

La única configuración de particionado que mongosync conserva del clúster de origen al clúster de destino es la clave de particionado. Una vez que termine la migración, puedes habilitar el balanceador del clúster de destino, que distribuye los documentos independientemente de la distribución del clúster de origen.

Cuando sincronices con un clúster de destino particionado, mongosync asignará una partición primaria a cada base de datos mediante un reenvío circular.

Advertencia

La ejecución de movePrimary en el clúster de origen o destino durante la migración puede resultar en un error fatal o requerir que reinicie la migración desde el principio. Para obtener más información, consulte Clústeres fragmentados.

A partir de 8.0, MongoDB introduce soporte para clústeres de particiones de configuración, también conocidos como clústeres de servidores de configuración integrados.

mongosync Admite la sincronización desde clústeres fragmentados del servidor de configuración dedicado a clústeres fragmentados del servidor de configuración integrado y viceversa. Además, mongosync admite la sincronización desde conjuntos de réplicas a clústeres fragmentados de configuración, pero no viceversa.

Para obtener más información sobre los servidores de configuración embebidos, consulta Partición de configuración.

Para sincronizar un clúster de origen con varios clústeres de destino, use una instancia de mongosync para cada clúster de destino Para más información, consulte Limitaciones de Múltiples Clústeres.

A partir de 1.3.0, Mongosync admite colecciones con tamaño fijo con algunas limitaciones.

  • convertToCapped no es compatible. Si ejecutas convertToCapped, mongosync sale con un error.

  • cloneCollectionAsCapped No es compatible.

Las colecciones con tamaño fijo en el clúster de origen funcionan con normalidad durante la sincronización.

Las colecciones con tamaño fijo en el clúster de destino tienen cambios temporales durante la sincronización:

  • No hay un número máximo de documentos.

  • El tamaño máximo de colección es 1PB.

mongosync restaura los valores originales para la cantidad máxima de documentos y el tamaño máximo de documentos durante la confirmación.

Por defecto, mongosync habilita el bloqueo de escritura solo en el destino en el clúster de destino. mongosync desbloquea los guardados justo antes de que el endpoint /progress informe que canWrite está true. Puedes habilitar explícitamente el bloqueo de escritura solo de destino usando el endpoint /start para establecer enableUserWriteBlocking en "destinationOnly".

Puedes habilitar el doble bloqueo de guardado. Si habilitas el doble bloqueo de escritura, mongosync bloquea los guardados:

  • En el clúster de destino durante la migración. mongosync desbloquea los guardados justo antes de establecer canWrite en true

  • En el clúster de origen después de haber llamar a /commit

Para habilitar el bloqueo dual de escritura, use /start para establecer enableUserWriteBlocking en "sourceAndDestination".

Puede utilizar /start para configurar enableUserWriteBlocking en "none".

No puedes activar el bloqueo dual de guardado o desactivar el bloqueo de guardado después de iniciar la sincronización.

Si desea utilizar la sincronización inversa más adelante, debe habilitar el bloqueo de escritura dual cuando mongosync inicie.

Para establecer enableUserWriteBlocking, el usuario mongosync debe tener un rol que incluya los setUserWriteBlockMode y bypassWriteBlockingMode ActionTypes.

Nota

Cuando utilices enableUserWriteBlocking, solo se bloquearán los guardados para los usuarios que no tengan el tipo de acción bypassWriteBlockingMode. Los usuarios que tengan este ActionType podrán realizar guardados.

Las operaciones de lectura en el clúster de origen siempre están permitidas.

Cuando el punto final /progress informa canWrite truecomo, los datos de los clústeres de origen y destino son consistentes.

Para ver en qué estado se encuentra mongosync, llama al endpoint /progress de la API. La salida /progress incluye un valor booleano, canWrite.

  • Cuando canWrite es true, es seguro guardar en el clúster de destino.

  • Cuando canWrite sea false, no guarde en el clúster de destino.

Puedes guardar de forma segura en el clúster de origen mientras mongosync se está sincronizando. No guardes en el clúster de destino a menos que canWrite esté true.

Por defecto, mongosync establece el nivel de consistencia de lectura en "majority" para las lecturas en el clúster de origen. Para escrituras en el clúster de destino, mongosync establece el nivel de confirmación de escritura (write concern) en "majority" con j: true.

Para obtener más información sobre la configuración y el comportamiento de nivel de consistencia de lectura y nivel de confirmación de escritura (write concern), consulta Nivel de consistencia de lectura y nivel de confirmación de escritura (write concern).

mongosync requiere la preferencia de lectura primary al conectar con los clústeres de origen y destino. Para más información, consulta Opciones de preferencia de lectura.

mongosync reescribe los valores heredados del índice, como 0 o una string vacía, a 1 en el destino. mongosync también remueve cualquier opción de índice no válida en el destino.

mongosync la replicación es diferente de la replicación de datos dentro de un set de réplicas. mongosync combina y reordena guardados del clúster de origen al de destino durante la sincronización, y también modifica temporalmente varias características de la colección.

Como resultado, no se garantiza que el destino coincida con el clúster de origen en ningún punto mientras la sincronización siga ejecutándose, incluso cuando la sincronización esté en pausa. Para asegurarse de que los clústeres de destino y origen coincidan antes de hacer el corte, llame al endpoint commit.

La relación entre el clúster de origen y el de destino finaliza al confirmar, a menos que se utilice la función inversa. Para obtener información sobre las restricciones durante la sincronización, consulte Limitaciones.

Importante

Hasta que se haya llamado a commit en mongosync y canWrite devuelva true correctamente, las colecciones migradas en el clúster de destino no se pueden usar para aceptar tráfico de lectura o guardado de aplicaciones. No se debe utilizar mongosync para mantener clústeres secundarios para recuperación ante desastres, análisis u otros casos de uso similares.

mongosync modifica temporalmente las siguientes características de la colección durante la sincronización. Los valores originales se restauran durante el proceso de confirmación.

Cambio
Descripción

Unique Indexes

Los índices únicos en el clúster de origen se sincronizan como índices no únicos en el clúster de destino.

TTL Indexes

La sincronización establece expireAfterSeconds en el valor de MAX_INT en el clúster de destino.

Hidden Indexes

La sincronización replica los índices ocultos como no ocultos.

Bloqueo de escritura

Si se habilita el bloqueo dual de guardar, mongosync bloquea los guardados:

  • En el clúster de destino durante la sincronización.

  • En el clúster de origen cuando se recibe commit.

mongosync habilita el bloqueo de escritura solo en destino por defecto.

Para obtener más información, consulte Bloqueo de Escritura.

Colecciones con tamaño fijo

La sincronización establece las colecciones limitadas al tamaño máximo permitido.

Índices Dummy

En algunos casos, la sincronización puede crear índices ficticios en el destino para admitir escrituras en colecciones fragmentadas o agrupadas.

mongosync no admite creación de índices continuos durante la migración. Para evitar crear índices de manera progresiva durante la migración, utiliza uno de los siguientes métodos para asegurarte de que tus índices de destino coincidan con tus índices de origen:

  • Construya el índice en la fuente antes de la migración.

  • Construye el índice en el origen durante la migración con una creación de índices por defecto.

  • Construya el índice en el destino después de la migración.

mongosync almacena su metadatos en una base de datos o en varias bases de datos durante la migración. Las bases de datos de metadatos pueden llamarse de cualquiera de las siguientes maneras:

  • mongosync_reserved_for_internal_use

  • Cualquier cosa que comience con mongosync_internal_

  • Cualquier cosa que comience con mongosync_reserved_for_verification_

Debes descartar todas las bases de datos de metadatos después de una migración exitosa. Después de eliminar los metadatos, no es posible revertir la migración.

mongosync permite consistencia eventual en el clúster de destino. La coherencia de lectura no está garantizada en el clúster de destino hasta la confirmación. Antes de confirmar, las fuentes y clústeres de destino pueden diferir en un punto dado en el tiempo. Para obtener más información, consulta Consideraciones de sincronización intermedia.

Mientras mongosync se está sincronizando, mongosync puede reordenar o combinar escrituras mientras las transmite de la fuente al destino. Para un documento determinado, el número total de guardados puede diferir entre el origen y el destino.

Las transacciones podrían no aparecer atómicamente en el clúster de destino. Las escrituras reintentables pueden no ser reintentables en el clúster de destino.

Si el análisis de rendimiento está activado en una base de datos de origen, MongoDB crea una colección especial llamada <db>.system.profile. Una vez que la sincronización esté completa, Mongosync no descartará la colección <db>.system.profile del destino, incluso si la base de datos de origen se descarta en un momento posterior. La colección <db>.system.profile no cambiará la precisión de los datos de usuario en el destino.

Si se elimina una base de datos con vistas en el origen, el destino podría mostrar una colección system.views vacía. Esta colección system.views vacía no afectará la precisión de los datos de usuario en el destino.

Mongosync no replica las colecciones de sistema en el clúster de destino.

Si emite un comando dropDatabase en el clúster de origen, este cambio no se aplica directamente en el clúster de destino. En su lugar, Mongosync descarta las colecciones y vistas de usuario en la base de datos en el clúster de destino, pero no descarta las colecciones del sistema en esa base de datos.

Por ejemplo, en el clúster de destino:

  • La operación de descarte no afecta a una. colección creada por el usuario system.js

  • Si habilitas la creación de perfiles, la colección system.profile permanece.

  • Si crea vistas en el clúster de origen y luego elimina la base de datos, al replicar la eliminación se eliminan las vistas, pero se deja una colección system.views vacía.

En estos casos, la replicación de dropDatabase elimina todas las colecciones creadas por el usuario de la base de datos, pero deja las colecciones del sistema en el clúster de destino.

mongosync crea colecciones con elementos nuevos UUID en el clúster de destino. No existe relación entre los UUID del clúster de origen y los del clúster de destino. Si las aplicaciones contienen UUID codificados de forma rígida (algo que MongoDB no recomienda), puede que sea necesario actualizarlas antes de que funcionen correctamente con el clúster migrado.

mongosync inserta documentos en el clúster de destino en un orden indefinido que no conserva el orden natural de clasificación del clúster de origen. Si las aplicaciones dependen del orden de los documentos pero no tienen un método de ordenamiento definido, es posible que debas actualizar esas aplicaciones para especificar el orden de clasificación esperado antes de que las aplicaciones funcionen correctamente con el clúster migrado.

MongoDB Atlas y otros servicios en la nube almacenan datos esenciales en bases de datos internas dedicadas dentro de su clúster. Estas bases de datos comienzan con __mdb_internal. A partir de 1.18, mongosync ignora todas las bases de datos que empiezan con __mdb_internal.

Nuevo en la versión 1.19.

Si el clúster de origen ejecuta MongoDB 6.0 o una versión posterior, o si configura buildIndexes en afterDataCopy o excludeHashedAfterCopy cuando ejecuta start, mongosync crea índices en el clúster de destino después de copiar los datos. Calcula programáticamente un tamaño de lote adecuado al invocar createIndexes para crear índices en clústeres de destino alojados en MongoDB Atlas. En los clústeres que no son de Atlas, mongosync recurre a un tamaño de lote predeterminado de 2, ya que no puede evaluar de manera fiable la memoria asignada para la creación de índices.

Puede encontrar el tamaño de lote calculado en los mongosync registros buscando "createIndexes batch size".

Para establecer explícitamente un tamaño de lote para las compilaciones de índices, consulte la --createIndexesBatchSize opción de configuración.

mongosync Paraleliza automáticamente las compilaciones de índices en clústeres de destino Atlas mediante la emisión simultánea 12 createIndexes de comandos y el uso del parámetro del clúster de destino maxNumActiveUserIndexBuilds para limitar el número de createIndexes comandos simultáneos. Los clústeres de destino que no son Atlas con datos preexistentes realizan compilaciones de índices en serie para evitar la sobrecarga de la CPU de destino. Si tiene un clúster de destino que no es Atlas y establece preExistingDestinationData en true al llamar al start punto final, no podrá actualizar el paralelismo de compilación de índices.

Para ajustar explícitamente el paralelismo de creación de índices de mongosync, ajusta la configuración de maxNumActiveUserIndexBuilds en el clúster de destino. Aumentar este valor mejora las velocidades generales de creación de índices, pero aumenta la carga de CPU en el destino. Supervisa de cerca el uso de la CPU para evitar la degradación del rendimiento y los eventos de escalado automático no intencionados, que pueden ocurrir cuando el uso de CPU del clúster supera estos límites.

mongosync es resiliente y puede gestionar errores no fatales. Los registros que contienen la palabra "error" o "fallo" no indican que mongosync esté fallando o corrompiendo datos. Por ejemplo, si ocurre un error de red, el registro mongosync puede contener la palabra "error", pero mongosync todavía es capaz de completar la sincronización. En el caso de que no se complete una sincronización, mongosync escribe una entrada de registro fatal.

El uso de operaciones DDL (operaciones que actúan sobre colecciones o bases de datos como db.createCollection() y db.dropDatabase()) durante la sincronización incrementa el riesgo de fallo de migración y puede impactar negativamente el rendimiento de mongosync. Para obtener el mejor rendimiento, abstente de realizar operaciones DDL en el clúster de origen mientras la sincronización está en curso.

Para obtener más información sobre operaciones DDL, consulta Operaciones DDL y transacciones pendientes.

La latencia de red o largas distancias físicas entre los componentes de migración pueden afectar negativamente la velocidad de sincronización.

Latencia entre mongosync y las particiones de destino
Para cada operación en el clúster de origen, mongosync realiza dos viajes de ida y vuelta al servidor de destino. Cuanto mayor sea la latencia, más lenta será la sincronización.
Latencia entre particiones de destino
mongosync ejecuta operaciones y actualiza sus propios metadatos en lotes dentro de una transacción en el clúster de destino. Esto puede dar lugar a transacciones entre particiones, lo que podría ser más costoso si las particiones están muy separadas.
Latencia entre los nodos de cualquier set de réplicas en el clúster de origen o destino
mongosync utiliza "majority" escritos y "majority" lecturas, que requieren el reconocimiento de múltiples nodos en un set de réplicas, incluyendo los sets de réplicas que respaldan particiones. Si la mayoría de estos nodos no está en la misma región, habrá implicaciones negativas en el rendimiento.

Las siguientes consideraciones se refieren a las interrupciones durante el proceso mongosync.

Si mongosync detecta un error o deja de estar disponible durante la sincronización, puede reanudar la operación mongosync desde donde se detuvo. El binario mongosync no tiene estado y almacena los metadatos para un reinicio en el clúster de destino.

Para continuar la sincronización, reinicie mongosync cuando vuelva a estar disponible y utilice los mismos parámetros que la sincronización interrumpida. Al reiniciar mongosync, el proceso se reanudará desde donde se detuvo.

Si su clúster de origen o destino se bloquea inesperadamente, puede reiniciar mongosync de forma segura desde donde se detuvo. Una vez que tu clúster esté disponible nuevamente, reinicia mongosync y usa los mismos parámetros que se interrumpieron en la sincronización anterior.

Si mongosync está en el estado PAUSADO, mongosync no admite las siguientes acciones:

  • Actualizar la versión de MongoDB del clúster de origen o destino

  • Habilitar y luego deshabilitar el balanceador

Puedes actualizar mongosync mientras está en el estado PAUSED.

Volver

Mongosync