Docs Menu
Docs Home
/

Notas de producción para implementaciones autogestionadas

Esta página detalla las configuraciones del sistema que afectan a MongoDB, especialmente cuando se ejecuta en producción.

Nota

MongoDB Atlas es una base de datos como servicio en la nube. Si puedes aprovechar las nubes públicas, Atlas aborda automáticamente muchas de las consideraciones presentes en estas notas de producción, además de ofrecer los siguientes beneficios:

  • Seguridad: Atlas reduce la configuración necesaria para las características de seguridad como el cifrado, la auditoría y el control de acceso basado en roles.

  • Escalabilidad: se puede escalar automáticamente el clúster de Atlas en función del uso. También se puede configurar el escalado granular para cómputo, IOPS y almacenamiento.

  • Disponibilidad: Atlas tiene un SLA de tiempo de actividad del 99,995 %. También puedes configurar implementaciones multiregión y multi-nube con conmutación por error automática y copias de seguridad continuas.

  • Rendimiento: puedes utilizar herramientas integradas como Query Insights y Performance Advisor para optimizar el rendimiento, mejorar las operaciones de la base de datos y gestionar los costos.

  • Full Text Search: se puede compilar una funcionalidad de búsqueda basada en relevancia de alto rendimiento en la aplicación Atlas.

Para obtener más información, consulta la documentación de Atlas y las notas de producción de Atlas.

Para ejecutar en producción, consultar las Plataformas recomendadas para obtener recomendaciones de sistemas operativos.

MongoDB requiere lo siguiente mínimo x86_64 microarquitecturas:

  • Para Intel x86_64, MongoDB requiere uno de:

    • un procesador Haswell o posterior Core, o

    • un procesador Tiger Lake o Celeron o Pentium posterior.

  • Para AMD x86_64, MongoDB requiere:

    • un Bulldozer o un procesador posterior.

A partir de MongoDB 5.0, mongodmongos, y el shell heredado ya no mongo admiten x86_64 plataformas que no cumplen con este requisito mínimo de microarquitectura.

  • MongoDB solo es compatible con Oracle Linux que ejecuta Red Hat Compatible Kernel (RHCK). MongoDB no brinda soporte para el Unbreakable Enterprise Kernel (UEK).

  • MongoDB 5.0 requiere el uso del conjunto de instrucciones AVX, disponible en procesadores Intel y AMD seleccionados.

MongoDB en arm64 requiere el ARMv8.2-A o una microarquitectura posterior.

A partir de MongoDB 5.0, mongod, mongos y la shell heredada mongo ya no soportan plataformas arm64 que no cumplen con este requisito mínimo de microarquitectura.

Para utilizar la microarquitectura ARM v8.4-A o posterior, utiliza la versión 7.0 de MongoDB o posterior.

Nota

MongoDB ya no ofrece soporte para hardware de placa única que no tenga la arquitectura de CPU adecuada (Raspberry Pi 4). Consulte Cambios de compatibilidad en MongoDB 5.0 para obtener más información.

A partir de MongoDB 8.0, las nuevas versiones de MongoDB Server (mayor y menor) son compatibles con la versión menor mínima del sistema operativo (SO) definida por el proveedor del sistema operativo. Una vez que el proveedor del sistema operativo deja de admitir una versión menor del sistema operativo, MongoDB actualiza el MongoDB Server para admitir la siguiente versión menor del sistema operativo. Para obtener más detalles, consulta Mejoras en el soporte de la plataforma MongoDB.

MongoDB 8.0 es compatible con las siguientes versiones mínimas menores del sistema operativo:

  • Red Hat Enterprise Linux 8.8

  • Red Hat Enterprise Linux 9.3

  • SUSE Linux Enterprise Servidor 15 SP5

  • Amazon Linux 2023 versión 2023.3

Importante

v6.0 Fin de vida útil

v6.0 llegó al final de su vida útil el 31 de julio de 2025 y ya no es compatible con MongoDB.

Plataforma
Arquitectura
Edición
8.0
7.0

Amazon Linux 2023

x86_64

Enterprise

Amazon Linux 2023

x86_64

Community

Amazon Linux V2

x86_64

Enterprise

Amazon Linux V2

x86_64

Community

Debian 12

x86_64

Enterprise

Debian 12

x86_64

Community

Debian 11

x86_64

Enterprise

Debian 11

x86_64

Community

RHEL/Rocky/Alma/Oracle Linux 9.0+ [1]

x86_64

Enterprise

RHEL/Rocky/Alma/Oracle Linux 9.0+ [1]

x86_64

Community

RHEL/Rocky/Alma/Oracle Linux 8.0+ [1]

x86_64

Enterprise

RHEL/Rocky/Alma/Oracle Linux 8.0+ [1]

x86_64

Community

RHEL/Oracle Linux 7.0+ [1]

x86_64

Enterprise

RHEL/Oracle Linux 7.0+ [1]

x86_64

Community

SLES 15

x86_64

Enterprise

SLES 15

x86_64

Community

SLES 12

x86_64

Enterprise

SLES 12

x86_64

Community

Ubuntu 24.04

x86_64

Enterprise

Ubuntu 24.04

x86_64

Community

Ubuntu 22.04

x86_64

Enterprise

Ubuntu 22.04

x86_64

Community

Ubuntu 20.04

x86_64

Enterprise

Ubuntu 20.04

x86_64

Community

Windows 11

x86_64

Enterprise

Windows 11

x86_64

Community

Windows Server 2022

x86_64

Enterprise

Windows Server 2022

x86_64

Community

Windows Server 2019

x86_64

Enterprise

Windows Server 2019

x86_64

Community

macOS 14

x86_64

Enterprise

macOS 14

x86_64

Community

macOS 13

x86_64

Enterprise

macOS 13

x86_64

Community

macOS 12

x86_64

Enterprise

macOS 12

x86_64

Community

macOS 11

x86_64

Enterprise

macOS 11

x86_64

Community

macOS 14

brazo64

Enterprise

macOS 14

