MongoDB
 sql >> Datenbank >  >> NoSQL >> MongoDB

Optimierung Ihrer Linux-Umgebung für MongoDB

Die Leistung von MongoDB hängt davon ab, wie die zugrunde liegenden Ressourcen genutzt werden. Es speichert Daten sowohl auf der Festplatte als auch im Arbeitsspeicher. Es verwendet CPU-Ressourcen, um Operationen auszuführen, und ein Netzwerk, um mit seinen Clients zu kommunizieren. Es sollten angemessene Ressourcen vorhanden sein, um seine allgemeine Lebendigkeit zu unterstützen. In diesem Artikel besprechen wir verschiedene Ressourcenanforderungen für das MongoDB-Datenbanksystem und wie wir sie für maximale Leistung optimieren können.

Anforderungen für MongoDB

Neben der Bereitstellung umfangreicher Ressourcen wie RAM und CPU für die Datenbank kann die Optimierung des Betriebssystems auch die Leistung bis zu einem gewissen Grad verbessern. Zu den wesentlichen Dienstprogrammen, die zum Einrichten einer MongoDB-Umgebung erforderlich sind, gehören:

  1. Genügend Speicherplatz
  2. Ausreichender Arbeitsspeicher
  3. Ausgezeichnete Netzwerkverbindung.

Das gebräuchlichste Betriebssystem für MongoDB ist Linux, also schauen wir uns an, wie es für die Datenbank optimiert werden kann.

Neustartbedingung.

Es gibt viele Tuning-Techniken, die auf Linux angewendet werden können. Da einige Änderungen jedoch ohne Neustart Ihres Hosts vorgenommen werden, empfiehlt es sich immer, nach Änderungen neu zu starten, um sicherzustellen, dass sie angewendet werden. In diesem Abschnitt werden wir folgende Tuning-Implementierungen besprechen:

  1. Netzwerkstapel
  2. NTP-Daemon
  3. Linux-Benutzerlimit
  4. Dateisystem und Optionen
  5. Sicherheit
  6. Virtueller Speicher

Netzwerkstapel

Wie jede andere Software bietet eine hervorragende Netzwerkverbindung eine bessere Austauschschnittstelle für Anfragen und Antworten mit dem Server. MongoDB wird jedoch bei den Standard-Kernel-Netzwerkeinstellungen von Linux nicht bevorzugt. Wie der Name schon sagt, handelt es sich hierbei um eine Anordnung vieler Ebenen, die in drei Hauptebenen eingeteilt werden können:Benutzerbereich, Kernelbereich und Gerätebereich. Der Benutzerbereich und der Kernelbereich werden als Host bezeichnet, da ihre Aufgaben von der CPU ausgeführt werden. Der Gerätebereich ist für das Senden und Empfangen von Paketen über eine Schnittstelle namens Network Interface Card verantwortlich. Für eine bessere Leistung mit der MongoDB-Umgebung sollte der Host auf ein Netzwerkschnittstellenlimit von 1 Gbit/s beschränkt werden. In diesem Fall sollten wir die Einstellungen für den relativen Durchsatz optimieren, darunter:

  1. net.core.somaxconn (Wert erhöhen)
  2. net.ipv4.tcp_max_syn_backlog (Wert erhöhen)
  3. net.ipv4.tcp_fin_timeout (Wert reduzieren)
  4. net.ipv4.tcp_keepalive_intvl (Wert reduzieren)
  5. net.ipv4.tcp_keepalive_time (Wert reduzieren)

Um diese Änderungen dauerhaft zu machen, erstellen Sie eine neue Datei /etc/sysctl.d/mongodb-sysctl.conf, falls sie nicht existiert, und fügen Sie diese Zeilen hinzu.

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

Führen Sie dann den Befehl als Root-Benutzer /sbin/sysctl -p aus, um die Änderungen dauerhaft zu übernehmen.

NTP-Daemon

