sql >> Databasteknik >  >> NoSQL >> MongoDB

Optimera din Linux-miljö för MongoDB

MongoDB-prestanda beror på hur den använder de underliggande resurserna. Den lagrar data på disken, såväl som i minnet. Den använder CPU-resurser för att utföra operationer och ett nätverk för att kommunicera med sina klienter. Det bör finnas tillräckliga resurser för att stödja dess allmänna livlighet. I den här artikeln kommer vi att diskutera olika resurskrav för MongoDB-databassystemet och hur vi kan optimera dem för maximal prestanda.

Krav för MongoDB

Förutom att tillhandahålla storskaliga resurser som RAM och CPU till databasen, kan justering av operativsystemet också förbättra prestandan i viss utsträckning. De betydande verktyg som krävs för att etablera en MongoDB-miljö inkluderar:

  1. Tillräckligt diskutrymme
  2. Tillräckligt minne
  3. Utmärkt nätverksanslutning.

Det vanligaste operativsystemet för MongoDB är Linux, så vi ska titta på hur man optimerar det för databasen.

Omstartsvillkor.

Det finns många inställningstekniker som kan tillämpas på Linux. Men eftersom vissa ändringar sker utan att du startar om din värd, är det alltid bra att starta om efter att du har gjort ändringar för att säkerställa att de tillämpas. I det här avsnittet är inställningsimplementeringarna vi kommer att diskutera:

  1. Nätverksstack
  2. NTP-demon
  3. Linux användargräns
  4. Filsystem och alternativ
  5. Säkerhet
  6. Virtuellt minne

Nätverksstack

Precis som all annan programvara ger en utmärkt nätverksanslutning ett bättre utbytesgränssnitt för förfrågningar och svar med servern. Emellertid är MongoDB inte gynnad med Linux-standardkärnnätverksjusteringar. Som namnet visar är detta ett arrangemang av många lager som kan kategoriseras i tre huvudsakliga:användarområde, kärnområde och enhetsområde. Användarområdet och kärnområdet kallas värd eftersom deras uppgifter utförs av CPU:n. Enhetsområdet ansvarar för att skicka och ta emot paket via ett gränssnitt som kallas Network Interface Card. För bättre prestanda med MongoDB-miljön bör värden begränsas till en gräns för nätverksgränssnittet på 1 Gbps. I det här fallet är det vi ska ställa in de relativt genomströmningsinställningarna som inkluderar:

  1. net.core.somaxconn (öka värdet)
  2. net.ipv4.tcp_max_syn_backlog (öka värdet)
  3. net.ipv4.tcp_fin_timeout (minska värdet)
  4. net.ipv4.tcp_keepalive_intvl (minska värdet)
  5. net.ipv4.tcp_keepalive_time (minska värdet)

För att göra dessa ändringar permanenta, skapa en ny fil /etc/sysctl.d/mongodb-sysctl.conf om den inte finns och lägg till dessa rader till 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 sedan kommandot som root-användare /sbin/sysctl -p för att tillämpa ändringarna permanent.

NTP Daemon

Network Time Protocol (NTP) är en teknik för vilken en mjukvaruklocka i ett Linux-system synkroniseras med internettidsservrar. MongoDB, som är ett kluster, är beroende av tidskonsistens över noder. Av denna anledning är det viktigt att NTP:n körs permanent på MongoDB-värdar. Vikten av NTP-konfigurationen är att säkerställa kontinuerlig servering av servern till en viss tid efter en nätverksavbrott. Som standard är NTP installerad på klientsidan så för att MongoDB ska installera NTP på ett Linux-system med Debian/Ubuntu-smak, kör bara kommandot:

$ sudo apt-get install ntp

Du kan besöka ntp.conf för att se konfigurationen av NTP-demonen för olika operativsystem.

Linux användargräns

Ibland kan ett fel på användarsidan i slutändan påverka hela servern och värdsystemet. För att undvika detta är Linux-systemet utformat för att överta vissa systemresursbegränsningar när det gäller processer som körs per användare. Eftersom detta är uppenbart, kommer det att vara olämpligt att distribuera MongoDB på sådana standardsystemkonfigurationer eftersom det skulle kräva mer resurser än standardbestämmelsen. Dessutom är MongoDB ofta huvudprocessen för att använda den underliggande hårdvaran, därför kommer det att vara övervägande att optimera Linux-systemet för sådan dedikerad användning. Databasen kan sedan utnyttja de tillgängliga resurserna fullt ut.

Det kommer dock inte att vara praktiskt att inaktivera dessa begränsningsbegränsningar eller ställa in dem på ett obegränsat tillstånd. Om du till exempel stöter på en brist på CPU-lagring eller RAM-minne kan ett litet fel eskalera till ett stort problem och leda till att andra funktioner misslyckas - t.ex. SSH som är avgörande för att lösa det initiala problemet.

