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 obtener una descripción general del proceso mongosync, consulte 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 datos de recopilación entre un clúster de origen y un clúster de destino. mongosync no sincroniza Usuarios o roles. Como resultado, puede crear usuarios con diferentes permisos de acceso en cada clúster.

Las opciones para mongosync se pueden configurar en un archivo de configuración YAML. Use la opción. Por --config 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 fragmentados. mongosync replica fragmentos individuales en paralelo desde el clúster de origen al de destino. Sin embargo, mongosync no conserva la configuración de fragmentación del clúster de origen.

Importante

Siempre debe deshabilitar el balanceador en un clúster de destino fragmentado balancerStop mediante. Después de detener el balanceador, espere quince minutos antes de mongosync iniciar. Esto le da tiempo al clúster 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 alguno de los balanceadores está habilitado después de que comience la migración, mongosync falla.

Después de deshabilitar el balanceador, mongosync espera 15 minutos para garantizar 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 destino durante la inicialización, tras una confirmación exitosa, mongosync reactiva los balanceadores que desactivó. Si la migración es reversible, mongosync no reactiva ningún balanceador para evitar que los usuarios esperen 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 setAllowMigrations comando:

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 fragmentado, predivide fragmentos para las colecciones fragmentadas en el clúster de destino. Para cada colección fragmentada, 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. Dado mongosync que no admite la ejecución de operaciones de fragmentación durante la migración, debe esperar hasta que sea seguro aceptar escrituras para reequilibrar el clúster de destino.Consulte Equilibrador de clústeres fragmentados para obtener instrucciones sobre cómo reequilibrar el clúster y las limitaciones de los clústeres fragmentados para obtener información sobre las limitaciones de los clústeres fragmentados mongosync en.

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 fragmentación que mongosync conserva del clúster de origen al de destino es la clave de fragmentación. Una vez finalizada la migración, puede habilitar el balanceador del clúster de destino, que distribuye los documentos independientemente de la distribución del clúster de origen.

Cuando se sincroniza con un clúster de destino fragmentado, mongosync asigna un fragmento principal a cada base de datos mediante una operación por turnos.

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 fragmentos 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 integrados, consulte Config Shard.

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

A partir 1.3.0 de, Mongosync admite colecciones limitadas con algunas limitaciones.

  • convertToCapped No se admite. Si convertToCapped ejecuta, mongosync saldrá con un error.

  • cloneCollectionAsCapped No es compatible.

Las colecciones limitadas en el clúster de origen funcionan normalmente durante la sincronización.

Las colecciones limitadas 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.

Demongosync forma predeterminada, habilita el bloqueo de escritura solo en el destino en el clúster de destino. mongosync desbloquea las escrituras justo antes de que el punto de conexión /progress informe canWrite que true es. Puede habilitar explícitamente el bloqueo de escritura solo en el destino usando el punto de conexión /start para enableUserWriteBlocking establecer "destinationOnly" en.

Puede habilitar el bloqueo de escritura dual. Si lo habilita, mongosync bloquea las escrituras:

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

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

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

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

No puede habilitar el bloqueo de escritura dual ni deshabilitar el bloqueo de escritura una vez que se inicia la sincronización.

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

Para enableUserWriteBlocking establecer, el mongosync usuario debe tener un rol que incluya los setUserWriteBlockMode bypassWriteBlockingMode tipos de acción y.

Nota

Al enableUserWriteBlocking usar, las escrituras solo se bloquean para los usuarios que no tienen el bypassWriteBlockingMode tipo de acción. Los usuarios con este tipo de acción pueden realizar escrituras.

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 mongosync el estado de, llame al punto final de la API /progress. La /progress salida incluye un valor booleano,. canWrite

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

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

Puede escribir con seguridad en el clúster de origen mientras mongosync se sincroniza. No escriba en el clúster de destino a menos que canWrite sea true.

De forma predeterminada, mongosync establece el nivel de preocupación de lectura en "majority" para las lecturas en el clúster de origen. Para las escrituras en el clúster de destino, mongosync establece el nivel de preocupación de escritura en "majority" con j: true.

Para obtener más información sobre la configuración y el comportamiento de las inquietudes de lectura y escritura, consulte Inquietud de lectura y Inquietud de escritura.

mongosync Requiere la primary preferencia de lectura al conectarse a los clústeres de origen y destino. Para más información, consulte Opciones de preferencia de lectura.

mongosync reescribe valores de índice heredados, como 0 o una cadena vacía, a 1 en el destino. mongosync también elimina 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 conjunto de réplicas. mongosync combina y reordena las escrituras del clúster de origen al de destino durante la sincronización y también modifica temporalmente varias características de la recopilación.

Como resultado, no se garantiza que el destino coincida con el clúster de origen en ningún momento mientras la sincronización esté en ejecución, incluso cuando esté en pausa. Para garantizar que los clústeres de destino y de origen coincidan antes de la transferencia, llame al punto final de confirmación.

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

