Mongodump afecta el rendimiento de la aplicación realmente mal


8

Tenemos una instancia mongo bastante grande (150 GB) sin fragmentación, y nuestra copia de seguridad regular ( mongodump) tiene un efecto muy significativo en el rendimiento de la aplicación. Peor que eso, debido al uso intensivo de mongo por parte de la aplicación, la copia de seguridad dura más de 10 horas.

Sé que necesitamos fragmentación, y tenemos planes de pasar a ElasticSearch, así que estoy buscando una solución a corto plazo.

¿Hay algo que pueda hacer para mejorar esto, como limitar el número de consultas por segundo para mongodump o algo así?

Tenemos un mongo independiente en un servidor RAM de 190 GB y 32 núcleos que lo comparte con nginx, rabbitmq y algunas cosas pequeñas. No es la configuración más limpia jamás, lo sé :)

Respuestas:


16

Todos los datos descargados a través de mongodumpdeben ser leídos en la memoria por el servidor MongoDB. También vale la pena señalar que mongodumprespalda las definiciones de datos e índices; el tiempo de restauración también puede ser significativamente más largo en comparación con otros enfoques, ya que mongorestoreserá necesario volver a crear los índices secundarios después de cargar los datos.

Como se señala en la documentación de MongoDB , mongodumpes útil para realizar copias de seguridad y restaurar implementaciones pequeñas, pero no es ideal para capturar copias de seguridad completas de sistemas más grandes:

Cuando se conecta a una instancia de MongoDB, mongodump puede afectar negativamente el rendimiento de mongod. Si sus datos son más grandes que la memoria del sistema, las consultas empujarán el conjunto de trabajo fuera de la memoria, causando fallas en la página.

Un servidor independiente limita sus opciones de copia de seguridad si también desea mantener su implementación disponible mientras realiza una copia de seguridad.

Aquí hay algunos enfoques sugeridos en orden de mayor a menor recomendado:

Enfoque n. ° 1: utilizar un servicio de respaldo en la nube

Para la solución a corto plazo más fácil, consideraría usar un servicio de copia de seguridad en la nube comercial como MongoDB Cloud Manager . MongoDB Cloud Manager proporciona respaldo continuo con instantáneas programadas y una política de retención (consulte Preparativos de respaldo para obtener más información). Un servicio en la nube también evita que tenga que desplegar infraestructura / servidores adicionales, por lo que incluso si planea hacerlo en el futuro, esta es una solución útil a corto plazo.

El enfoque general sería:

Como beneficio adicional, Cloud Manager también incluye un agente de monitoreo que puede capturar el historial de métricas de su implementación y le permite configurar alertas.

Enfoque n. ° 2: Convierta su implementación en un conjunto de réplicas y respaldo desde un secundario oculto

Este enfoque requiere el aprovisionamiento de una infraestructura adicional, pero descarga el impacto de la copia de seguridad de su servidor primario. Normalmente, los conjuntos de réplicas se aprovisionan con al menos tres miembros para una alta disponibilidad y conmutación por error automática, pero si su único objetivo es la copia de seguridad, puede usar una configuración de dos servidores menos ideal.

El enfoque general sería:

  • Provisión de un segundo servidor que se utilizará para la copia de seguridad
  • Convierta su servidor independiente en un conjunto de réplicas .
  • Agregue su servidor de respaldo como un secundario oculto con una prioridad de 0 (nunca será primaria) y 0 votos.
  • Use uno de los métodos de respaldo admitidos para realizar respaldos en su secundaria oculta. Los métodos de copia de seguridad se enumeran en el orden general de recomendación: las instantáneas del sistema de archivos (si es compatible con su configuración) o la copia de archivos (suponiendo que se detenga mongod) son preferibles mongodump.
  • (idealmente) agregue otro secundario que contenga datos si desea los beneficios de alta disponibilidad y conmutación por error de una configuración de conjunto de réplica.

Enfoque n. ° 3: use instantáneas del sistema de archivos (si está disponible y es apropiado)

Una estrategia de copia de seguridad menos impactante que su actual mongodumpsería usar instantáneas del sistema de archivos , suponiendo que tenga un sistema de archivos que admita instantáneas (y todos sus datos y archivos de diario están en un solo volumen para que pueda obtener una instantánea consistente de una ejecución mongod). La ventaja de las instantáneas del sistema de archivos es que no es necesario leer todos los datos en la memoria mongod, sin embargo, las instantáneas aún pueden tener un impacto (particularmente cuando se crea la instantánea inicial en un sistema ocupado). Las instantáneas sucesivas son más eficientes y menos impactantes, pero aún no son una solución de respaldo completa ya que las instantáneas son locales para su servidor (y solo tiene una independiente en este momento).

Advertencias

  • Los enfoques n. ° 1 y n. ° 2 implican habilitar la replicación para facilitar las copias de seguridad. La replicación agregará algunas E / S locales adicionales en su servidor primario ya que todas las operaciones de escritura se anotan en una colección especial con tapa llamada oplog (registro de operaciones) .

  • Ha mencionado una probable necesidad de fragmentación en el futuro, pero antes de hacerlo, aislaría su carga de trabajo MongoDB de los otros procesos que comparten el mismo servidor. Si puede cambiar su estrategia de respaldo a algo más eficiente que mongodump, eliminar la contención de recursos y capturar un historial de métricas de referencia para su revisión ... es posible que todavía no se requiera fragmentación.


3

Llegué tarde a la fiesta, pero recientemente encontré el mismo problema en máquinas virtuales con una cantidad relativamente pequeña de RAM (4 GB de RAM, 50 GB de HD, 5 GB de datos). Nuestra solución alternativa es usar la opción mongodump --forceTableScany, si se deben usar secundarios, agregar también --readPreference secondary. Eso aceleró nuestro volcado por factor 10 a 30.

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.