Network Time Protocol (NTP) ist eine Technik, bei der eine Software-Uhr eines Linux-Systems mit Internet-Zeitservern synchronisiert wird. Da MongoDB ein Cluster ist, ist die Zeitkonsistenz über Knoten hinweg abhängig. Aus diesem Grund ist es wichtig, dass das NTP dauerhaft auf MongoDB-Hosts ausgeführt wird. Die Bedeutung der NTP-Konfiguration besteht darin, sicherzustellen, dass der Server bis zu einem festgelegten Zeitpunkt nach einer Netzwerktrennung kontinuierlich bedient wird. Standardmäßig wird das NTP auf der Client-Seite installiert, damit MongoDB das NTP auf einem Linux-System mit Debian/Ubuntu-Geschmack installieren kann, führen Sie einfach den folgenden Befehl aus:

$ sudo apt-get install ntp

Sie können ntp.conf besuchen, um die Konfiguration des NTP-Daemons für verschiedene Betriebssysteme anzuzeigen.

Linux-Benutzerlimit

Manchmal kann sich ein benutzerseitiger Fehler auf den gesamten Server und das Hostsystem auswirken. Um dies zu vermeiden, ist das Linux-System so konzipiert, dass es einige Systemressourcenbeschränkungen in Bezug auf Prozesse aufnimmt, die auf Benutzerbasis ausgeführt werden. Da dies offensichtlich ist, ist es unangemessen, MongoDB auf solchen Standardsystemkonfigurationen bereitzustellen, da dies mehr Ressourcen erfordern würde als die Standardbereitstellung. Außerdem ist MongoDB oft der Hauptprozess zur Nutzung der zugrunde liegenden Hardware, daher wird es vorherrschend sein, das Linux-System für eine solche dedizierte Nutzung zu optimieren. Die Datenbank kann dann die verfügbaren Ressourcen voll ausschöpfen.

Es ist jedoch nicht bequem, diese Begrenzungsbeschränkungen zu deaktivieren oder sie auf einen unbegrenzten Zustand zu setzen. Wenn Sie beispielsweise auf einen Mangel an CPU-Speicher oder RAM stoßen, kann ein kleiner Fehler zu einem großen Problem eskalieren und dazu führen, dass andere Funktionen ausfallen - z. B. SSH, das für die Lösung des ursprünglichen Problems von entscheidender Bedeutung ist.

Um bessere Schätzungen zu erzielen, sollten Sie die Beschränkungsanforderungen auf Datenbankebene verstehen. Schätzen Sie beispielsweise die Anzahl der Benutzer, die Anfragen an die Datenbank stellen, und die Verarbeitungszeit. Weitere Informationen finden Sie unter Key things to Monitor for MongoDB. Ein bevorzugtes Limit für max-user-processes und open-files ist 64000. Um diese Werte festzulegen, erstellen Sie eine neue Datei, wenn sie nicht existiert, als /etc/security/limits.d und fügen Sie diese Zeilen hinzu

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

Damit Sie diese Änderungen anwenden können, starten Sie Ihren Mongod neu, da die Änderungen nur für neue Shells gelten.

Dateisystem und Optionen

MongoDB verwendet 3 Arten von Dateisystemen, nämlich ext3, ext4 und XFS für Datenbankdaten auf der Festplatte. Für die WiredTiger-Speicher-Engine, die für MongoDB-Versionen größer als 3 verwendet wird, wird XFS am besten anstelle von ext4 verwendet, was einige Stabilitätsprobleme verursacht, während ext3 aufgrund seiner schlechten Vorzuweisungsleistung ebenfalls vermieden wird. MongoDB verwendet nicht wie andere Systeme die standardmäßige Dateisystemtechnik zur Durchführung einer Metadatenaktualisierung zur Zugriffszeit. Sie können daher Zugriffszeitaktualisierungen deaktivieren, um die geringe Menge an Festplatten-E/A-Aktivität zu sparen, die von diesen Aktualisierungen verwendet wird.

Dies kann durch Hinzufügen eines Flags noatime zum Dateisystem-Optionsfeld in der Datei etc/fstab für die Festplatte erfolgen, die MongoDB-Daten bereitstellt.

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

Diese Änderung kann nur realisiert werden, wenn Sie neu starten oder Ihre MongoDB neu starten.

Sicherheit