För att uppnå bättre uppskattningar bör du förstå kraven på begränsningar på databasnivå. Till exempel att uppskatta antalet användare som kommer att göra förfrågningar till databasen och bearbetningstid. Du kan hänvisa till Viktiga saker att övervaka för MongoDB. En mest föredragen gräns för max-user-processer och öppna-filer är 64000. För att ställa in dessa värden skapa en ny fil om den inte finns som /etc/security/limits.d och lägg till dessa rader

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

För att du ska kunna tillämpa dessa ändringar, starta om din mongod eftersom ändringarna endast gäller nya skal.

Filsystem och alternativ

MongoDB använder tre typer av filsystem, ext3, ext4 och XFS för databasdata på disken. För WiredTiger-lagringsmotorn som används för MongoDB version större än 3, är XFS bäst att använda snarare än ext4 vilket anses skapa vissa stabilitetsproblem medan ext3 också undviks på grund av dess dåliga pre-allokeringsprestanda. MongoDB använder inte standardfilsystemtekniken för att utföra en åtkomsttidsmetadatauppdatering som andra system. Du kan därför inaktivera åtkomsttidsuppdateringar för att spara på den lilla mängd disk-IO-aktivitet som används av dessa uppdateringar.

Detta kan göras genom att lägga till en flagga noatime i filsystemets alternativfält i filen etc/fstab för disken som betjänar MongoDB-data.

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

Denna ändring kan bara realiseras när du startar om eller startar om din MongoDB.

Säkerhet

Bland de flera säkerhetsfunktionerna ett Linux-system har, på kärnnivå är det säkerhetsförbättrade Linux. Detta är en implementering av finkornig obligatorisk åtkomstkontroll. Det ger en brygga till säkerhetspolicyn för att avgöra om en operation ska fortsätta. Tyvärr ställer många Linux-användare in denna åtkomstkontrollmodul för att bara varna eller så inaktiverar de den helt. Detta beror ofta på vissa associerade bakslag som oväntat fel som nekats tillstånd. Denna modul, så mycket som många ignorerar den, spelar en viktig roll för att minska lokala attacker mot servern. Med den här funktionen aktiverad och korrespondentlägena inställda på positiva, kommer den att ge en säker bakgrund för din MongoDB. Därför bör du aktivera SELinux-läget och även tillämpa Enforcing-läget speciellt i början av din installation. För att ändra SELinux-läget till Enforcing:kör kommandot

$ sudo setenforce Enforcing

Du kan kontrollera det körande SELinux-läget genom att köra

$ sudo getenforce
Severalnines Become a MongoDB DBA - Bringing MongoDB to ProductionLäs om vad du behöver veta för att distribuera, övervaka, hantera och skala MongoDBDownload gratis

Virtuellt minne

Smutsförhållande

MongoDB använder cache-tekniken för att förbättra snabb hämtning av data. I det här fallet skapas smutsiga sidor och en del minne kommer att krävas för att hålla dem. Dirty ratio blir därför den procentandel av det totala systemminnet som kan hålla smutsiga sidor. I de flesta fall är standardvärdena mellan (25 - 35)%. Om detta värde överträffas, är sidorna anslutna till disk och har en effekt av att skapa en hård paus. För att undvika detta kan du ställa in kärnan att alltid spola data genom ett annat förhållande som kallas dirty_background_ratio vars värde sträcker sig mellan (10% - 15%) till disk i bakgrunden utan att nödvändigtvis skapa den hårda pausen.

Syftet här är att säkerställa kvalitetsfrågeprestanda. Du kan därför minska bakgrundsförhållandet om ditt databassystem kräver stort minne. Om en hård paus tillåts kan du få datadubbletter eller så kan vissa data misslyckas med att registreras under den tiden. Du kan också minska cachestorleken för att undvika att data ofta skrivs till disken i små partier som kan leda till att diskens genomströmning ökar. För att kontrollera det aktuella värdet kan du köra detta kommando:

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

och du kommer att presenteras för något sånt här.

vm.dirty_background_ratio = 10
vm.dirty_ratio = 20

Swappiness

Det är ett värde som sträcker sig från 1 till 100 som det virtuella minneshanterarens beteende kan påverkas från. Att ställa in den till 100 innebär att man måste byta kraftfullt till disken och sätta den till 0 dirigerar kärnan att byta endast för att undvika problem med minnet. Standardintervallet för Linux är 50 - 60, varav inte är lämpligt för databassystem. I mitt eget test är det optimalt att sätta värdet mellan 0 till 10. Du kan alltid ställa in detta värde i /etc/sysctl.conf

vm.swappiness = 5

Du kan sedan kontrollera detta värde genom att köra kommandot

$ sysctl vm.swappiness

För att du ska kunna tillämpa dessa ändringar kör kommandot /sbin/sysctl -p eller så kan du starta om ditt system.


  1. Om MongoDB

  2. redis lagra 128 bitars nummer

  3. MongoDB Correct Schema för aggregerad data

  4. Kapslade objekt i mongoosescheman