sql >> Base de Datos >  >> NoSQL >> MongoDB

Optimización de su entorno Linux para MongoDB

El rendimiento de MongoDB depende de cómo utiliza los recursos subyacentes. Almacena datos en el disco, así como en la memoria. Utiliza recursos de CPU para realizar operaciones y una red para comunicarse con sus clientes. Debe haber recursos adecuados para apoyar su vitalidad general. En este artículo, analizaremos varios requisitos de recursos para el sistema de base de datos MongoDB y cómo podemos optimizarlos para obtener el máximo rendimiento.

Requisitos para MongoDB

Además de proporcionar recursos a gran escala, como RAM y CPU, a la base de datos, ajustar el sistema operativo también puede mejorar el rendimiento hasta cierto punto. Las importantes utilidades necesarias para establecer un entorno MongoDB incluyen:

  1. Suficiente espacio en disco
  2. Memoria adecuada
  3. Excelente conexión de red.

El sistema operativo más común para MongoDB es Linux, por lo que veremos cómo optimizarlo para la base de datos.

Condición de reinicio.

Hay muchas técnicas de ajuste que se pueden aplicar a Linux. Sin embargo, dado que algunos cambios se realizan sin reiniciar su host, siempre es una buena práctica reiniciar después de realizar los cambios para asegurarse de que se apliquen. En esta sección, las implementaciones de ajuste que vamos a discutir son:

  1. Pila de red
  2. Demonio NTP
  3. Límite de usuarios de Linux
  4. Sistema de archivos y opciones
  5. Seguridad
  6. Memoria virtual

Pila de red

Como cualquier otro software, una excelente conexión de red proporciona una mejor interfaz de intercambio de solicitudes y respuestas con el servidor. Sin embargo, MongoDB no se ve favorecido con los ajustes de red del kernel predeterminados de Linux. Como su nombre lo indica, esta es una disposición de muchas capas que se pueden clasificar en 3 principales:área de usuario, área de kernel y área de dispositivo. El área de usuario y el área del núcleo se denominan host, ya que la CPU lleva a cabo sus tareas. El área de dispositivos se encarga de enviar y recibir paquetes a través de una interfaz denominada Network Interface Card. Para un mejor rendimiento con el entorno MongoDB, el host debe limitarse a un límite de interfaz de red de 1 Gbps. En este caso, lo que se supone que debemos ajustar es la configuración de rendimiento relativo que incluye:

  1. net.core.somaxconn (aumentar el valor)
  2. net.ipv4.tcp_max_syn_backlog (aumentar el valor)
  3. net.ipv4.tcp_fin_timeout (reducir el valor)
  4. net.ipv4.tcp_keepalive_intvl (reducir el valor)
  5. net.ipv4.tcp_keepalive_time (reducir el valor)

Para hacer que estos cambios sean permanentes, cree un nuevo archivo /etc/sysctl.d/mongodb-sysctl.conf si no existe y agréguele estas líneas.

net.core.somaxconn = 4096
net.ipv4.tcp_fin_timeout = 30
net.ipv4.tcp_keepalive_intvl = 30
net.ipv4.tcp_keepalive_time = 120
net.ipv4.tcp_max_syn_backlog = 4096

Luego ejecute el comando como usuario raíz /sbin/sysctl -p para aplicar los cambios de forma permanente.

Demonio NTP

Network Time Protocol (NTP) es una técnica por la cual un reloj de software de un sistema Linux se sincroniza con servidores de tiempo de Internet. MongoDB, al ser un clúster, depende de la consistencia de tiempo entre los nodos. Por esta razón, es importante que el NTP se ejecute de forma permanente en los hosts de MongoDB. La importancia de la configuración de NTP es garantizar el servicio continuo del servidor durante un tiempo determinado después de una desconexión de la red. De forma predeterminada, el NTP se instala en el lado del cliente, por lo que para que MongoDB instale el NTP en un sistema Linux con sabor a Debian/Ubuntu, simplemente ejecute el comando:

$ sudo apt-get install ntp

Puede visitar ntp.conf para ver la configuración del demonio NTP para diferentes sistemas operativos.

Límite de usuarios de Linux

A veces, una falla del lado del usuario puede terminar afectando todo el servidor y el sistema host. Para evitar esto, el sistema Linux está diseñado para asumir algunos límites de recursos del sistema con respecto a los procesos que se ejecutan por usuario. Siendo esto evidente, será inapropiado implementar MongoDB en tales configuraciones de sistema predeterminadas, ya que requeriría más recursos que la provisión predeterminada. Además, MongoDB suele ser el proceso principal para utilizar el hardware subyacente, por lo tanto, será predominante optimizar el sistema Linux para dicho uso dedicado. La base de datos puede entonces explotar completamente los recursos disponibles.

Sin embargo, no será conveniente deshabilitar estas restricciones de límite o establecerlas en un estado ilimitado. Por ejemplo, si se encuentra con una escasez de almacenamiento de CPU o RAM, una pequeña falla puede convertirse en un gran problema y provocar que otras funciones fallen, por ejemplo, SSH, que es vital para resolver el problema inicial.

