Home Arrow Icon Knowledge base Arrow Icon Global Arrow Icon ¿Cómo maneja MongoDB la migración de datos entre fragmentos?


¿Cómo maneja MongoDB la migración de datos entre fragmentos?


MongoDB maneja la migración de datos entre fragmentos principalmente a través de un proceso llamado migración de fragmentos, que es una parte integral de la arquitectura de fragmentación diseñada para distribuir datos de manera uniforme en múltiples fragmentos en un clúster. El fragmento en MongoDB es el método utilizado para escalar horizontalmente la base de datos mediante la división de datos en múltiples servidores o fragmentos. Este sistema aprovecha una clave de fragmentos, que es un campo o conjunto de campos en un documento que determina la distribución de datos. Para administrar la migración de datos entre fragmentos, MongoDB utiliza un proceso de fondo llamado Balancer, que optimiza la distribución de datos mediante la migración de rangos de datos (o fragmentos) según sea necesario.

Descripción general de la migración de clúster y fragmento

MongoDB divide las colecciones fragmentadas en trozos, que son rangos contiguos de valores clave de fragmentos. Cada fragmento pertenece a un fragmento específico, y estos fragmentos colectivamente contienen todo el conjunto de datos. El equilibrador monitorea la distribución de fragmentos en fragmentos y migra fragmentos entre fragmentos para mantener el equilibrio. Este mecanismo de migración ayuda a evitar puntos de acceso, mejorar el rendimiento de la consulta y optimizar la utilización de recursos.

La migración del fragmento es beneficiosa en escenarios como cuando se agregan nuevos fragmentos a un clúster, cuando los datos crecen de manera desigual causando desequilibrio, o cuando las zonas deben redefinirse para la localidad de datos o los requisitos regulatorios. La migración funciona a nivel de fragmento, moviendo una gama completa de valores de clave de fragmentos de un fragmento a otro.

Detalles del proceso de migración

La migración del fragmento de MongoDB funciona en varias fases:

1. Selección de fragmento para moverse: el equilibrador o un administrador selecciona una fragmentación que necesita reasignación a otro fragmento para equilibrar el clúster.

2. Fase clon: el fragmento del donante (el que actualmente sostiene el fragmento) copia todos los documentos en el fragmento al fragmento del destinatario. Durante este tiempo, también se rastrean las nuevas escrituras en el fragmento del donante.

3.

4. Sección crítica y confirmación: el fragmento de donantes ingresa a una sección crítica donde las operaciones de escritura en la fragmentación se bloquean brevemente, y la propiedad del fragmento se cambia atómicamente al fragmento del destinatario.

5. Eliminar fase: el fragmento del donante elimina asincrónicamente documentos pertenecientes a la fragmentación migrada una vez que confirma que el destinatario ha cometido con éxito el fragmento.

El equilibrador asegura que solo una migración por fragmento ocurra a la vez para minimizar el impacto en el rendimiento del fragmento. Puede realizar múltiples migraciones en paralelo en diferentes pares de fragmentos si son independientes.

Balancer automático

El equilibrador se ejecuta como un hilo de fondo en el nodo primario del servidor config y monitorea constantemente el saldo de datos de fragmentos. Hace rastrear el tamaño de los datos por fragmento para determinar si se necesitan migraciones de acuerdo con un umbral de equilibrio configurable. Cuando las diferencias en el tamaño de los datos entre fragmentos exceden este umbral, el equilibrador inicia las migraciones.

El equilibrador opera de manera principalmente transparente a las aplicaciones, pero puede deshabilitarse temporalmente para fines de mantenimiento o ajuste. También respeta las zonas configuradas dentro del clúster, asegurando que los fragmentos se migren dentro de los límites de zona apropiados.

Comandos de migración manual