brazo64

Community

macOS 13

brazo64

Enterprise

macOS 13

brazo64

Community

macOS 12

brazo64

Enterprise

macOS 12

brazo64

Community

macOS 11

brazo64

Enterprise

macOS 11

brazo64

Community

Amazon Linux 2023

brazo64

Enterprise

Amazon Linux 2023

brazo64

Community

Amazon Linux 2

brazo64

Enterprise

Amazon Linux 2

brazo64

Community

RHEL/Rocky/Alma 9

brazo64

Enterprise

RHEL/Rocky/Alma 9

brazo64

Community

RHEL/Rocky/Alma 8

brazo64

Enterprise

RHEL/Rocky/Alma 8

brazo64

Community

Ubuntu 24.04

brazo64

Enterprise

Ubuntu 24.04

brazo64

Community

Ubuntu 22.04

brazo64

Enterprise

Ubuntu 22.04

brazo64

Community

Ubuntu 20.04

brazo64

Enterprise

Ubuntu 20.04

brazo64

Community

RHEL/Rocky/Alma 9 [6]

ppc64le

Enterprise

8.0.7+

RHEL/Rocky/Alma 8 [5]

ppc64le

Enterprise

RHEL/Rocky/Alma 9

s390x

Enterprise

8.0.7+

7.0.20+

RHEL/Rocky/Alma 8 [5]

s390x

Enterprise

[1](1, 2, 3, 4, 5, 6) En Oracle Linux, MongoDB solo soporta el Kernel Compatible con Red Hat.
[2] Las versiones 5.0 y superiores de MongoDB se prueban con SLES 12 service pack 5. Las versiones anteriores de MongoDB se prueban con SLES 12 sin service pack.
[3] Las versiones 7.0 y posteriores de MongoDB se prueban con paquete de servicio SLES 15 service pack 4. Las versiones anteriores de MongoDB se prueban con SLES 15 sin service pack.
[4] La versión 7.0 de MongoDB se compila y prueba con RHEL 7.9. Las versiones anteriores de MongoDB se prueban con RHEL 7 y asumen compatibilidad en versiones posteriores.
[5](1, 2) RHEL 8 en PPC64LE y s390x no tiene soporte para la versión actualizada de TCMalloc utilizada en las versiones de MongoDB 8.0 y posteriores. En estas arquitecturas, RHEL 8 utiliza la versión heredada de TCMalloc. Para obtener más información, consulta Optimización del rendimiento de TCMalloc para una implementación autogestionada.
[6] RHEL 9 en PPC64LE no tiene soporte para la versión actualizada de TCMalloc utilizada en las versiones de MongoDB 8.0 y posteriores. En esta arquitectura, RHEL 9 usa la versión heredada de TCMalloc. Para aprender más, consulta Optimización del rendimiento de TCMalloc para una implementación autogestionada.

Aunque MongoDB admite una variedad de plataformas, se recomiendan los siguientes sistemas operativos para su uso en producción en la arquitectura x86_64:

  • Amazon Linux

  • Debian

  • RHEL [7]

  • SLES

  • Ubuntu LTS

  • Servidor Windows

Para obtener los mejores resultados, ejecute la última versión de su plataforma. Si ejecuta una versión antigua, asegúrese de que su versión sea compatible con su proveedor.

[7] Los productos on-premises de MongoDB lanzados para RHEL versión 8.0+ son compatibles con Rocky Linux versión 8.0+ y AlmaLinux versión 8.0+, siempre que esas distribuciones cumplan con su obligación de ofrecer compatibilidad total con RHEL.

Tip

Asegúrese de tener la última versión estable.

Las versiones de MongoDB están disponibles en el Centro de Descargas de MongoDB:

Para obtener detalles sobre la actualización a la versión menor más reciente, consulta Actualización a la última versión del parche autogestionado de MongoDB.

Los siguientes paquetes relacionados también están disponibles en el Centro de Descarga de MongoDB:

Para otros productos de MongoDB, consultar la documentación respectiva.

Los archivos en el dbPath directorio deben corresponder al motor de almacenamiento configurado. mongod no se iniciará si dbPath contiene archivos de datos creados por un motor de almacenamiento diferente al especificado por --storageEngine.

mongod debe poseer permisos de lectura y guardar para el dbPathespecificado.

Si se usa un escáner antivirus (AV) o un escáner de detección y respuesta de endpoint (EDR), se debe configurar el escáner para excluir el database storage path y el database log path del escaneo.

Los archivos de datos en el database storage path están comprimidos. Además, si utiliza el motor de almacenamiento cifrado, los archivos de datos también están cifrados. Los costos de E/S y CPU para escanear estos archivos pueden disminuir significativamente el rendimiento sin ofrecer ningún beneficio de seguridad.

Si no excluye los directorios en su database storage path y database log path, el escáner podría poner en cuarentena o borrar archivos importantes. Los archivos faltantes o en cuarentena pueden corromper su base de datos y hacer que su instancia de MongoDB se bloquee.

WiredTiger permite el acceso concurrente de lectores y escritores a los documentos en una colección. Los clientes pueden leer documentos mientras las operaciones de escritura están en curso, y varios subprocesos pueden modificar diferentes documentos de una colección al mismo tiempo.

Tip

Asignar suficiente RAM y CPU proporciona información sobre cómo WiredTiger aprovecha múltiples núcleos de CPU y cómo mejorar el rendimiento de las operaciones.

MongoDB utiliza write ahead logging para una bitácora en disco. El registro en la bitácora garantiza que MongoDB pueda recuperar rápidamente las operaciones de escritura que se escribieron en la bitácora pero no en los archivos de datos en los casos en que mongod terminó debido a un bloqueo u otra falla grave. Consulta registro en la bitácora para obtener más información.

Se pueden utilizar sesiones con coherencia causal para leer tus propias escrituras, si las escrituras solicitan reconocimiento.