Para lograr mejores estimaciones, debe comprender los requisitos de las restricciones a nivel de la base de datos. Por ejemplo, estimar la cantidad de usuarios que realizarán solicitudes a la base de datos y el tiempo de procesamiento. Puede consultar Cosas clave para monitorear para MongoDB. El límite más preferible para max-user-processes y open-files es 64000. Para establecer estos valores, cree un nuevo archivo si no existe como /etc/security/limits.d y agregue estas líneas

mongod       soft        nofile       64000
mongod       hard        nofile       64000
mongod       soft        nproc        64000
mongod       hard        nproc        64000

Para que pueda aplicar estos cambios, reinicie su mongod ya que los cambios se aplican solo a los nuevos shells.

Sistema de archivos y opciones

MongoDB emplea 3 tipos de sistemas de archivos, es decir, ext3, ext4 y XFS para datos de bases de datos en disco. Para el motor de almacenamiento WiredTiger empleado para la versión de MongoDB superior a 3, es mejor usar XFS en lugar de ext4, que se considera que crea algunos problemas de estabilidad, mientras que ext3 también se evita debido a su bajo rendimiento de preasignación. MongoDB no utiliza la técnica del sistema de archivos predeterminado para realizar una actualización de metadatos en tiempo de acceso como otros sistemas. Por lo tanto, puede deshabilitar las actualizaciones de tiempo de acceso para ahorrar en la pequeña cantidad de actividad de E/S del disco utilizada por estas actualizaciones.

Esto se puede hacer agregando un indicador noatime al campo de opciones del sistema de archivos en el archivo etc/fstab para el disco que sirve los datos de MongoDB.

$ grep "/var/lib/mongo" /proc/mounts
/dev/mapper/data-mongodb /var/lib/mongo ext4 rw, seclabel, noatime, data=ordered 0 0

Este cambio solo se puede realizar cuando reinicia o reinicia su MongoDB.

Seguridad

Entre las diversas funciones de seguridad que tiene un sistema Linux, a nivel de kernel se encuentra Linux con seguridad mejorada. Esta es una implementación de control de acceso obligatorio detallado. Proporciona un puente a la política de seguridad para determinar si una operación debe continuar. Desafortunadamente, muchos usuarios de Linux configuran este módulo de control de acceso para que solo avise o lo deshabilitan por completo. Esto a menudo se debe a algunos contratiempos asociados, como un error inesperado de permiso denegado. Este módulo, por mucho que mucha gente lo ignore, juega un papel importante en la reducción de ataques locales al servidor. Con esta función habilitada y los modos correspondientes establecidos en positivo, proporcionará un fondo seguro para su MongoDB. Por lo tanto, debe habilitar el modo SELinux y también aplicar el modo Enforcing especialmente al comienzo de su instalación. Para cambiar el modo SELinux a Enforcing:ejecute el comando

$ sudo setenforce Enforcing

Puede verificar el modo SELinux en ejecución ejecutando

$ sudo getenforce
Varios nueves Conviértase en un administrador de bases de datos de MongoDB - Llevando MongoDB a la producción Obtenga información sobre lo que necesita saber para implementar, monitorear, administrar y escalar MongoDBDescargar gratis

Memoria virtual

Proporción sucia

MongoDB emplea la tecnología de caché para mejorar la obtención rápida de datos. En este caso, se crean páginas sucias y se requerirá algo de memoria para almacenarlas. Por lo tanto, la proporción sucia se convierte en el porcentaje de la memoria total del sistema que puede contener páginas sucias. En la mayoría de los casos, los valores predeterminados están entre (25 - 35)%. Si se supera este valor, las páginas se envían al disco y tienen el efecto de crear una pausa fuerte. Para evitar esto, puede configurar el núcleo para que siempre elimine los datos a través de otra relación denominada relación de fondo sucio cuyo valor oscila entre (10 % y 15 %) en el disco en segundo plano sin crear necesariamente la pausa fuerte.

El objetivo aquí es garantizar un rendimiento de consulta de calidad. Por lo tanto, puede reducir la relación de fondo si su sistema de base de datos requiere una gran cantidad de memoria. Si se permite una pausa fuerte, es posible que termine teniendo datos duplicados o que algunos datos no se registren durante ese tiempo. También puede reducir el tamaño de la memoria caché para evitar que los datos se escriban en el disco en pequeños lotes con frecuencia, lo que puede terminar aumentando el rendimiento del disco. Para verificar el valor que se está ejecutando actualmente, puede ejecutar este comando:

$ sysctl -a | egrep “vm.dirty.*_ratio”

y se te presentará algo como esto.

vm.dirty_background_ratio = 10
vm.dirty_ratio = 20

Intercambio

Es un valor que va de 1 a 100 desde el cual se puede influir en el comportamiento del administrador de memoria virtual. Establecerlo en 100 implica cambiar con fuerza al disco y establecerlo en 0 indica al kernel que cambie solo para evitar problemas de falta de memoria. El rango predeterminado para Linux es 50 - 60, de los cuales no es apropiado para sistemas de bases de datos. En mi propia prueba, establecer el valor entre 0 y 10 es óptimo. Siempre puede establecer este valor en /etc/sysctl.conf

vm.swappiness = 5

Luego puede verificar este valor ejecutando el comando

$ sysctl vm.swappiness

Para aplicar estos cambios, ejecute el comando /sbin/sysctl -p o puede reiniciar su sistema.