sql >> Database teknologi >  >> NoSQL >> MongoDB

Optimering af dit Linux-miljø til MongoDB

MongoDB-ydelse afhænger af, hvordan den bruger de underliggende ressourcer. Den gemmer data på disken såvel som i hukommelsen. Den bruger CPU-ressourcer til at udføre operationer og et netværk til at kommunikere med sine klienter. Der bør være tilstrækkelige ressourcer til at understøtte dens generelle livlighed. I denne artikel vil vi diskutere forskellige ressourcekrav til MongoDB-databasesystemet, og hvordan vi kan optimere dem til maksimal ydeevne.

Krav til MongoDB

Udover at levere ressourcer i stor skala såsom RAM og CPU til databasen, kan tuning af operativsystemet også forbedre ydeevnen til en vis grad. De væsentlige hjælpeprogrammer, der kræves for at etablere et MongoDB-miljø inkluderer:

  1. Nok diskplads
  2. Tilstrækkelig hukommelse
  3. Fremragende netværksforbindelse.

Det mest almindelige operativsystem til MongoDB er Linux, så vi vil se på, hvordan man optimerer det til databasen.

Genstarttilstand.

Der er mange tuning-teknikker, der kan anvendes på Linux. Men da nogle ændringer finder sted uden at genstarte din vært, er det altid en god praksis at genstarte efter at have foretaget ændringer for at sikre, at de anvendes. I dette afsnit er de tuning-implementeringer, vi vil diskutere:

  1. Netværksstak
  2. NTP-dæmon
  3. Linux-brugergrænse
  4. Filsystem og indstillinger
  5. Sikkerhed
  6. Virtuel hukommelse

Netværksstak

Som enhver anden software giver en fremragende netværksforbindelse en bedre udvekslingsgrænseflade for anmodninger og svar med serveren. MongoDB er dog ikke begunstiget med Linux-standardkernenetværksjusteringer. Som navnet viser, er dette et arrangement af mange lag, der kan kategoriseres i 3 hovedlag:Brugerområde, Kernelområde og Enhedsområde. Brugerområdet og kerneområdet omtales som vært, da deres opgaver udføres af CPU'en. Enhedsområdet er ansvarligt for at sende og modtage pakker gennem en grænseflade kaldet Network Interface Card. For bedre ydeevne med MongoDB-miljøet bør værten være begrænset til en grænse på 1 Gbps netværksgrænseflade. I dette tilfælde er det, vi skal indstille, de relativt gennemstrømsindstillinger, som inkluderer:

  1. net.core.somaxconn (øg værdien)
  2. net.ipv4.tcp_max_syn_backlog (øg værdien)
  3. net.ipv4.tcp_fin_timeout (reducer værdien)
  4. net.ipv4.tcp_keepalive_intvl (reducer værdien)
  5. net.ipv4.tcp_keepalive_time (reducer værdien)

For at gøre disse ændringer permanente, skal du oprette en ny fil /etc/sysctl.d/mongodb-sysctl.conf, hvis den ikke findes, og tilføje disse linjer til den.

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

Kør derefter kommandoen som root-bruger /sbin/sysctl -p for at anvende ændringerne permanent.

NTP-dæmon

Network Time Protocol (NTP) er en teknik, hvortil et softwareur i et Linux-system synkroniseres med internettidsservere. MongoDB, som er en klynge, er afhængig af tidskonsistens på tværs af noder. Af denne grund er det vigtigt, at NTP'en køres permanent på MongoDB-værter. Vigtigheden af ​​NTP-konfigurationen er at sikre kontinuerlig servering af serveren til et bestemt tidsrum efter en netværksafbrydelse. Som standard er NTP'en installeret på klientsiden, så for at MongoDB kan installere NTP'en på et Linux-system med Debian/Ubuntu-smag, skal du bare køre kommandoen:

$ sudo apt-get install ntp

Du kan besøge ntp.conf for at se konfigurationen af ​​NTP-dæmonen for forskellige OS.

Linux-brugergrænse

Nogle gange kan en brugersidefejl ende med at påvirke hele serveren og værtssystemet. For at undgå dette er Linux-systemet designet til at påtage sig nogle systemressourcebegrænsninger med hensyn til processer, der udføres pr. bruger. Da dette er indlysende, vil det være upassende at implementere MongoDB på sådanne standardsystemkonfigurationer, da det ville kræve flere ressourcer end standardbestemmelsen. Desuden er MongoDB ofte hovedprocessen til at bruge den underliggende hardware, derfor vil det være fremherskende at optimere Linux-systemet til sådan dedikeret brug. databasen kan derefter fuldt ud udnytte de tilgængelige ressourcer.

Det vil dog ikke være praktisk at deaktivere disse grænsebegrænsninger eller sætte dem til en ubegrænset tilstand. Hvis du for eksempel løber ind i mangel på CPU-lagerplads eller RAM, kan en lille fejl eskalere til et stort problem og resultere i, at andre funktioner fejler - f.eks. SSH, som er afgørende for at løse det indledende problem.

