Advertencia
mongosync no verifica el cumplimiento de las limitaciones documentadas. Es importante asegurarse de que la aplicación no se vea afectada por las limitaciones.Ejecutar mongosync en presencia de una de estas limitaciones podría provocar un comportamiento indefinido en el clúster de destino.
Debe respetar estas limitaciones durante toda la migración, incluso cuando la migración esté pausada o detenida si se reanudará.
Limitaciones generales
Nota
Para información sobre la compatibilidad del servidor de MongoDB, consulta Compatibilidad de versiones de MongoDB Server.
mongosyncno admite actualizaciones o degradaciones de la versión del servidor in situ que cambien la versión principal o secundaria durante una migración.mongosyncpermite actualizaciones de versiones de parches. Para obtener más información, consulte las instrucciones de actualización del servidor.mongosyncno valida que los clústeres o el entorno estén configurados correctamente.Otros clientes no deben escribir en el clúster de destino mientras
mongosyncesté en ejecución.colecciones system.* no se replican.
No se admiten documentos que tengan nombres de campos que comiencen con el símbolo dólar (
$). Consulte Nombres de campos con puntos y signos de dólar.Los clústeres sin servidor no son compatibles.
Un MongoDB Shared nivel no es compatible.
Atlas Infinite clúster no se admiten.
No se admite Queryable Encryption.
Cifrado a nivel de campo en el lado del cliente no es compatible.
No se puede sincronizar una colección que tenga un índice único y un índice no único definidos en el mismo campo o campos.
Antes de intentar ejecutar
mongosynccon un clúster de AtlasM10+, desactive la opción Require Indexes for All Queries para establecernotablescanenfalseen los clúster de origen y de destino.mongosyncno sincroniza usuarios ni roles.mongosyncno replicaapplyOpsoperaciones realizadas en el clúster de origen durante sincronizar en el clúster de destino.mongosyncdebe leer del clúster de origen utilizando laprimarypreferencia de lectura.mongosyncno admite clústeres de origen o destino que estén actualizando o degradando actualmente las versiones de MongoDB.mongosyncno admite la sincronización de Índices de búsqueda Atlas.mongosyncsolo admite clústeres que utilizan el motor de almacenamiento WiredTiger.No puedes sincronizar una colección con ningún documento que tenga una marca de tiempo vacía, como
Timestamp(0,0)en versiones anteriores a6.0 clúster de origen.mongosyncno admite documentos con nombres de campo duplicados. Para más detalles, consulta MongoDB no admite nombres de campos duplicados.mongosyncno admite la migración de un namespace a un clúster de destino que ya contiene un namespace en conflicto.mongosyncno admite clústeres de destino sin ningún usuario aprovisionado.En todas las versiones de MongoDB anteriores a 8.0.20, si una operación
replaceañade un campo llamado$va un documento,mongosyncse cierra con un error fatal irrecuperable durante la aplicación del evento de cambio. Reanudar la sincronización siempre falla con el mismo error.Para resolver este problema, reinicia la sincronización desde cero, borrando la base de datos de metadatos de
mongosyncen el destino, o actualiza el clúster de origen a 8.0.20+.
MongoDB Community Edition
MongoDB no prueba Mongosync con Community builds y en la mayoría de los casos, MongoDB no ofrece asistencia para Mongosync con implementaciones de Community. Si deseas usar Mongosync con MongoDB Community Edition, contacta a un representante de ventas de MongoDB para hablar sobre requisitos y opciones individuales.
Tipos de colecciones no permitidos
No se admiten colección de series de tiempo.
Las colecciones con índice clusterizado con expireAfterSeconds establecido no son compatibles.
Espacio en disco de destino
Nuevo en la versión 1.22.
Antes de que mongosync inicie una migración, comprueba el espacio en disco disponible en el clúster de destino. mongosync calcula el tamaño en disco de las colecciones e índices de origen que seleccionó para la migración y, a continuación, compara esa estimación con el espacio disponible en el sistema de archivos de destino. mongosync aplica un factor de seguridad de 1.25x a la estimación para tener en cuenta las diferencias de compresión del motor de almacenamiento, el espacio temporal que utiliza la creación de índices y el crecimiento del oplog durante la migración.
Si el espacio estimado necesario supera el espacio disponible, /start devuelve un error InsufficientDestinationDiskSpace y mongosync no inicia la migración. Para resolver el error, libere espacio en disco en el clúster de destino y vuelva a llamar a /start.
mongosync omite la comprobación de los destinos donde no puede recuperar las estadísticas del sistema de archivos.
Importante
Esta comprobación es una barrera de seguridad de mejor esfuerzo. No garantiza que la migración quepa en el clúster de destino. Los cambios que se producen durante la migración y las diferencias en la forma en que mongosync distribuye el espacio en disco entre las particiones de destino afectan a la estimación.
Para deshabilitar la comprobación, establezca skipDiskSpaceCheck en true en la solicitud /start. Utilice esta opción cuando las estadísticas del sistema de archivos de destino no representen con precisión el almacenamiento disponible para la migración. Para aprender más información, consulte Parámetros del cuerpo de la solicitud.
Clústeres fragmentados
mongosyncno admite sincronizar desde un clúster a un set de réplicas.mongosyncno admite la sincronización con una topología de clúster fragmentado con uno o más árbitros.mongosyncno soporta la sincronización hacia o desde clústeres globales.La sincronización de un set de réplicas a un clúster tiene las siguientes limitaciones:
mongosyncpermite a los usuarios cambiar el nombre de las colecciones que la opciónsharding.shardingEntriesincluye durante la sincronización con algunas limitaciones. Para más detalles, consulta Renombrar durante la sincronización.Si utilizas la opción
sharding.createSupportingIndexes, los índices se crean automáticamente en el clúster de destino durante la sincronización. No se pueden crear estos índices posteriormente en el clúster de origen.Si quieres crear un índice para admitir las claves de partición manualmente, debes crear el índice antes de que
mongosynccomience o después de que se complete la migración ymongosyncse detenga.
Dentro de una colección, el campo
_iddebe ser único en todas las particiones del clúster. Consulta Clústeres particionados e índices únicos para obtener más detalles.El comando
movePrimaryno se puede usar para reasignar la partición primaria mientras se sincroniza.No hay replicación para la configuración de zonas.
mongosyncreplica datos, no hereda zonas.No se pueden agregar ni eliminar particiones mientras se está sincronizando.
mongosyncsolo sincroniza los índices que existen en todas las particiones.Si
mongosyncdetecta especificaciones de índices inconsistentes entre particiones, termina con un error fatal. Al buscar inconsistencias,mongosyncignora los campos de índicensybackground.Nota
Para comprobar la existencia de incoherencias de índice, consulte Buscar Índices Inconsistentes en Particiones. Este método muestra las diferencias de campo
nsybackground, quemongosyncignora al comprobar si hay inconsistencias.Si el clúster de origen o destino es un clúster particionado y no está ejecutando
mongosynccon filtro de namespace, debe deshabilitar el balanceador del clúster de origen ejecutando elbalancerStopcomando y esperando 15 minutos para que el comando se complete.Si el clúster de origen o destino es un clúster fragmentado y está ejecutando
mongosynccon filtrado de espacios de nombres, puede habilitar globalmente el equilibrador del clúster de origen, pero debe desactivarlo para todas las colecciones dentro del filtro de espacios de nombres. Consulta Cómo desactivar el balanceador para colecciones en sincronización filtrada. También se puede deshabilitar completamente el balanceador del clúster de origen.Siempre debe deshabilitar el balanceador en un clúster de destino particionado mediante
balancerStop.Si ha habilitado el balanceador del clúster de origen, pero lo ha deshabilitado para las colecciones dentro del filtro de namespace, no ejecute
shardCollectionen las colecciones dentro del filtro de namespace. Si ejecutashardCollectionen colecciones dentro del filtro de namespace durante la migración,mongosyncdevuelve un error y se detiene, lo que le obliga a iniciar la migración desde cero.mongosyncno admite la ejecución del comandotransitionFromDedicatedConfigServerdurante la ejecución.La clave de partición no puede ser refinada mientras se está sincronizando.
Las operaciones
reshardCollectiondel clúster de origen no se admiten durante la sincronización.El número máximo de índices por colección particionada es 63, que es uno menos que el límite por defecto de 64.
mongosyncno admite colecciones con una intercalación no por defecto en clústeres sharded. Esto aplica tanto a colecciones particionadas como unsharded.mongosyncerrores en los índices que son inconsistentes o faltan en algunas particiones que contienen datos.mongosyncfalla si hay una ventana de balanceo configurada en el clúster de origen o destino.mongosyncno admite la migración a los espacios de nombres de destino con etiquetas de zona de partición preconfiguradas. Antes de empezar una migración, remueva todos los rangos de etiquetas de partición, o zonas, de cualquier namespace en los quemongosyncse migrará en el destino. Puedes volver a agregar los rangos de zonas deseados después de que la migración llegue al estadoCOMMITTED.
Reversión
Si no llama al extremo /commit para finalizar la sincronizar inversa, el clúster de origen original permanece en un estado intermedio e inutilizable.
Si la fuente anterior tiene índices únicos que están parcialmente distribuidos a través de particiones, revertirlo puede causar fallos. Asegúrese de que existan índices únicos en todas las particiones antes de revertir.
Los clústeres de origen y destino deben tener el mismo número de particiones. No se puede sincronizar de forma inversa cuando los clústeres tienen diferentes topologías.
Los clústeres de origen y destino deben ejecutar la misma versión principal de MongoDB.
- Para invertir la dirección,
mongosyncrequiere que todos los índice único índices en el clúster de origen (excepto para_id) no tengan claves de índice único heredadas.
Múltiples clústeres
mongosyncno admite la sincronización de varios clústeres de origen a un clúster de destino.Un clúster no puede ser simultáneamente un clúster de origen en una instancia de
mongosyncy un clúster de destino en otra instancia demongosync.
Sincronización filtrada
El filtrado no es compatible con la sincronización reversible.
El clúster de destino no debe contener datos de usuario antes de comenzar a menos que establezca el parámetro preExistingDestinationData en
trueal llamar a/start.El clúster de destino no debe contener la base de datos del sistema
__mdb_internal_mongosyncantes de comenzar.No puede modificar un filtro que esté en uso. Para crear un nuevo filtro, consulta: Reemplazar un filtro existente.
Solo puedes renombrar las colecciones en ciertas situaciones. Para más detalles, consulta: Añadir y renombrar colecciones.
Si un filtro incluye una vista pero no la colección base, sólo los metadatos de la vista se sincronizan con el clúster de destino. Para incluir los documentos de vista, también debe sincronizar la colección base.
No puedes especificar colección del sistema ni base de datos del sistema en un filtro.
Para usar la etapa de agregación
$outo el comandomapReduce(cuando se configura para crear o reemplazar una colección) con filtro, debe configurar el filtro para usar toda la base de datos. No se puede limitar el filtro a las colecciones dentro de la base de datos.Para obtener más información, consulte Filtrado con mapReduce y $out.
Colecciones con tamaño fijo
A partir de 1.3.0, Mongosync admite colecciones con tamaño fijo con algunas limitaciones.
A partir de 1.20.0, debe pasar el indicador --enableCappedCollectionHandling al iniciar mongosync para permitir la creación de nuevas colecciones limitadas durante una migración.
convertToCappedno es compatible. Si ejecutaconvertToCapped,mongosyncdevuelve un error.cloneCollectionAsCappedno está soportado.
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 el número máximo de documentos y el tamaño máximo de documento durante el commit.
Colecciones del sistema
Mongosync no replica las colecciones de sistema en el clúster de destino.
Si emite un dropDatabase comando 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 de usuario y las vistas en la base de datos del 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 descartar no afecta a una colección creada por el usuario
system.js.Si habilita la creación de perfiles, la colección
system.profilepermanece.Si crea vistas en el clúster de origen y luego descarta la base de datos, la replicación del descarte remueve las vistas, pero deja una colección
system.viewsvací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.
Creación de índices
Cuando buildIndexes se establece en "afterDataCopy", mongosync podría no aplicar Rename eventos DDL. Si esto ocurre, reinicie la migración desde cero con buildIndexes establecido en "beforeDataCopy" o "never". Establecer buildIndexes en beforeDataCopy puede aumentar el tiempo de migración, y establecer buildIndexes en never requiere que cree índices manualmente una vez finalizada la migración.
Creaciones de índices continuas
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 predeterminada.
Construye el índice en el destino después de la migración.
Verificador Integrado
A partir de 1.9, mongosync puede utilizar un verificador incrustado para confirmar la sincronización exitosa de las colecciones desde el clúster de origen hasta el clúster de destino.
Compatibilidad
El verificador integrado no está disponible en mongosync 1.8 y anteriores.
Para métodos de verificación alternativos, ve Verificar transferencia de datos.
Limitaciones
El verificador integrado tiene las siguientes limitaciones:
mongosyncalmacena el estado del verificador en la memoria, lo que puede causar una sobrecarga significativa de memoria. Para ejecutar el verificador,mongosyncrequiere aproximadamente 10 GB de memoria, además de 500 MB adicionales por cada 1 millones de documentos.No se puede reanudar el verificador. Si un usuario detiene o pausa la sincroniza y luego inicia
mongosyncnuevamente por cualquier motivo, el proceso de verificación se reinicia desde el principio. Esto puede hacer que la verificación quede sustancialmente por detrás de la migración.Al migrar de un set de réplicas a un clúster, no puedes renombrar las colecciones de origen que especificas en las opciones de particionado. Si renombras una colección incluida en las opciones de particionado durante la fase de CEA, el verificador informa un desajuste de particionado.
Si inicias la sincronización con la verificación habilitada y
buildIndexesconfigurado ennever, la migración fallará simongosyncencuentra una colección TTL en el clúster de origen. Esto puede suceder después de que llames al endpoint/starto mucho más tarde, como cuando un usuario crea un índice TTL en el clúster de origen mientras una migración está en curso.Para sincronizar colecciones TTL sin crear índices en el clúster de destino, debes iniciar la sincronización con el verificador deshabilitado.
Verificaciones no compatibles
El verificador no comprueba los siguientes espacios de nombres:
Colecciones con tamaño fijo
Colecciones con índices TTL, incluidos los índices TTL que se agregan o descartan durante la migración
Colecciones que no usan la intercalación por defecto
Para verificar colecciones no admitidas, añada código de script adicional para examinar las colecciones. Para obtener más información, consulta Verificar transferencia de datos.
Nota
A partir de la versión 1.10, el verificador comprueba si hay inconsistencias de datos de un evento DDL que se produjo en la pre-6.0 clúster de origen durante la migración. Esto se debe a que pre-6.0 Las migraciones no admiten eventos DDL.
Para aprender más, consulta Limitaciones de migración anteriores a6.0.
Configuración de consulta persistente
mongosync no migra la Configuración de query Persistente (PQS), que se introdujo en MongoDB 8.0. Si tu clúster de origen utiliza PQS, debes migrarlos manualmente.
Migraciones pre-6.0
A partir de 1.10, mongosync admite migraciones desde clústeres de origen que ejecutan versiones del servidor de MongoDB anteriores a 6.0. Para obtener información sobre las rutas de migración compatibles, consulte Compatibilidad de versiones de MongoDB Server.
Se aplican las siguientes limitaciones al pre-6.0 migración:
El clúster de origen no puede tener documento huérfano. Para limpiar cualquier documento huérfano, ejecute el comando
cleanupOrphaneden las instanciasmongoden el nodo primario de cada partición en su clúster de origen. Espere a que este comando se complete con un estado{ok:1}antes de iniciar la migración.Las escrituras que producen DDL eventos no pueden ocurrir en el clúster de origen durante la migración. Los siguientes eventos no pueden ocurrir:
collModcreatecreateIndexesdropdropDatabasedropIndexesrefineCollectionShardKeyrenamereshardCollectionshardCollection
Esto incluye operaciones que pueden crear nuevas colecciones como
mapReduce,$outy$merge. Esto también incluye colecciones creadas implícitamente a partir de inserciones. Solo los guardar que producen eventos CRUD pueden ocurrir durante la migración.Nota
Se permiten escrituras que produzcan eventos DDL en colecciones fuente fuera del filtro de espacio de nombres.
geoHaystacklos índices no son compatibles.Asegúrate de que no se realicen operaciones de guardado en el clúster de origen después de que llames al punto final
/commit.No puedes habilitar el parámetro de particionado
createSupportingIndexes. En su lugar, crea un índice para admitir tu clave de partición en el clúster de origen.Si hay algún índice con especificaciones inconsistentes o que falte en una o más particiones,
mongosyncdevuelve un error. Para comprobar inconsistencias de índices, consulta Buscar índices inconsistentes en las particiones.