Mientras que el Balancer automatiza la migración del fragmento, MongoDB también permite el control manual utilizando comandos como 'Movechunk` y' Moverange`. Estos comandos forzan la migración de trozos o fragmentos específicos varían de un fragmento a otro.

- `Movechunk` se usa para migrar un fragmento que contiene un valor de clave de fragmento específico a un fragmento especificado. Esto es útil para migraciones específicas para el equilibrio de carga o la localidad de datos.

- `Moverange` permite migrar una gama contigua de claves de fragmentos, útil para estrategias de reequilibrio de datos más complejas.

Los administradores pueden usar estos comandos para los fragmentos previos a la división para distribuir datos de manera uniforme antes de la ingestión masiva o para resolver las fallas de migración causadas por el equilibrio de las restricciones de las ventanas.

Manejo de documentos huérfanos y consistencia

Durante y después de la migración del fragmento, los documentos huérfanos (documentos que ya no pertenecen a los rangos de fragmentos asignados del fragmento del donante) pueden existir temporalmente en el fragmento del donante hasta que se limpien.

MongoDB garantiza la consistencia durante la migración mediante la aplicación de operaciones en secuencia y utilizando un mecanismo de coordinación que bloquea las escrituras durante la sección crítica. Después de la migración, la limpieza huérfana se ejecuta asincrónicamente mientras evita la interferencia con consultas continuas.

Comenzando MongoDB 5.3, las transmisiones de cambio no generan eventos para actualizaciones a documentos huérfanos durante la migración, para mantener la precisión del flujo de eventos.

Impacto en el rendimiento y las operaciones

Las migraciones de fragmentos se llevan por encima, incluido el consumo de ancho de banda de la red, la CPU y la E/S de disco que pueden afectar el rendimiento del clúster. MongoDB minimiza este impacto por:

- Restringir la participación de un fragmento a una migración a la vez.

- Hacer cola las migraciones y permitir que las fases Eliminar se ejecuten de forma posterior para una descarga más rápida.

- Uso de opciones de estrangulamiento para ajustar la concurrencia de migración y escribir preocupación durante la migración.

La migración de datos también afecta temporalmente las lecturas secundarias que pueden perder documentos durante la fase de limpieza huérfana, por lo que las aplicaciones deben considerar esto al diseñar sus consultas.

Migración en escenarios específicos

En casos como migrar datos entre zonas con rangos de etiquetas, o desde configuraciones sin problemas hasta configuraciones fragmentadas, MongoDB migra datos gradualmente en función de rangos o zonas de llave de fragmentos actualizadas después de la reconfiguración. Por ejemplo, eliminar rangos de etiquetas antiguos y crear nuevos desencadena la migración del equilibrador para mover datos en consecuencia.

Al migrar los grupos de MongoDB a soluciones administradas por la nube o entre grupos de fragmentos, las herramientas de migración a menudo realizan una migración de fragmentos, copiando datos de fragmentos individualmente mientras mantienen distribuciones de clave de fragmentos.

Herramientas y utilidades para la migración

Los servicios de transmisión de datos (DTS) y otras herramientas de terceros ayudan a migrar datos entre instancias o clústeres de MongoDB, manejo de mapeo de fragmentos, consistencia de datos y actualizaciones incrementales. Estas herramientas a menudo admiten la migración de grupos no cagados a fragmentos al asignar valores de teclas de fragmento predeterminados a datos de origen que carecen de claves de fragmentos.

Resumen de puntos clave

- MongoDB divide los datos en fragmentos distribuidos a través de fragmentos utilizando claves de fragmentos.

- El equilibrador migra automáticamente fragmentos para mantener la distribución de datos equilibrada.

- La migración implica la clonación de datos, escrituras de recuperación, entrega atómica y limpieza asincrónica.

- Las migraciones están restringidas a uno por fragmento para reducir el impacto del sistema.

- Los comandos de migración manual proporcionan control administrativo para la distribución de fragmentos.

- Los documentos huérfanos se limpian asincrónicamente después de la migración.

- La migración afecta temporalmente el rendimiento y la consistencia de lectura secundaria.

- La migración entre zonas o cambios en los rangos clave de fragmentos se maneja mediante la reconfiguración que desencadena las migraciones.

- Las herramientas de migración ayudan con el movimiento de datos entre grupos o arquitecturas.

Este mecanismo de migración garantiza que los grupos de MongoDB permanezcan equilibrados, escalables y desempeñados a medida que crecen los datos y evolucionan las configuraciones de clúster, proporcionando una disponibilidad continua con una interrupción mínima a las aplicaciones.