Nivel de confirmación de escritura describe el nivel de reconocimiento solicitado de MongoDB para las operaciones de escritura. El nivel del nivel de confirmación de escritura afecta la rapidez con la que se devuelve la operación de escritura. Cuando las operaciones de guardar tienen un nivel de confirmación de escritura débil, regresan rápidamente. Con niveles de confirmación de escritura más fuertes, los clientes deben esperar después de enviar una operación de guardado hasta que MongoDB confirme la operación de guardado en el nivel de confirmación de escritura solicitado. Con un nivel de confirmación de escritura insuficiente, a un cliente le puede parecer que las operaciones de guardado han tenido éxito, pero es posible que no persistan en algunos casos de fallo del servidor.

Consultar el nivel de confirmación de escritura (write concern) del documento para obtener más información sobre cómo elegir un nivel de confirmación de escritura (write concern) adecuado para la implementación.

Es necesario garantizar ejecutar siempre MongoDB en un entorno de confianza, con reglas de red que impidan el acceso desde todas las máquinas, sistemas y redes desconocidos. Como ocurre con cualquier sistema sensible que depende del acceso a la red, la implementación de MongoDB solo debe ser accesible para sistemas específicos que requieran acceso, tales como servidores de aplicaciones, servicios de supervisión y otros componentes de MongoDB.

Importante

Por defecto, la autorización no está habilitada, y mongod asume un entorno de confianza. Activa la moda authorization según sea necesario. Para obtener más información sobre los mecanismos de autenticación compatibles en MongoDB, así como sobre la autorización en MongoDB, consulta Autenticación en implementaciones autogestionadas y Control de acceso basado en roles en implementaciones autogestionadas.

Para obtener información adicional y consideraciones sobre seguridad, consulta los documentos en la Sección de seguridad, específicamente:

Para los usuarios de Windows, considera el artículo de Technet de Windows servidor sobre la configuración de TCP al implementar MongoDB en Windows.

La interfaz HTTP está deshabilitada por defecto. No habilites la interfaz HTTP en entornos de producción.

Se debe evitar sobrecargar los recursos de conexión de una instancia mongod o mongos ajustando el tamaño del pool de conexiones para que se adapte al caso de uso. Comienza en el 110-115 % del número típico de solicitudes actuales de la base de datos y ajusta el tamaño del pool de conexiones según sea necesario. Se debe consultar las Opciones del pool de conexiones para ajustar el tamaño del pool de conexiones.

El comando connPoolStats devuelve información sobre el número de conexiones abiertas a la base de datos actual para las instancias de mongos y mongod en clústeres fragmentados.

Consulta también Asignar suficiente RAM y CPU.

Si el valor de keepalive de TCP es mayor que el tiempo de espera inactivo de TCP en el balanceador de carga de su proveedor de nube, existe el riesgo de que el sistema pueda descartar conexiones sin previo aviso. Para reducir este riesgo, establezca tcp_keepalive_time en 120.

Nota

Debes reiniciar los procesos de mongod y mongos para que los nuevos ajustes de keepalive de todo el sistema se implementen.

  • Para ver la configuración de keepalive en Linux, utilice uno de los siguientes comandos:

    sysctl net.ipv4.tcp_keepalive_time

    O:

    cat /proc/sys/net/ipv4/tcp_keepalive_time

    El valor se mide en segundos.

    Nota

    Aunque el nombre de la configuración incluye ipv4, el valor tcp_keepalive_time se aplica tanto a IPv4 como a IPv6.

  • Para cambiar el tcp_keepalive_time valor, puedes utilizar uno de los siguientes comandos, proporcionando un <value> en segundos:

    sudo sysctl -w net.ipv4.tcp_keepalive_time=<value>

    O:

    echo <value> | sudo tee /proc/sys/net/ipv4/tcp_keepalive_time

    Estas operaciones no persisten a través de los reinicios del sistema. Para persistir la configuración, añade la siguiente línea a /etc/sysctl.conf, proporcionando un <value> en segundos, y reinicia el equipo:

    net.ipv4.tcp_keepalive_time = <value>

    Los valores de Keepalive mayores que 300 segundos, (5 minutos) serán anulados en los sockets de mongod y mongos y se establecerán en 300 segundos.

  • Para ver la configuración de keepalive en Windows, emita el siguiente comando:

    reg query HKLM\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters /v KeepAliveTime

    El valor del registro no está presente por defecto. El valor por defecto del sistema, utilizado si el valor está ausente, es 7200000 milisegundos o 0x6ddd00 en hexadecimal.


  • Para cambiar el valor KeepAliveTime, utilice el siguiente comando en un Administrador Command Prompt, donde <value> se expresa en hexadecimal (por ejemplo, 120000 es 0x1d4c0):

    reg add HKLM\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters\ /t REG_DWORD /v KeepAliveTime /d <value>

    Los usuarios de Windows deberían considerar el artículo de Technet de Windows Server sobre KeepAliveTime para obtener más información sobre cómo configurar keepalive para implementaciones de MongoDB en sistemas Windows. Los valores de keepalive mayores o iguales a 600000 milisegundos (10 minutos) serán ignorados por mongod y mongos.

MongoDB está diseñado específicamente pensando en el hardware de bajo costo y tiene pocos requisitos o limitaciones de hardware. Los componentes principales de MongoDB se ejecutan en hardware de tipo little-endian, principalmente en procesadores x86/x86_64. Las librerías de cliente (es decir, drivers) pueden ejecutarse en sistemas big o little endian.

Como mínimo, asegúrate de que cada instancia mongod o mongos tenga acceso a dos núcleos reales o a una CPU física multinúcleo.

El motor de almacenamiento WiredTiger es multihilo y puede aprovechar núcleos de CPU adicionales. Específicamente, el número total de subprocesos activos (es decir, operaciones concurrentes) en relación con el número de CPU disponibles pueden afectar el rendimiento:

  • El rendimiento aumenta a medida que el número de operaciones activas simultáneas aumenta hasta igualar el número de CPUs.

  • El rendimiento disminuye a medida que el número de operaciones activas simultáneas supera el número de CPUs por cierta cantidad de umbral.