For at opnå bedre estimater bør du forstå begrænsningskravene på databaseniveau. For eksempel estimering af antallet af brugere, der vil fremsætte anmodninger til databasen og behandlingstid. Du kan henvise til de vigtigste ting at overvåge for MongoDB. En mest foretrukken grænse for max-user-processer og åbne-filer er 64000. For at indstille disse værdier skal du oprette en ny fil, hvis den ikke eksisterer som /etc/security/limits.d og tilføje disse linjer

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

For at du kan anvende disse ændringer, genstart din mongod, da ændringerne kun gælder for nye skaller.

Filsystem og indstillinger

MongoDB anvender 3 typer filsystemer, det vil sige ext3, ext4 og XFS til databasedata på disken. For WiredTiger-lagringsmotoren, der anvendes til MongoDB-version større end 3, er XFS bedst brugt i stedet for ext4, som anses for at skabe nogle stabilitetsproblemer, mens ext3 også undgås på grund af dens dårlige præ-allokeringsydelse. MongoDB bruger ikke standardfilsystemteknikken til at udføre en adgangstidsmetadataopdatering som andre systemer. Du kan derfor deaktivere adgangstidsopdateringer for at spare på den lille mængde disk-IO-aktivitet, der bruges af disse opdateringer.

Dette kan gøres ved at tilføje et flag noatime til feltet filsystemindstillinger i filen etc/fstab for disken, der betjener MongoDB-data.

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

Denne ændring kan kun realiseres, når du genstarter eller genstarter din MongoDB.

Sikkerhed

Blandt de adskillige sikkerhedsfunktioner, et Linux-system har, på kerneniveau er det Security-Enhanced Linux. Dette er en implementering af finmasket obligatorisk adgangskontrol. Det giver en bro til sikkerhedspolitikken for at bestemme, om en operation skal fortsætte. Desværre sætter mange Linux-brugere dette adgangskontrolmodul til kun at advare, eller de deaktiverer det fuldstændigt. Dette skyldes ofte nogle tilknyttede tilbageslag, såsom uventet tilladelse nægtet fejl. Dette modul, så meget som mange mennesker ignorerer det, spiller en stor rolle i at reducere lokale angreb på serveren. Med denne funktion aktiveret og korrespondenttilstandene sat til positiv, vil den give en sikker baggrund for din MongoDB. Derfor bør du aktivere SELinux-tilstanden og også anvende håndhævelsestilstanden, især i begyndelsen af ​​din installation. For at ændre SELinux-tilstanden til Enforcing:kør kommandoen

$ sudo setenforce Enforcing

Du kan kontrollere den kørende SELinux-tilstand ved at køre

$ sudo getenforce
Severalnines Bliv en MongoDB DBA - Bring MongoDB to ProductionFå flere oplysninger om, hvad du skal vide for at implementere, overvåge, administrere og skalere MongoDBDownload gratis

Virtuel hukommelse

Snavset forhold

MongoDB anvender cache-teknologien til at forbedre hurtig hentning af data. I dette tilfælde oprettes snavsede sider, og der kræves noget hukommelse for at opbevare dem. Dirty ratio bliver derfor den procentdel af den samlede systemhukommelse, der kan indeholde beskidte sider. I de fleste tilfælde er standardværdierne mellem (25 - 35)%. Hvis denne værdi overskrides, er siderne forpligtet til disk og har en effekt af at skabe en hård pause. For at undgå dette kan du indstille kernen til altid at skylle data gennem et andet forhold kaldet dirty_background_ratio, hvis værdi ligger mellem (10% - 15%) til disk i baggrunden uden nødvendigvis at skabe den hårde pause.

Målet her er at sikre kvalitetsforespørgselsydeevne. Du kan derfor reducere baggrundsforholdet, hvis dit databasesystem vil kræve stor hukommelse. Hvis en hård pause er tilladt, kan du ende med at få dataduplikater, eller nogle data bliver muligvis ikke optaget i løbet af det tidsrum. Du kan også reducere cachestørrelsen for at undgå, at data bliver skrevet til disken i små batches ofte, hvilket kan ende med at øge diskens gennemløb. For at kontrollere den aktuelle værdi kan du køre denne kommando:

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

og du vil blive præsenteret for noget som dette.

vm.dirty_background_ratio = 10
vm.dirty_ratio = 20

Swappiness

Det er en værdi fra 1 til 100, som Virtual Memory Manager-adfærden kan påvirkes fra. At sætte det til 100 indebærer at skifte kraftigt til disk og sætte det til 0, leder kernen til kun at bytte for at undgå problemer med hukommelsen. Standardområdet for Linux er 50 - 60, hvoraf ikke er passende for databasesystemer. I min egen test er det optimalt at sætte værdien mellem 0 og 10. Du kan altid indstille denne værdi i filen /etc/sysctl.conf

vm.swappiness = 5

Du kan derefter kontrollere denne værdi ved at køre kommandoen

$ sysctl vm.swappiness

For at du kan anvende disse ændringer, skal du køre kommandoen /sbin/sysctl -p, eller du kan genstarte dit system.


  1. Kan redis deaktivere svarene for pipelinede kommandoer?

  2. Skalering af Socket.IO til flere Node.js-processer ved hjælp af klynge

  3. Hvordan udføres addToSet ved hjælp af Go officiel driver?

  4. Få den seneste rekord fra mongodb collection