sql >> Database >  >> NoSQL >> MongoDB

Uw Linux-omgeving optimaliseren voor MongoDB

De prestaties van MongoDB zijn afhankelijk van hoe het de onderliggende bronnen gebruikt. Het slaat gegevens op schijf op, maar ook in het geheugen. Het gebruikt CPU-bronnen om bewerkingen uit te voeren en een netwerk om met zijn klanten te communiceren. Er moeten voldoende middelen zijn om de algemene levendigheid te ondersteunen. In dit artikel gaan we verschillende resourcevereisten voor het MongoDB-databasesysteem bespreken en hoe we deze kunnen optimaliseren voor maximale prestaties.

Vereisten voor MongoDB

Afgezien van het verstrekken van grootschalige bronnen zoals RAM en CPU aan de database, kan het afstemmen van het besturingssysteem ook de prestaties tot op zekere hoogte verbeteren. De belangrijke hulpprogramma's die nodig zijn voor het opzetten van een MongoDB-omgeving zijn onder meer:

  1. Voldoende schijfruimte
  2. Voldoende geheugen
  3. Uitstekende netwerkverbinding.

Het meest voorkomende besturingssysteem voor MongoDB is Linux, dus we zullen kijken hoe we het kunnen optimaliseren voor de database.

Opstartvoorwaarde.

Er zijn veel afstemmingstechnieken die op Linux kunnen worden toegepast. Omdat sommige wijzigingen echter plaatsvinden zonder uw host opnieuw op te starten, is het altijd een goede gewoonte om opnieuw op te starten nadat u wijzigingen hebt aangebracht om ervoor te zorgen dat ze worden toegepast. In deze sectie zijn de afstemmingsimplementaties die we gaan bespreken:

  1. Netwerkstapel
  2. NTP-daemon
  3. Linux-gebruikerslimiet
  4. Bestandssysteem en opties
  5. Beveiliging
  6. Virtueel geheugen

Netwerkstack

Net als elke andere software biedt een uitstekende netwerkverbinding een betere uitwisselingsinterface voor verzoeken en antwoorden met de server. MongoDB heeft echter niet de voorkeur met de standaard Linux-kernelnetwerkafstemmingen. Zoals de naam al aangeeft, is dit een rangschikking van vele lagen die kunnen worden onderverdeeld in 3 hoofdlagen:gebruikersgebied, kernelgebied en apparaatgebied. Het gebruikersgebied en het kernelgebied worden host genoemd omdat hun taken worden uitgevoerd door de CPU. Het apparaatgebied is verantwoordelijk voor het verzenden en ontvangen van pakketten via een interface genaamd Network Interface Card. Voor betere prestaties met de MongoDB-omgeving moet de host worden beperkt tot een netwerkinterfacelimiet van 1 Gbps. In dit geval moeten we de relatief doorvoerinstellingen afstemmen, waaronder:

  1. net.core.somaxconn (verhoog de waarde)
  2. net.ipv4.tcp_max_syn_backlog (verhoog de waarde)
  3. net.ipv4.tcp_fin_timeout (verlaag de waarde)
  4. net.ipv4.tcp_keepalive_intvl (verlaag de waarde)
  5. net.ipv4.tcp_keepalive_time (verlaag de waarde)

Om deze wijzigingen permanent te maken, maakt u een nieuw bestand /etc/sysctl.d/mongodb-sysctl.conf aan als het niet bestaat en voegt u deze regels eraan toe.

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

Voer vervolgens de opdracht uit als rootgebruiker /sbin/sysctl -p om de wijzigingen permanent toe te passen.

NTP-daemon