El umbral depende de su aplicación. Puede determinarse el número óptimo de operaciones activas concurrentes para su aplicación experimentando y midiendo el rendimiento. La salida de mongostat proporciona estadísticas sobre la cantidad de lecturas/guardados activas en la columna (ar|aw).

Con WiredTiger, MongoDB utiliza tanto la caché interna de WiredTiger como la caché del sistema de archivos.

El tamaño de caché interno por defecto de WiredTiger es el mayor de los siguientes:

  • 50% de (RAM - 1GB), o

  • 0.256 GB.

Por ejemplo, en un sistema con un total de 4GB de RAM, la caché de WiredTiger usa 1.5GB de RAM (0.5 * (4GB - 1GB) = 1.5 GB). Al proporcionar un tamaño de caché específico, asegúrese de que la RAM no supere los límites de 0.256GB a 10000GB.

Evite aumentar el tamaño de la caché interna de WiredTiger por encima de su valor predeterminado. Si su caso lo requiere, puede usar --wiredTigerCacheSizePct para tener en cuenta los cambios en la memoria debidos a la vertical. Debe especificar un porcentaje de hasta el 80% de la memoria disponible. Los valores calculados pueden variar entre 0.256GB y 10000GB. Por ejemplo, en un sistema con 2GB de RAM, --wiredTigerCacheSizePct no se puede establecer en 10 porque el 10% de 2GB es 0.2 GB, que es menor que 0.256GB.

Nota

En algunos casos, como al ejecutarse en un contenedor configurado para usar menos RAM que la memoria asignada al host, es necesario tener en cuenta los límites. Es posible que deba configurar la caché de WiredTiger con un valor adecuado, ya que WiredTiger podría no tener en cuenta los límites de memoria del contenedor específico en ciertos casos.

Para ver, el valor que WiredTiger utiliza como memory limit hostInfo la cantidad máxima de RAM disponible, utilice el comando.

Por defecto, WiredTiger utiliza la compresión de bloques Snappy para todas las colecciones y la reducción de prefijo para todos los índices. Los valores de compresión por defecto son configurables a nivel global y también pueden establecerse por colección y por índice durante la creación de colecciones e índices.

Se utilizan diferentes representaciones para los datos en la caché interna de WiredTiger frente al formato en disco:

  • Los datos en la caché del sistema de archivos son idénticos al formato en disco, incluidos los beneficios de cualquier compresión para los archivos de datos. La caché del sistema de archivos es utilizada por el sistema operativo para reducir la E/S del disco.

  • Los índices cargados en la caché interna de WiredTiger tienen una representación de datos diferente al formato en disco, pero aún pueden aprovechar la reducción de prefijo de índice para reducir el uso de RAM. La reducción de prefijo de índice elimina duplicados de los prefijos comunes de los campos indexados.

  • Los datos de la colección en la caché interna de WiredTiger están sin comprimir y utilizan una representación diferente al formato en disco. La compresión de bloques puede proporcionar un ahorro significativo de almacenamiento en disco, pero los datos deben ser descomprimidos para que el servidor los manipule.

Con la caché del sistema de archivos, MongoDB utiliza automáticamente toda la memoria libre que no está siendo utilizada por la caché de WiredTiger ni por otros procesos.

Para ajustar el tamaño de la caché interna de WiredTiger, consulta --wiredTigerCacheSizeGB y storage.wiredTiger.engineConfig.cacheSizeGB. Se debe evitar aumentar el tamaño de la caché interna de WiredTiger por encima de su valor por defecto. Si el caso de uso requiere un aumento del tamaño de la caché interna, consulta --wiredTigerCacheSizePct y storage.wiredTiger.engineConfig.cacheSizePct.

Nota

El storage.wiredTiger.engineConfig.cacheSizeGB limita el tamaño de la caché interna de WiredTiger. El sistema operativo utiliza la memoria libre disponible para la caché del sistema de archivos, lo que permite que los archivos de datos comprimidos de MongoDB permanezcan en la memoria. Además, el sistema operativo utiliza cualquier RAM libre para almacenar en búfer los bloques del sistema de archivos y la caché del sistema de archivos.

Para acomodar a los consumidores adicionales de RAM, es posible que debas reducir el tamaño de la caché interna de WiredTiger.

El valor por defecto del tamaño de la caché interna de WiredTiger asume que hay una única instancia de mongod por máquina. Si una sola máquina contiene varias instancias de MongoDB, reduce la configuración para acomodar las otras instancias mongod.

Si ejecuta en un contenedor (por mongod ejemplo,,, lxc cgroupsDocker, etc.) que no tiene acceso a toda la RAM disponible en un sistema, debe establecer storage.wiredTiger.engineConfig.cacheSizeGB o en un valor menor que la cantidad de RAM disponible en el contenedor. La cantidad exacta depende de los demás procesos que se ejecutan en el storage.wiredTiger.engineConfig.cacheSizePct contenedor.memLimitMB Consulte.

Solo puedes proporcionar uno de storage.wiredTiger.engineConfig.cacheSizeGB o storage.wiredTiger.engineConfig.cacheSizePct.

Para ver las estadísticas sobre la caché y la tasa de desalojos, consultar el campo wiredTiger.cache devuelto por el comando serverStatus.

Al utilizar el cifrado, las CPU equipadas con extensiones del conjunto de instrucciones AES-NI muestran ventajas significativas de rendimiento. Si estás utilizando MongoDB Enterprise con el motor de almacenamiento cifrado, elige una CPU que admita AES-NI para un mejor rendimiento.

MongoDB tiene buenos resultados y una buena relación precio-rendimiento con SSD SATA (disco de estado sólido).

Utiliza SSD si está disponible y resulta económico.

Los discos duros giratorios básicos (SATA) suelen ser una buena opción, ya que el aumento del rendimiento de E/S aleatorio con discos giratorios más caros no es tan dramático (solo del orden de 2x). Utilizar SSDs o aumentar la RAM puede ser más efectivo para incrementar el rendimiento de E/S.

