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.
Descargo de responsabilidad del verificador integrado
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.
Configuraciones
Independencia del clúster
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.
archivo de configuración
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.
Tipos de clústeres y colecciones
Clústeres fragmentados
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.
Desactivación automática del balanceador
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.
Deshabilitar Balancer para colecciones en sincronización filtrada
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.
Habilite el balanceador para el clúster de origen.
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.
Deshabilite el balanceador para cada colección.
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.
Trozos pre-divididos
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.
Distribución de 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.
Fragmentos primarios
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.
Configurar clúster de fragmentos
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.
Múltiples clústeres
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.
Colecciones con tamaño fijo
A partir 1.3.0 de, Mongosync admite colecciones limitadas con algunas limitaciones.
convertToCappedNo se admite. SiconvertToCappedejecuta,mongosyncsaldrá con un error.cloneCollectionAsCappedNo 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.
Lee y escribe
Bloqueo de escritura
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.
mongosyncdesbloquea las escrituras justo antes de establecercanWriteentrueEn 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.
Permisos de usuario
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.
Lecturas permitidas
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.
Escrituras permitidas
Para ver mongosync el estado de, llame al punto final de la API /progress. La /progress salida incluye un valor booleano,. canWrite
Cuando
canWriteestrue, es seguro escribir en el clúster de destino.Cuando
canWriteseafalse, 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.
Preocupación por leer y escribir
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.
preferencia de lectura
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.
Manejo de índices heredados
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.
Consideraciones a mitad de la sincronización
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.
Cambios temporales en las características de la colección
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 |
Hidden Indexes | La sincronización replica los índices ocultos como no ocultos. |
Bloqueo de escritura | Si habilita el bloqueo de escritura dual,
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. |
Creaciones de índices continuas
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 Metadata
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_useCualquier 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.
Clústeres de destino
Consistencia
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.
Creación de perfiles
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.
Vistas
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.
Colecciones del sistema
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.jsSi habilita la creación de perfiles, la colección
system.profilepermanece.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.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.
UUID
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.
Clasificación
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.
Rendimiento
Optimizaciones de creación de índices
Nuevo en la versión 1.19.
Tamaños de lotes de creación de índices
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.
Índice Construir Paralelismo
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.
Resiliencia
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.
Operaciones del lenguaje de definición de datos (DDL)
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.
Latencia de la red
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
mongosyncy los fragmentos de destino - Por cada operación en el clúster de origen,
mongosyncrealiza 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
mongosyncEjecuta 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
mongosyncUtiliza"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.
Interrupciones durante la sincronización
Las siguientes consideraciones se refieren a las interrupciones durante el proceso mongosync.
Errores y fallos
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.
Disponibilidad del clúster
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.
Sincronización en pausa
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.