Network Time Protocol (NTP) is een techniek waarbij een softwareklok van een Linux-systeem wordt gesynchroniseerd met internettijdservers. MongoDB, dat een cluster is, is afhankelijk van tijdconsistentie tussen knooppunten. Om deze reden is het belangrijk dat het NTP permanent op MongoDB-hosts wordt uitgevoerd. Het belang van de NTP-configuratie is om ervoor te zorgen dat de server tot een bepaalde tijd blijft werken na een netwerkverbinding. Standaard wordt de NTP aan de clientzijde geïnstalleerd, dus voor MongoDB om de NTP op een Linux-systeem met Debian/Ubuntu-smaak te installeren, voert u gewoon de opdracht uit:

$ sudo apt-get install ntp

U kunt ntp.conf bezoeken om de configuratie van de NTP-daemon voor verschillende besturingssystemen te bekijken.

Linux-gebruikerslimiet

Soms kan een fout aan de kant van de gebruiker gevolgen hebben voor de hele server en het hostsysteem. Om dit te vermijden, is het Linux-systeem ontworpen om bepaalde systeembronnen te beperken met betrekking tot processen die per gebruiker worden uitgevoerd. Aangezien dit duidelijk is, is het ongepast om MongoDB in te zetten op dergelijke standaardsysteemconfiguraties, omdat er meer middelen voor nodig zijn dan de standaardvoorziening. Bovendien is MongoDB vaak het belangrijkste proces om de onderliggende hardware te gebruiken, daarom zal het overheersend zijn om het Linux-systeem te optimaliseren voor dergelijk specifiek gebruik. De database kan dan de beschikbare bronnen volledig benutten.

Het is echter niet handig om deze limietbeperkingen uit te schakelen of in te stellen op een onbeperkte status. Als u bijvoorbeeld een tekort aan CPU-opslag of RAM-geheugen tegenkomt, kan een kleine fout escaleren tot een enorm probleem en ertoe leiden dat andere functies mislukken, bijvoorbeeld SSH, wat van vitaal belang is bij het oplossen van het oorspronkelijke probleem.

Om tot betere schattingen te komen, moet u de beperkingenvereisten op databaseniveau begrijpen. Bijvoorbeeld het inschatten van het aantal gebruikers dat verzoeken zal doen aan de database en de verwerkingstijd. U kunt verwijzen naar Key things to Monitor voor MongoDB. Een meest geprefereerde limiet voor max-user-processen en open-files is 64000. Om deze waarden in te stellen, maakt u een nieuw bestand aan als het niet bestaat als /etc/security/limits.d en voegt u deze regels toe

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

Om deze wijzigingen toe te passen, start u uw mongod opnieuw op, aangezien de wijzigingen alleen van toepassing zijn op nieuwe shells.

Bestandssysteem en opties

MongoDB gebruikt 3 soorten bestandssystemen, namelijk ext3, ext4 en XFS voor databasegegevens op schijf. Voor de WiredTiger-opslagengine die wordt gebruikt voor MongoDB-versies groter dan 3, kan de XFS het beste worden gebruikt in plaats van ext4, wat wordt beschouwd als stabiliteitsproblemen, terwijl ext3 ook wordt vermeden vanwege de slechte pre-toewijzingsprestaties. MongoDB gebruikt niet de standaard bestandssysteemtechniek voor het uitvoeren van een metadata-update voor toegangstijd zoals andere systemen. U kunt daarom toegangstijd-updates uitschakelen om te besparen op de kleine hoeveelheid schijf-IO-activiteit die door deze updates wordt gebruikt.

Dit kan worden gedaan door een vlag noatime toe te voegen aan het veld met bestandssysteemopties in het bestand etc/fstab voor de schijf die MongoDB-gegevens bedient.

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

Deze wijziging kan alleen worden gerealiseerd wanneer u uw MongoDB opnieuw opstart of opnieuw opstart.

Beveiliging