Ejecutar MongoDB en un sistema con acceso no uniforme a la memoria (NUMA) puede causar una serie de problemas operativos, como un rendimiento lento durante períodos de tiempo y un uso elevado de los procesos del sistema.

Al ejecutar servidores y clientes de MongoDB en hardware NUMA, debes configurar una política de intercalado de memoria para que el host se comporte de manera no NUMA. MongoDB comprueba la configuración de NUMA al iniciar cuando se implementa en máquinas Linux (a partir de la versión 2.0) y Windows (a partir de la versión 2.6). Si la configuración de NUMA puede degradar el rendimiento, MongoDB muestra una advertencia.

El proceso demonio numad también puede reducir el rendimiento de mongod. Debes asegurarte de que numad no esté activado en los servidores de MongoDB.

Tip

En Windows, el entrelazado de memoria debe habilitarse a través del BIOS de la máquina. Se debe consultar la documentación del sistema para obtener detalles.

En Linux, debes deshabilitar recuperación de zona y también garantizar que las instancias mongod y mongos se inicien mediante numactl, que generalmente se configura a través del sistema de inicialización de la plataforma. Se deben realizar ambas operaciones para deshabilitar correctamente NUMA para su uso con MongoDB.

  1. Desactiva zona reclaim con uno de los siguientes comandos:

    echo 0 | sudo tee /proc/sys/vm/zone_reclaim_mode
    sudo sysctl -w vm.zone_reclaim_mode=0
  2. Es necesario garantizar que mongod y mongos sean iniciados por numactl. Esto generalmente se configura a través del sistema de inicialización de la plataforma. Se debe ejecutar el siguiente comando para determinar qué sistema de inicialización está en uso en la plataforma:

    ps --no-headers -o comm 1
    • Si "systemd", la plataforma utiliza el sistema de inicialización systemd, y se debe seguir los pasos en la pestaña systemd a continuación para editar los archivos de servicio de MongoDB.

    • Si "init", la plataforma utiliza el sistema de inicialización SysV Init, y no se necesita realizar este paso. El script de inicio predeterminado de MongoDB para SysV Init incluye los pasos necesarios para iniciar instancias de MongoDB a través de numactl por defecto.

    • Si gestionas tus propios scripts de inicio (es decir, no estás utilizando ninguno de estos sistemas de inicialización), debes seguir los pasos en la pestaña Scripts de inicio personalizados a continuación para editar tus scripts de inicio personalizados.


    Debes usar numactl para iniciar cada una de tus instancias demongod, incluyendo todos los servidores de configuración, instancias demongos y clientes. Edita el archivo de servicio systemd por defecto para cada uno de la siguiente manera:

    1. Copia el archivo de servicio por defecto de MongoDB:

      sudo cp /lib/systemd/system/mongod.service /etc/systemd/system/
    2. Edita el archivo /etc/systemd/system/mongod.service y actualiza la instrucción ExecStart para que comience con:

      /usr/bin/numactl --interleave=all

      Ejemplo

      Si la instrucción ExecStart actual dice:

      ExecStart=/usr/bin/mongod --config /etc/mongod.conf

      Actualizar esa instrucción para que diga:

      ExecStart=/usr/bin/numactl --interleave=all /usr/bin/mongod --config /etc/mongod.conf
    3. Aplicar el cambio a systemd:

      sudo systemctl daemon-reload
    4. Reiniciar cualquier instancia de mongod en ejecución:

      sudo systemctl stop mongod
      sudo systemctl start mongod
    5. Si corresponde, repita estos pasos para cualquier instancia de mongos.

    Debes usar numactl para iniciar cada una de tus instancias demongod, incluyendo todos los servidores de configuración, instancias demongos y clientes.

    1. Instalar numactl para la plataforma si aún no está instalado. Consultar la documentación del sistema operativo para obtener información sobre la instalación del paquete numactl.

    2. Configura cada uno de tus scripts de inicio personalizados para iniciar cada instancia de MongoDB mediante numactl:

      numactl --interleave=all <path> <options>

      Donde <path> es la ruta al programa que está iniciando y <options> son los argumentos opcionales para pasar a ese programa.

      Ejemplo

      numactl --interleave=all /usr/local/bin/mongod -f /etc/mongod.conf