Unter den verschiedenen Sicherheitsfunktionen, die ein Linux-System hat, befindet sich auf Kernel-Ebene das Security-Enhanced Linux. Dies ist eine Implementierung einer feinkörnigen Mandatory Access Control. Es stellt eine Brücke zur Sicherheitsrichtlinie bereit, um zu bestimmen, ob eine Operation fortgesetzt werden soll. Leider stellen viele Linux-Benutzer dieses Zugriffskontrollmodul so ein, dass es nur warnt, oder deaktivieren es vollständig. Dies ist häufig auf einige damit verbundene Rückschläge zurückzuführen, z. B. auf einen unerwarteten Fehler, dass die Berechtigung verweigert wurde. Dieses Modul spielt eine wichtige Rolle bei der Reduzierung lokaler Angriffe auf den Server, auch wenn es von vielen Leuten ignoriert wird. Wenn diese Funktion aktiviert und die entsprechenden Modi auf positiv eingestellt sind, bietet sie einen sicheren Hintergrund für Ihre MongoDB. Daher sollten Sie besonders zu Beginn Ihrer Installation den SELinux-Modus aktivieren und auch den Enforcing-Modus anwenden. So ändern Sie den SELinux-Modus in Enforcing:Führen Sie den Befehl

aus
$ sudo setenforce Enforcing

Sie können den laufenden SELinux-Modus überprüfen, indem Sie

ausführen
$ sudo getenforce
Multiplenines Become a MongoDB DBA – Bringing MongoDB to ProductionErfahren Sie, was Sie wissen müssen, um MongoDBDownload for Free bereitzustellen, zu überwachen, zu verwalten und zu skalieren

Virtueller Speicher

Dirty-Verhältnis

MongoDB verwendet die Cache-Technologie, um das schnelle Abrufen von Daten zu verbessern. In diesem Fall werden schmutzige Seiten erstellt und es wird etwas Speicher benötigt, um sie zu halten. Die Dirty Ratio wird daher zum Prozentsatz des gesamten Systemspeichers, der Dirty Pages aufnehmen kann. In den meisten Fällen liegen die Standardwerte zwischen (25 - 35) %. Wenn dieser Wert überschritten wird, werden die Seiten auf die Festplatte geschrieben und bewirken eine harte Pause. Um dies zu vermeiden, können Sie den Kernel so einstellen, dass er Daten immer durch ein anderes Verhältnis spült, das als dirty_background_ratio bezeichnet wird und dessen Wert zwischen (10 % und 15 %) liegt, auf die Festplatte im Hintergrund, ohne unbedingt eine harte Pause zu erzeugen.

Das Ziel hier ist es, eine qualitativ hochwertige Abfrageleistung sicherzustellen. Sie können daher das Hintergrundverhältnis reduzieren, wenn Ihr Datenbanksystem viel Speicher benötigt. Wenn eine harte Pause zulässig ist, können Daten dupliziert werden oder einige Daten werden während dieser Zeit möglicherweise nicht aufgezeichnet. Sie können auch die Cache-Größe reduzieren, um zu vermeiden, dass Daten häufig in kleinen Stapeln auf die Festplatte geschrieben werden, was den Festplattendurchsatz erhöhen kann. Um den aktuell laufenden Wert zu überprüfen, können Sie diesen Befehl ausführen:

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

und Ihnen wird so etwas präsentiert.

vm.dirty_background_ratio = 10
vm.dirty_ratio = 20

Wechsel

Es ist ein Wert im Bereich von 1 bis 100, für den das Verhalten des Virtual Memory Manager beeinflusst werden kann. Wenn Sie es auf 100 setzen, müssen Sie zwangsweise auf die Festplatte wechseln, und wenn Sie es auf 0 setzen, wird der Kernel angewiesen, nur zu wechseln, um Probleme mit unzureichendem Arbeitsspeicher zu vermeiden. Der Standardbereich für Linux ist 50 - 60, wovon für Datenbanksysteme nicht geeignet ist. In meinem eigenen Test ist die Einstellung des Wertes zwischen 0 bis 10 optimal. Sie können diesen Wert immer in der /etc/sysctl.conf

setzen
vm.swappiness = 5

Sie können diesen Wert dann überprüfen, indem Sie den Befehl

ausführen
$ sysctl vm.swappiness

Um diese Änderungen anzuwenden, führen Sie den Befehl /sbin/sysctl -p aus oder Sie können Ihr System neu starten.