Onder de verschillende beveiligingsfuncties die een Linux-systeem heeft, is op kernelniveau de Security-Enhanced Linux. Dit is een implementatie van fijnmazige Verplichte Toegangscontrole. Het geeft een brug naar het beveiligingsbeleid om te bepalen of een operatie moet doorgaan. Helaas stellen veel Linux-gebruikers deze toegangscontrolemodule in om alleen te waarschuwen of schakelen ze deze volledig uit. Dit is vaak te wijten aan een aantal bijbehorende tegenslagen, zoals een onverwachte fout met geweigerde toestemming. Deze module speelt, net zoals veel mensen hem negeren, een belangrijke rol bij het verminderen van lokale aanvallen op de server. Met deze functie ingeschakeld en de corresponderende modi ingesteld op positief, biedt het een veilige achtergrond voor uw MongoDB. Daarom moet je de SELinux-modus inschakelen en ook de Enforcing-modus toepassen, vooral aan het begin van je installatie. Om de SELinux-modus te veranderen in Enforcing:voer het commando

. uit
$ sudo setenforce Enforcing

U kunt de actieve SELinux-modus controleren door

$ sudo getenforce
Multiplenines Word een MongoDB DBA - MongoDB naar productie brengenLeer over wat u moet weten om MongoDB gratis te implementeren, bewaken, beheren en schalen

Virtueel geheugen

Vuile verhouding

MongoDB maakt gebruik van de cachetechnologie om het snel ophalen van gegevens te verbeteren. In dit geval worden er vuile pagina's gemaakt en is er wat geheugen nodig om ze vast te houden. Vuile verhouding wordt dus het percentage van het totale systeemgeheugen dat vuile pagina's kan bevatten. In de meeste gevallen liggen de standaardwaarden tussen (25 - 35)%. Als deze waarde wordt overschreden, worden de pagina's op schijf vastgelegd en ontstaat er een harde pauze. Om dit te voorkomen, kun je de kernel instellen om gegevens altijd door te spoelen via een andere verhouding die dirty_background_ratio wordt genoemd en waarvan de waarde varieert tussen (10% - 15%) tot schijf op de achtergrond zonder noodzakelijkerwijs een harde pauze te creëren.

Het doel hier is om de queryprestaties van hoge kwaliteit te garanderen. U kunt daarom de achtergrondverhouding verminderen als uw databasesysteem veel geheugen nodig heeft. Als een harde pauze is toegestaan, kan het zijn dat u dubbele gegevens krijgt of dat sommige gegevens gedurende die tijd niet worden geregistreerd. U kunt ook de cachegrootte verkleinen om te voorkomen dat gegevens vaak in kleine batches naar de schijf worden geschreven, waardoor de schijfdoorvoer mogelijk toeneemt. Om de momenteel lopende waarde te controleren, kunt u deze opdracht uitvoeren:

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

en je krijgt zoiets te zien.

vm.dirty_background_ratio = 10
vm.dirty_ratio = 20

Swappiness

Het is een waarde van 1 tot 100 waarvan het gedrag van de Virtual Memory Manager kan worden beïnvloed. Als je het op 100 zet, betekent dit dat je krachtig naar schijf moet wisselen en het op 0 zet, de kernel alleen om te wisselen om problemen met onvoldoende geheugen te vermijden. Het standaardbereik voor Linux is 50 - 60, waarvan niet geschikt voor databasesystemen. In mijn eigen test is het optimaal instellen van de waarde tussen 0 en 10. U kunt deze waarde altijd instellen in de /etc/sysctl.conf

vm.swappiness = 5

U kunt deze waarde dan controleren door het commando

. uit te voeren
$ sysctl vm.swappiness

Om deze wijzigingen toe te passen, voert u de opdracht /sbin/sysctl -p uit of u kunt uw systeem opnieuw opstarten.


  1. Hoe MongoDB rechtstreeks vanuit Ruby opvragen in plaats van Mongoid te gebruiken?

  2. MongoDB $setUnion

  3. Importeer een JSON-bestand in MongoDB met mongoimport

  4. Hoe haal ik de sleutel uit de waarde in het sleutel / waarde-paar in de redis-winkelclient?