Les performances de MongoDB dépendent de la manière dont il utilise les ressources sous-jacentes. Il stocke les données sur disque, ainsi qu'en mémoire. Il utilise des ressources CPU pour effectuer des opérations et un réseau pour communiquer avec ses clients. Il devrait y avoir des ressources adéquates pour soutenir sa vivacité générale. Dans cet article, nous allons discuter des diverses exigences en matière de ressources pour le système de base de données MongoDB et comment nous pouvons les optimiser pour des performances maximales.
Exigences pour MongoDB
En plus de fournir des ressources à grande échelle telles que la RAM et le processeur à la base de données, le réglage du système d'exploitation peut également améliorer les performances dans une certaine mesure. Les principaux utilitaires requis pour établir un environnement MongoDB incluent :
- Espace disque suffisant
- Mémoire adéquate
- Excellente connexion réseau.
Le système d'exploitation le plus courant pour MongoDB est Linux, nous allons donc voir comment l'optimiser pour la base de données.
Condition de redémarrage.
Il existe de nombreuses techniques de réglage qui peuvent être appliquées à Linux. Cependant, comme certaines modifications ont lieu sans redémarrer votre hôte, il est toujours recommandé de redémarrer après avoir apporté des modifications pour s'assurer qu'elles sont appliquées. Dans cette section, les implémentations de réglage dont nous allons discuter sont :
- Pile réseau
- Démon NTP
- Limite d'utilisateurs Linux
- Système de fichiers et options
- Sécurité
- Mémoire virtuelle
Pile réseau
Comme tout autre logiciel, une excellente connexion réseau offre une meilleure interface d'échange de requêtes et de réponses avec le serveur. Cependant, MongoDB n'est pas favorisé par les réglages réseau par défaut du noyau Linux. Comme son nom l'indique, il s'agit d'un agencement de plusieurs couches qui peuvent être classées en 3 principales :la zone utilisateur, la zone noyau et la zone périphérique. La zone utilisateur et la zone noyau sont appelées hôte car leurs tâches sont exécutées par le CPU. La zone de l'appareil est responsable de l'envoi et de la réception des paquets via une interface appelée carte d'interface réseau. Pour de meilleures performances avec l'environnement MongoDB, l'hôte doit être limité à une limite d'interface réseau de 1 Gbit/s. Dans ce cas, ce que nous sommes censés régler, ce sont les paramètres de débit relatif qui incluent :
- net.core.somaxconn (augmenter la valeur)
- net.ipv4.tcp_max_syn_backlog (augmenter la valeur)
- net.ipv4.tcp_fin_timeout (réduire la valeur)
- net.ipv4.tcp_keepalive_intvl (réduire la valeur)
- net.ipv4.tcp_keepalive_time (réduire la valeur)
Pour rendre ces modifications permanentes, créez un nouveau fichier /etc/sysctl.d/mongodb-sysctl.conf s'il n'existe pas et ajoutez-y ces lignes.
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
Exécutez ensuite la commande en tant qu'utilisateur root /sbin/sysctl -p afin d'appliquer les modifications de manière permanente.
Démon NTP
Network Time Protocol (NTP) est une technique pour laquelle une horloge logicielle d'un système Linux est synchronisée avec des serveurs de temps Internet. MongoDB, étant un cluster, dépend de la cohérence temporelle entre les nœuds. Pour cette raison, il est important que le NTP soit exécuté en permanence sur les hôtes MongoDB. L'importance de la configuration NTP est d'assurer un service continu du serveur pendant un certain temps après une déconnexion du réseau. Par défaut, le NTP est installé côté client, donc pour que MongoDB installe le NTP sur un système Linux avec la saveur Debian/Ubuntu, il suffit d'exécuter la commande :
$ sudo apt-get install ntp
Vous pouvez visiter ntp.conf pour voir la configuration du démon NTP pour différents systèmes d'exploitation.
Limite d'utilisateurs Linux
Parfois, une erreur côté utilisateur peut finir par avoir un impact sur l'ensemble du serveur et du système hôte. Pour éviter cela, le système Linux est conçu pour appliquer certaines limites de ressources système concernant les processus exécutés par utilisateur. Ceci étant évident, il sera inapproprié de déployer MongoDB sur de telles configurations système par défaut car cela nécessiterait plus de ressources que la disposition par défaut. En outre, MongoDB est souvent le processus principal pour utiliser le matériel sous-jacent, par conséquent, il sera prédominant d'optimiser le système Linux pour une telle utilisation dédiée. La base de données peut alors exploiter pleinement les ressources disponibles.
Cependant, il ne sera pas pratique de désactiver ces contraintes de limite ou de les définir sur un état illimité. Par exemple, si vous rencontrez un manque de mémoire CPU ou de RAM, une petite erreur peut dégénérer en un énorme problème et entraîner l'échec d'autres fonctionnalités - par exemple, SSH, qui est essentiel pour résoudre le problème initial.
Afin d'obtenir de meilleures estimations, vous devez comprendre les contraintes requises au niveau de la base de données. Par exemple, estimer le nombre d'utilisateurs qui feront des requêtes à la base de données et le temps de traitement. Vous pouvez vous référer aux éléments clés à surveiller pour MongoDB. Une limite préférable pour max-user-processes et open-files est 64000. Pour définir ces valeurs, créez un nouveau fichier s'il n'existe pas sous /etc/security/limits.d et ajoutez ces lignes
mongod soft nofile 64000
mongod hard nofile 64000
mongod soft nproc 64000
mongod hard nproc 64000
Pour que vous puissiez appliquer ces modifications, redémarrez votre mongod car les modifications ne s'appliquent qu'aux nouveaux shells.
Système de fichiers et options
MongoDB utilise 3 types de systèmes de fichiers, à savoir ext3, ext4 et XFS pour les données de base de données sur disque. Pour le moteur de stockage WiredTiger utilisé pour la version MongoDB supérieure à 3, il est préférable d'utiliser XFS plutôt que ext4, qui est considéré comme créant des problèmes de stabilité, tandis que ext3 est également évité en raison de ses mauvaises performances de pré-allocation. MongoDB n'utilise pas la technique de système de fichiers par défaut consistant à effectuer une mise à jour des métadonnées de temps d'accès comme les autres systèmes. Vous pouvez donc désactiver les mises à jour de temps d'accès pour économiser sur la petite quantité d'activité d'E/S de disque utilisée par ces mises à jour.
Cela peut être fait en ajoutant un indicateur noatime au champ des options du système de fichiers dans le fichier etc/fstab pour le disque servant les données MongoDB.
$ grep "/var/lib/mongo" /proc/mounts
/dev/mapper/data-mongodb /var/lib/mongo ext4 rw, seclabel, noatime, data=ordered 0 0
Ce changement ne peut être réalisé que lorsque vous redémarrez ou redémarrez votre MongoDB.
Sécurité
Parmi les nombreuses fonctionnalités de sécurité d'un système Linux, au niveau du noyau se trouve Linux à sécurité améliorée. Il s'agit d'une implémentation du contrôle d'accès obligatoire à grain fin. Il fournit un pont vers la politique de sécurité pour déterminer si une opération doit se poursuivre. Malheureusement, de nombreux utilisateurs de Linux configurent ce module de contrôle d'accès pour avertir uniquement ou le désactivent totalement. Cela est souvent dû à certains revers associés tels qu'une erreur inattendue d'autorisation refusée. Ce module, bien que beaucoup de gens l'ignorent, joue un rôle majeur dans la réduction des attaques locales sur le serveur. Avec cette fonctionnalité activée et les modes correspondants définis sur positif, cela fournira un arrière-plan sécurisé pour votre MongoDB. Par conséquent, vous devez activer le mode SELinux et également appliquer le mode Enforcing, en particulier au début de votre installation. Pour changer le mode SELinux en Enforcing :exécutez la commande
$ sudo setenforce Enforcing
Vous pouvez vérifier le mode SELinux en cours d'exécution en exécutant
$ sudo getenforce
Plusieursnines Devenez un administrateur de base de données MongoDB – Amener MongoDB en productionDécouvrez ce que vous devez savoir pour déployer, surveiller, gérer et faire évoluer MongoDBDélécharger gratuitement Mémoire virtuelle
Taux de saleté
MongoDB utilise la technologie de cache pour améliorer la récupération rapide des données. Dans ce cas, des pages modifiées sont créées et de la mémoire sera nécessaire pour les contenir. Le taux de saleté devient donc le pourcentage de la mémoire système totale qui peut contenir des pages sales. Dans la plupart des cas, les valeurs par défaut se situent entre (25 et 35) %. Si cette valeur est dépassée, les pages sont validées sur le disque et ont pour effet de créer une pause matérielle. Pour éviter cela, vous pouvez configurer le noyau pour qu'il vide toujours les données via un autre ratio appelé dirty_background_ratio dont la valeur est comprise entre (10 % et 15 %) sur le disque en arrière-plan sans nécessairement créer de pause dure.
L'objectif ici est d'assurer des performances de requête de qualité. Vous pouvez donc réduire le taux d'arrière-plan si votre système de base de données nécessite une grande quantité de mémoire. Si une pause dure est autorisée, vous risquez d'avoir des doublons de données ou certaines données peuvent ne pas être enregistrées pendant cette période. Vous pouvez également réduire la taille du cache pour éviter que les données ne soient fréquemment écrites sur le disque par petits lots, ce qui peut finir par augmenter le débit du disque. Pour vérifier la valeur en cours d'exécution, vous pouvez exécuter cette commande :
$ sysctl -a | egrep “vm.dirty.*_ratio”
et vous serez présenté avec quelque chose comme ça.
vm.dirty_background_ratio = 10
vm.dirty_ratio = 20
Échange
Il s'agit d'une valeur comprise entre 1 et 100 à partir de laquelle le comportement du gestionnaire de mémoire virtuelle peut être influencé. Le régler sur 100 implique de permuter avec force sur le disque et le régler sur 0 ordonne au noyau de permuter uniquement pour éviter les problèmes de mémoire insuffisante. La plage par défaut pour Linux est de 50 à 60, ce qui n'est pas approprié pour les systèmes de base de données. Dans mon propre test, définir la valeur entre 0 et 10 est optimal. Vous pouvez toujours définir cette valeur dans le fichier /etc/sysctl.conf
vm.swappiness = 5
Vous pouvez ensuite vérifier cette valeur en exécutant la commande
$ sysctl vm.swappiness
Pour que vous puissiez appliquer ces modifications, exécutez la commande /sbin/sysctl -p ou vous pouvez redémarrer votre système.