Los conjuntos de sincronización expireAfterSeconds tienen 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 habilita el bloqueo de escritura dual, mongosync bloquea las escrituras:

  • 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 de manera predeterminada.

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

Colecciones con tamaño fijo

Los conjuntos de sincronización limitan las colecciones al tamaño máximo permitido.

Índices ficticios

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

mongosync No se admiten compilaciones de índices continuas durante la migración. Para evitar la compilación continua de índices durante la migración, utilice uno de los siguientes métodos para garantizar que los índices de destino coincidan con los de origen:

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

  • Construya el índice en la fuente durante la migración con una compilación de índice predeterminada.

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

mongosync Almacena sus metadatos en una o varias bases de datos durante la migración. Las bases de datos de metadatos pueden tener cualquiera de los siguientes nombres:

  • mongosync_reserved_for_internal_use

  • Cualquier cosa que comience con mongosync_internal_

  • Cualquier cosa que comience con mongosync_reserved_for_verification_

Debe eliminar cualquier base de datos de metadatos después de una migración exitosa. Una vez eliminados los metadatos, no es posible revertir la migración.

mongosync Admite consistencia final en el clúster de destino. La consistencia de lectura no está garantizada en el clúster de destino hasta la confirmación. Antes de la confirmación, los clústeres de origen y destino pueden diferir en un momento dado. Para obtener más información, consulte Consideraciones durante la sincronización.

Mientras mongosync se sincroniza, mongosync puede reordenar o combinar escrituras al retransmitirlas del origen al destino. Para un documento determinado, el número total de escrituras puede variar entre el origen y el destino.

Es posible que las transacciones no aparezcan de forma automática en el clúster de destino. Es posible que las escrituras reintentables no se puedan reintentar en el clúster de destino.

Si la generación de perfiles está habilitada en una base de datos de origen, MongoDB crea una colección especial llamada <db>.system.profile. Una vez completada la sincronización, Mongosync no eliminará la colección <db>.system.profile del destino, incluso si la base de datos de origen se elimina posteriormente. La colección <db>.system.profile no modificará 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 del sistema en el clúster de destino.

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

Por ejemplo, en el clúster de destino:

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

  • Si habilita 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 nuevas UUID en el clúster de destino. No existe relación entre los UUID del clúster de origen y el de destino. Si las aplicaciones contienen UUID codificados (algo que MongoDB no recomienda), es posible que deba actualizarlas para 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 del clúster de origen. Si las aplicaciones dependen del orden de los documentos, pero no tienen un método de ordenación definido, es posible que deba actualizarlas para especificar el orden de ordenación esperado para que funcionen correctamente con el clúster migrado.

Nuevo en la versión 1.19.

Si su clúster de origen ejecuta MongoDB 6.0 o posterior, o si configura buildIndexes en afterDataCopy o excludeHashedAfterCopy al start ejecutar, 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 llamar createIndexes a para crear índices en clústeres de destino alojados en MongoDB Atlas. Para clústeres que no son de Atlas, mongosync utiliza un tamaño 2 de lote predeterminado de, ya que no puede evaluar de forma fiable la memoria asignada para la creación de índices.

Puede encontrar el tamaño del lote calculado en los registros mongosync 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 mongosync paralelismo de compilación de índices de, ajuste la maxNumActiveUserIndexBuilds configuración en el clúster de destino. Aumentar este valor mejora la velocidad general de compilación de índices, pero incrementa la carga de CPU en el destino. Supervise de cerca el uso de la CPU para evitar la degradación del rendimiento y eventos de escalado automático no deseados, que pueden ocurrir cuando el uso de la CPU del clúster supera estos límites.

mongosync Es resiliente y capaz de 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 se produce un error de red, el registro mongosync puede contener la palabra "error", pero mongosync aún puede completar la sincronización. Si la sincronización no se completa, 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() db.dropDatabase()y) durante la sincronización aumenta el riesgo de fallos en la migración y puede afectar negativamente al mongosync rendimiento de. Para obtener el mejor rendimiento, evite realizar operaciones DDL en el clúster de origen mientras la sincronización esté en curso.

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

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

Latencia entre mongosync y los fragmentos de destino
Por 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 fragmentos de destino
mongosync Ejecuta operaciones y actualiza sus propios metadatos por lotes en una transacción en el clúster de destino. Esto puede generar transacciones entre fragmentos, lo que puede resultar más costoso si estos están muy separados.
Latencia entre los nodos de cualquier conjunto de réplicas en el clúster de origen o destino
mongosync Utiliza "majority" escrituras y lecturas, lo que requiere la confirmación de varios nodos de un conjunto de réplicas, incluyendo los conjuntos de réplicas con respaldo de fragmentos. Si la mayoría de estos nodos no se encuentran en la misma región, el rendimiento se verá "majority" afectado.

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 falla inesperadamente, puede reiniciar mongosync con seguridad desde donde lo dejó. Una vez que el clúster vuelva a estar disponible, reinicie mongosync y use los mismos parámetros que la sincronización interrumpida.

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

  • Actualización de 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