Para obtener más información, consulte la Documentación para /proc/sys/vm/*.

MongoDB funciona mejor cuando se puede evitar el intercambio o mantenerlo al mínimo, ya que recuperar datos del swap siempre es más lento que acceder a los datos en RAM. Sin embargo, si el sistema que aloja MongoDB se queda sin RAM, el intercambio puede evitar que el OOM Killer de Linux termine el proceso mongod.

En general, debe elegir una de las siguientes estrategias de intercambio:

  1. Asigne espacio de intercambio en su sistema y configure el kernel para que solo permita el intercambio bajo alta carga de memoria, o

  2. No asignar espacio de intercambio en el sistema y configurar el kernel para desactivar completamente el intercambio

Se debe consultar Establecer vm.swappiness para obtener instrucciones sobre cómo configurar el swap en el sistema Linux siguiendo estas directrices.

Nota

Si la instancia de MongoDB está hospedada en un sistema que también ejecuta otro software, como un servidor web, elegir la primera estrategia de swap. No desactivar el swap en este caso. Si es posible, se recomienda encarecidamente ejecutar MongoDB en un sistema dedicado propio.

Para un rendimiento óptimo en términos de la capa de almacenamiento, utiliza discos respaldados por RAID-10. RAID-5 y RAID-6 generalmente no proporcionan un rendimiento suficiente para soportar una implementación de MongoDB.

Con el motor de almacenamiento WiredTiger, los objetos de WiredTiger pueden almacenarse en sistemas de archivos remotos si el sistema de archivos remoto cumple con la norma ISO/IEC 9945-1:1996 (POSIX.1). Dado que los sistemas de archivos remotos suelen ser más lentos que los sistemas de archivos locales, el uso de un sistema de archivos remoto para el almacenamiento puede degradar el rendimiento.

Si se utiliza NFS, añadir las siguientes opciones NFS al archivo /etc/fstab:

  • bg

  • hard

  • nolock

  • noatime

  • nointr

Dependiendo de la versión del kernel, algunos de estos valores ya pueden estar establecidos por defecto. Se debe consultar la documentación de la plataforma para obtener más información.

Para mejorar el rendimiento, se debe considerar separar los datos, la bitácora y los registros de la base de datos en diferentes dispositivos de almacenamiento, según el patrón de acceso y escritura de la aplicación. Se deben montar los componentes como sistemas de archivos separados y se deben usar enlaces simbólicos para asignar la ruta de cada componente al dispositivo que lo almacena.

Para el motor de almacenamiento WiredTiger, también puede almacenar los índices en un dispositivo de almacenamiento diferente. Consulte storage.wiredTiger.engineConfig.directoryForIndexes.

Nota

Usar diferentes dispositivos de almacenamiento afectará la capacidad para crear copias de seguridad tipo snapshot de los datos, ya que los archivos estarán en diferentes dispositivos y volúmenes.

Para dispositivos de bloque locales conectados a una instancia de máquina virtual a través del hipervisor o alojados por un proveedor de alojamiento en la nube, el sistema operativo invitado debe usar el programador "ninguno" para obtener el mejor rendimiento. El none programador permite al sistema operativo aplazar la programación de E/S al hipervisor subyacente.

Si está ejecutando varias cargas de trabajo en la misma máquina virtual o en su propio centro de datos, utilice el programador Kyber.

Nota

El programador Kyber solo está disponible en los kernels de Linux a partir de la 4.12 versión.

Para servidores físicos que utilizan unidades NVMe o SSD, el sistema operativo debe utilizar el programador "ninguno".

Para servidores físicos que utilizan discos giratorios, el sistema operativo debe usar el programador mq-deadline. Este programa limita la latencia máxima por solicitud y mantiene un buen rendimiento del disco, ideal para aplicaciones de bases de datos con uso intensivo de disco.

Consultar el documento de Arquitecturas de set de réplicas para obtener una visión general de las consideraciones arquitectónicas para las implementaciones de set de réplicas.

Consultar Arquitectura de Producción de Clúster Fragmentado para obtener una descripción general de las arquitecturas de clúster particionado recomendadas para implementaciones en producción.

WiredTiger puede comprimir los datos de la colección utilizando una de las siguientes bibliotecas de compresión:

  • rápido
    Ofrece una tasa de compresión más baja que zlib o zstd, pero tiene un costo de CPU más bajo que cualquiera de los dos.
  • zlib
    Ofrece una mejor tasa de compresión que snappy, pero tiene un costo de CPU más alto que tanto snappy como zstd.
  • zstd
    Ofrece una mejor tasa de compresión que tanto snappy como zlib y tiene un costo de CPU más bajo que zlib.

Por defecto, WiredTiger utiliza la librería de compresión snappy. Para cambiar la configuración de compresión, consulta storage.wiredTiger.collectionConfig.blockCompressor.

WiredTiger utiliza la Reducción de prefijo en todos los índices por defecto.

Los componentes de MongoDB mantienen relojes lógicos para soportar operaciones dependientes del tiempo. Utilizar NTP para sincronizar los relojes de la máquina host mitiga el riesgo de deriva de reloj entre componentes. La desviación del reloj entre los componentes incrementa la probabilidad de un comportamiento incorrecto o anormal en las operaciones dependientes del tiempo, como las siguientes:

  • Si el reloj del sistema subyacente de cualquier componente de MongoDB se desvía un año o más con respecto a otros componentes en la misma implementación, la comunicación entre esos nodos puede volverse poco fiable o detenerse por completo.

    El parámetro maxAcceptableLogicalClockDriftSecs controla la cantidad de deriva de reloj aceptable entre los componentes. Los clústeres con un valor más bajo de maxAcceptableLogicalClockDriftSecs tienen una tolerancia igualmente más baja a la deriva del reloj.

  • Dos nodos del clúster con relojes de sistema diferentes pueden devolver valores diferentes para operaciones que devuelven la hora actual del clúster o del sistema, como Date(), NOW, y CLUSTER_TIME.

  • Las Características que dependen de la sincronización de tiempo pueden presentar un comportamiento inconsistente o impredecible en clústeres con desfase horario entre los componentes de MongoDB.

Cuando ejecutes MongoDB en producción en Linux, debes usar la versión 2.6.36 o posterior del kernel de Linux, con el sistema de archivos XFS o EXT4. Si es posible, utiliza XFS, ya que generalmente ofrece un mejor rendimiento con MongoDB.

Con el motor de almacenamiento WiredTiger, se recomienda encarecidamente utilizar XFS para los nodos que contienen datos para evitar problemas de rendimiento que puedan surgir al usar EXT4 con WiredTiger.

  • En general, si se utiliza el sistema de archivos XFS, utilizar al menos la versión 2.6.25 del Kernel de Linux.

  • Si se utiliza el sistema de archivos EXT4, usar al menos la versión 2.6.28 del Kernel de Linux.

  • En Red Hat Enterprise Linux y CentOS, utiliza al menos la versión 2.6.18-194 del kernel de Linux.

MongoDB utiliza la GNU C Library (glibc) en Linux. Generalmente, cada distribución de Linux ofrece su propia versión verificada de esta biblioteca. Para obtener los mejores resultados, utiliza la última actualización disponible para esta versión proporcionada por el sistema. Puedes comprobar si tiene la última versión instalada usando el administrador de paquetes de su sistema. Por ejemplo:

  • En RHEL / CentOS, el siguiente comando actualiza la librería GNU C proporcionada por el sistema:

    sudo yum update glibc
  • En Ubuntu/Debian, el siguiente comando actualiza la librería GNU C proporcionada por el sistema:

    sudo apt-get install libc6

Importante

MongoDB requiere un sistema de archivos que soporte fsync() en los directorios. Por ejemplo, las carpetas compartidas de HGFS y Virtual Box no admiten esta operación.

"Swappiness" es un ajuste del kernel de Linux que afecta el comportamiento del administrador de memoria virtual. La configuración de vm.swappiness tiene un rango de 0 a 100: cuanto mayor sea el valor, la preferencia será intercambiar páginas de memoria al disco en lugar de eliminar páginas de la RAM.

  • Una configuración de 0 desactiva el intercambio por completo [8].

  • Una configuración de 1 permite al kernel intercambiar solo para evitar problemas de falta de memoria.

  • Una configuración de 60 indica al kernel que intercambie al disco con frecuencia, y es el valor por defecto en muchas distribuciones de Linux.

  • Una configuración de 100 indica al kernel que intercambie agresivamente al disco.

MongoDB rinde mejor cuando se evita o se minimiza el intercambio. Por lo tanto, se debería establecer vm.swappiness en 1 o 0 según las necesidades de la aplicación y la configuración del clúster.

Nota

La mayoría de los procesos del sistema y de usuario se ejecutan dentro de un cgroup, que, por defecto, establece el vm.swappiness a 60. Si está ejecutando RHEL / CentOS, configurar vm.force_cgroup_v2_swappiness en 1 para asegurarse de que el valor de vm.swappiness especificado anule cualquier valor por defecto de cgroup.

[8] Con versiones del kernel de Linux anteriores a 3.5, o versiones del kernel de RHEL / CentOS anteriores a 2.6.32-303, una configuración de vm.swappiness de 0 todavía permitiría que el kernel intercambie en ciertas situaciones de emergencia.

Nota

Si su instancia de MongoDB está alojada en un sistema que también ejecuta otro software, como un servidor web, debería configurar vm.swappiness a 1. Si es posible, se recomienda encarecidamente que ejecute MongoDB en su propio sistema dedicado.

  • Para comprobar la configuración actual de swappiness en el sistema, se debe ejecutar:

    cat /proc/sys/vm/swappiness
  • Para cambiar la swappiness en su sistema:

    1. Edite el archivo /etc/sysctl.conf y añada la siguiente línea:

      vm.swappiness = 1
    2. Ejecute el siguiente comando para aplicar la configuración:

      sudo sysctl -p

Nota

Si está ejecutando RHEL / CentOS y utiliza un perfil de rendimiento tuned, también debe editar el perfil elegido para establecer vm.swappiness en 1 o 0.

Para todas las implementaciones de MongoDB:

  • Utilizar el protocolo de Tiempo de Red (NTP) para sincronizar el tiempo entre los hosts. Esto es especialmente importante en clústeres particionados.

Para los motores de almacenamiento WiredTiger, considere las siguientes recomendaciones:

  • Desactiva atime para el volumen de almacenamiento que contiene los archivos de la base de datos.

  • Se debe ajustar la configuración ulimit de la plataforma de acuerdo con las recomendaciones en la referencia de ulimit. Los valores bajos de ulimit afectarán negativamente a MongoDB cuando se utilice intensamente y pueden provocar conexiones fallidas a los procesos de MongoDB y la pérdida del servicio.

    Nota

    Si el valor ulimit para el número de archivos abiertos es inferior a 64000, MongoDB genera una advertencia de inicio.

  • Si estás ejecutando MongoDB 8.0, habilita Transparent Hugepages.

    • Si estás ejecutando MongoDB 7.0 o una versión anterior, desactiva Transparent Hugepages. En versiones anteriores, MongoDB rinde mejor con páginas de memoria virtual típicas (4096 bytes).

  • Se debe desactivar NUMA en el BIOS. Si eso no es posible, se debe consultar MongoDB sobre hardware NUMA.

  • Configura SELinux para MongoDB si no estás utilizando las rutas de directorio por defecto de MongoDB o puertos.

    Nota

    Si está utilizando SELinux, cualquier operación de MongoDB que requiera JavaScript del lado del servidor resultará en errores de segmentación. Deshabilitar la ejecución de JavaScript del lado del servidor describe cómo deshabilitar la ejecución de JavaScript del lado del servidor.

Para el motor de almacenamiento WiredTiger:

  • Establecer la configuración de lectura anticipada entre 8 y 32, independientemente del tipo de medio de almacenamiento (disco giratorio, SSD, etc.).

    Un mayor lectura anticipada suele beneficiar a las operaciones de E/S secuenciales. Dado que los patrones de acceso a disco de MongoDB son generalmente aleatorios, el uso de configuraciones de lectura anticipada más altas proporciona un beneficio limitado o una posible degradación del rendimiento. Por lo tanto, para un rendimiento óptimo de MongoDB, se debe configurar la lectura anticipada entre 8 y 32, a menos que las pruebas demuestren un beneficio medible, repetible y confiable en un valor de lectura anticipada más alto. El soporte comercial de MongoDB puede ofrecer consejos y orientación sobre configuraciones alternativas de lectura anticipada.

En plataformas Linux, puede observar una de las siguientes instrucciones en el registro de MongoDB:

<path to TLS/SSL libs>/libssl.so.<version>: no version information available (required by /usr/bin/mongod)
<path to TLS/SSL libs>/libcrypto.so.<version>: no version information available (required by /usr/bin/mongod)

Estas advertencias indican que las librerías TLS/SSL del sistema son diferentes de las bibliotecas TLS/SSL contra las que se compiló el mongod. Por lo general, estos mensajes no requieren intervención; sin embargo, puedes utilizar las siguientes operaciones para determinar las versiones del símbolo que mongod espera:

objdump -T <path to mongod>/mongod | grep " SSL_"
objdump -T <path to mongod>/mongod | grep " CRYPTO_"

Estas operaciones devolverán un resultado que se asemeja a una de las siguientes líneas:

0000000000000000 DF *UND* 0000000000000000 libssl.so.10 SSL_write
0000000000000000 DF *UND* 0000000000000000 OPENSSL_1.0.0 SSL_write

Las dos últimas cadenas de esta salida son la versión del símbolo y el nombre del símbolo. Compara estos valores con los valores devueltos por las siguientes operaciones para detectar desajustes de versión de símbolos:

objdump -T <path to TLS/SSL libs>/libssl.so.1*
objdump -T <path to TLS/SSL libs>/libcrypto.so.1*

Este procedimiento no es ni exacto ni exhaustivo: muchos símbolos utilizados por mongod de la biblioteca libcrypto no comienzan con CRYPTO_.

Para las instancias de MongoDB que utilizan el motor de almacenamiento WiredTiger, el rendimiento en Windows es comparable al rendimiento en Linux.

Esta sección describe las consideraciones al ejecutar MongoDB en algunos de los entornos virtuales más comunes.

Para todas las plataformas, considerar el Cronograma.

Existen dos configuraciones de rendimiento que se deben considerar:

  • Rendimiento reproducible para pruebas de rendimiento o benchmarking, y

  • Rendimiento máximo en bruto

Para ajustar el rendimiento en EC2 para cualquiera de las dos configuraciones, debe:

  • Se debe habilitar AWS Enhanced Networking para la instancia. No todos los tipos de instancias admiten Enhanced Networking.

    Para aprender más sobre Enhanced Networking, consulta la documentación de AWS.

  • Configura tcp_keepalive_time a 120.

Si se prioriza un rendimiento reproducible en EC2, también se recomienda:

Utilice Almacenamiento Premium. Microsoft Azure ofrece dos tipos generales de almacenamiento: almacenamiento estándar y almacenamiento Premium. MongoDB en Azure tiene un mejor rendimiento cuando se utiliza el almacenamiento Premium que cuando se utiliza el almacenamiento estándar.

MongoDB es compatible con VMware.

VMware admite la sobrecarga de memoria, que permite asignar más memoria a las máquinas virtuales de la que tiene disponible la máquina física. Cuando la memoria está sobrecargada, el hipervisor reasigna la memoria entre las máquinas virtuales. El controlador de memoria de VMware (vmmemctl) recupera las páginas que se consideran menos valiosas.

El controlador de globo reside dentro del sistema operativo invitado. Bajo ciertas configuraciones, cuando el controlador de globo se expande, puede interferir con la gestión de memoria de MongoDB y afectar su rendimiento.

Para evitar un impacto negativo en el rendimiento por el controlador de globo y las características de sobrecarga de memoria, reserva la cantidad total de memoria para la máquina virtual que ejecuta MongoDB. Reservar la cantidad adecuada de memoria para la máquina virtual evita que el globo se infle en el sistema operativo local cuando hay presión de memoria en el hipervisor.

Aunque las características del controlador de globo y la sobreasignación de memoria pueden afectar negativamente el rendimiento de MongoDB en ciertas configuraciones, no desactives estas características. Si desactivas estas características, el hipervisor puede usar su espacio de intercambio para cumplir con las solicitudes de memoria, lo que afecta negativamente el rendimiento.

Asegúrate de que las máquinas virtuales permanezcan en un host ESX/ESXi específico configurando las reglas de afinidad de VMware. Si debes migrar manualmente una máquina virtual a otro host y la instancia mongod en la máquina virtual es la primaria, primero debes step down la primaria y luego shut down the instance.

Sigue las prácticas recomendadas de redes para vMotion y VMKernel. No seguir las prácticas recomendadas puede resultar en problemas de rendimiento y afectar los mecanismos de alta disponibilidad de sets de réplicas y clústeres particionados.

Se puede clonar una máquina virtual que ejecuta MongoDB. Es posible utilizar esta función para implementar un nuevo host virtual y añadirlo como un nodo de un set de réplicas.

MongoDB es compatible con KVM.

KVM admite la sobrecarga de memoria, la cual permite asignar más memoria a sus máquinas virtuales de la que tiene disponible la máquina física. Cuando la memoria está sobrecargada, el hipervisor reasigna la memoria entre las máquinas virtuales. El controlador de memoria de KVM recupera las páginas que se consideran menos valiosas.

El controlador de globo reside dentro del sistema operativo invitado. Bajo ciertas configuraciones, cuando el controlador de globo se expande, puede interferir con la gestión de memoria de MongoDB y afectar su rendimiento.

Para evitar un impacto negativo en el rendimiento por el controlador de globo y las características de sobrecarga de memoria, reserva la cantidad total de memoria para la máquina virtual que ejecuta MongoDB. Reservar la cantidad adecuada de memoria para la máquina virtual evita que el globo se infle en el sistema operativo local cuando hay presión de memoria en el hipervisor.

Aunque las características del controlador de globo y la sobreasignación de memoria pueden afectar negativamente el rendimiento de MongoDB en ciertas configuraciones, no desactives estas características. Si desactivas estas características, el hipervisor puede usar su espacio de intercambio para cumplir con las solicitudes de memoria, lo que afecta negativamente el rendimiento.

En Linux, se debe usar el comando iostat para comprobar si la E/S del disco es un cuello de botella para la base de datos. Se debe especificar un número de segundos al ejecutar iostat para evitar mostrar estadísticas que cubran el tiempo desde el arranque del servidor.

Por ejemplo, el siguiente comando mostrará estadísticas extendidas y el tiempo para cada informe mostrado, con tráfico en MB/s, a intervalos de un segundo:

iostat -xmt 1

Campos clave de iostat:

  • %util: este es el campo más útil para una verificación rápida, indica qué porcentaje del tiempo el dispositivo/unidad está en uso.

  • avgrq-sz: tamaño promedio de la solicitud. Un número más pequeño para este valor refleja más operaciones de E/S aleatorias.

bwm-ng es una herramienta de línea de comandos para la supervisión del uso de la red. Si se sospecha de un cuello de botella basado en la red, se puede usar bwm-ng para iniciar el proceso de diagnóstico.

Para realizar copias de seguridad de su base de datos MongoDB, consultar MongoDB Backup Methods Overview.

Volver

Lista de verificación de operaciones

En esta página