MongoDB drift- och utvecklingschecklistor är avsedda att hjälpa databasadministratörer att undvika att stöta på problem i MongoDB produktionsmiljö. En utvecklingschecklista bör ta upp frågor som...
- Schemadesign
- Data hållbarhet
- replikering
- Drives
- Sharding
En operationschecklista, å andra sidan, adresserar...
- replikering
- Filsystem
- Skärning
- Hårdvara
- Journalist (WiredTiger Storage Engine)
- Operativsystemkonfigurationer
- Implementering till molnhårdvara
- Övervakning
- Säkerhetskopiering och lastbalansering
Innan du startar ett projekt är det tillrådligt att arbeta med drift- och utvecklingschecklistan för att möjliggöra smidig drift av MongoDB i produktion. Den här artikeln förklarar checklistan för drift och utveckling innan MongoDB implementeras.
MongoDB driftchecklista
replikering
Alla replikmedlemsuppsättningar som inte är dolda bör tillverkas identiskt med avseende på disk, RAM, nätverksinstallation och CPU.
Oplogstorlek bör konfigureras korrekt för att tillgodose operativa behov så att:
- För att undvika behovet av en fullständig omsynkronisering bör applikationsfönstret för replikoplog täcka det vanliga driftstoppet och underhållsfönstret.
- För att återställa en replikuppsättningsmedlem bör replikens oploggningsfönster alltid täcka den tid som behövs.
Produktionsuppsättningen bör minst innehålla tre databärande noder som körs med journalisering aktiverad. Skriver bör dessutom utfärdas med w:"majority" write concern i syfte att säkerställa datatillgänglighet och hållbarhet.
Installationen bör innehålla ett udda antal röstande medlemmar för att underlätta röstningsprocessen närhelst den primära noden i klustret misslyckas.
Istället för att använda IP-adresser som kan kräva att man ändrar konfigurationer på grund av ändrad IP, rekommenderas användning av logiska DNS-värdnamn.
Se till att mongod-instanser har 0 eller 1 röster.
Alla Mongod-instanser bör vara helt och dubbelriktat anslutna så att det är lätt att kommunicera data mellan de inblandade noderna.
Journalist
Detta är en strategi för att logga i förväg på diskjournalfiler som används för att säkerställa datahållbarhet i händelse av fel. Alla instanser bör ha journalföring aktiverat av denna anledning, särskilt när man hanterar skrivintensiva arbetsbelastningar.
Tänk dock på att detta påverkar förstärkningar i ögonblicksbildsstil eftersom de poster som utgör databasens tillstånd kommer att uppehålla sig på partitionerade volymer.
Filsystem
Använd inte News File System-enheter (NFS) för dbPath. NFS-enheter kan möjligen resultera i en destabiliserad prestanda. VMware virtuella enheter rekommenderas för användning av VMware-användare.
Se till att dina diskpartitioner är justerade med dina RAIDON-konfigurationer.
För Linux/Unix-användare rekommenderas användning av XFS. XFS är känt för att prestera bättre med MongoDB.
För användare av Windows-operativsystem rekommenderas filsystemet NTFS. Du bör undvika att använda något FAT-filsystem.
Distribution till molnhårdvara
Windows Azure:Ändra TCP Keepalive (tcp_keepalive_time) till 100-120. Tidsgränsen för TCP för att sitta ur växeln på Azure-stackbalanseraren är också måttlig för MongoDB:s associationspoolningsbeteende
Använd MongoDB 2.6.4 eller nyare versioner på ramverk med lagring med hög latens, såsom Windows Azure, eftersom dessa versioner innehåller exekveringsförbättringar för dessa ramverk.
Skärning
Placera dina konfigurationsservrar på dedikerad hårdvara för perfekt körning i expansiva kluster.
Se till att hårdvaran har tillräckligt med RAM-minne för att hålla informationsposterna helt och hållet i minnet och har avsatt lagring.
Distribuera Mongos-routrar i enlighet med riktlinjerna för Generation Setup.
Synkronisera klockorna på alla komponenter i ditt sönderdelade kluster genom att använda NTP.
Säkerställ ett fullständigt dubbelriktat nätverk mellan mongos, mongod och config-servrar.
Använd CNAMEs för att känna igen dina konfigurationsservrar till klustret så att du kan byta namn på och numrera om dina konfigurationsservrar utan driftstopp.
Övervakning
Du kan använda verktyg som MongoDB Cloud Manager, ClusterControl eller ett annat övervakningsramverk för att screena nyckeldatabasstatistik och ställa in larm. Inkludera varningar för mätvärdena:
- Köer
- Replikeringsoploggfönster
- Påståenden
- Sidfel
- replikeringsfördröjning
Övervaka maskinvarustatistik för dina servrar. Var särskilt uppmärksam på tillgängligt diskutrymme, diskanvändning, CPU
Hårdvara
Använd RAID10- och SSD-enheter för perfekt prestanda.
SAN och virtualisering:
Se till att var och en av mongod-instanserna har tillhandahållit IOPS för sin dbPath, eller har sin fysiska anspråksenhet eller LUN.
Undvik dynamiska minneshöjdpunkter, såsom minnessvällning, när du kör i virtuella miljöer.
Undvik att ställa in alla kopieringsuppsättningar på samma SAN, eftersom SAN kan vara en enda punkt av besvikelse.
Lastbalansering
Designa lastbalanserare för att möjliggöra "klibbiga sessioner" eller "klientaffinitet" med en adekvat timeout för befintliga anslutningar.
Undvik att placera belastningsbalanserare mellan MongoDB-klustret eller replikuppsättningskomponenterna.
Säkerhetskopiering
Planera intermittenta tester av din säkerhetskopierings- och återställningsprocess för att ha tidsmätare till hands och bekräfta dess användbarhet.
Operativsystemkonfiguration
Windows
Överväg att avaktivera NTFS "senaste åtkomsttid"-uppgraderingar.
Formatera NTFS-diskar genom att använda standardstorleken för tilldelningsenhet på 4096 byte.
Linux
Stäng av de enorma genomskinliga sidorna.
Gör justeringar av läshuvudsinställningarna för tärningarna där dina databasfiler är lagrade. Readahead för WiredTiger-lagringsmotorn bör ställas in mellan 8 och 32.
Om du använder inställd på RHEL / CentOS måste du anpassa din anpassade profil. Många av de inställda profilerna som levereras med RHEL / CentOS kan negativt påverka exekvering med deras standardinställningar. Anpassa din valda inställda profil till:
Inaktivera enkla enorma sidor.
Ställ in readahead mellan 8 och 32 i alla fall av kapacitetsmediesortering.
Använd noop eller deadline diskschemaläggare för SSD-enheter.
Använd noop-diskschemaläggaren för virtualiserade enheter i virtuella gästdatorer.
Inaktivera NUMA eller ställ in vm.zone_reclaim_mode till 0 och kör mongod-förekomster med nodinterfoliering.
Justera ulimit-värdena på din hårdvara för att matcha ditt användningsfall. Om olika mongod- eller mongo-förekomster körs under samma klient, skala ulimit-värdena på samma sätt.
Designa lämpliga posthandtag (fs.file-max), part pid constrain (kernel.pid_max), maximal tråd per process (kernel.threads-max) och maximalt antal minneskonturområden per process (vm.max_map_count) för din sändning. För expansiva ramverk ger följande värden en bra startpunkt:
fs.file-max value of 98000,
kernel.pid_max value of 64000,
kernel.threads-max value of 64000, and vm.max_map_count value of 128000
Se till att ditt ramverk har konfigurerat swap-utrymme.
Anspelar på ditt operativsystems dokumentation för intressanta platser med rätt storlek.
Se till att systemets standard-TCP Keepalive är korrekt inställt. Ett värde på 300 ger ofta överlägsen prestanda för replikuppsättningar och fragmenterade kluster.
MongoDB utvecklingschecklista
replikering
Använd ett udda antal röstberättigade personer för att garantera att valen fortsätter effektivt. Du kommer att ha upp till 7 röstberättigade personer. I händelse av att du har ett jämnt antal röstande individer, och begränsningar, såsom kostnad, inte tillåter att inkludera en annan sekundär för att vara röstande medlem, kommer du att kunna inkludera en skiljedomare för att garantera ett udda antal röster.
Garantera att dina sekundärer håller sig uppdaterade genom att använda övervakningsverktyg och genom att indikera lämpliga skrivproblem.
Använd inte extra läsningar för att skala den totala läskapaciteten.
Schemadesign
Data i MongoDB innehåller ett dynamiskt mönster. Samlingar upprätthåller inte rapportstrukturen. Detta uppmuntrar iterativ förbättring och polymorfism. I vilket fall som helst har samlingar ofta register med ytterst homogena strukturer.
Bestämma vilken uppsättning samlingar du bara behöver och vilka index som krävs för att stödja dina frågor. Med specialfallet med _id-indexet måste du göra alla index uttryckligen:MongoDB gör inte naturligt några andra index än _id.
Garantera att din schemaplan stöder din distributionssortering:om du planerar att använda fragmenterade kluster för horisontell skalning, planera ditt schema så att det innehåller en stark shardnyckel. Shard-nyckeln påverkar läs- och skrivexekveringen genom att bestämma hur MongoDB segmenterar data. Du kan inte ändra shard-nyckeln när den väl är inställd.
Se till att din schemaplan inte är beroende av indexerade kluster som växer i längd utan begränsning. Vanligtvis kan bästa utförande uppnås när sådana indexerade kluster har mindre än 1000 komponenter.
Tänk på dokumentets uppskattningsgränser när du utformar ditt schema. BSON Document Estimate-begränsningen är 16 MB per dokument. Om du behöver större rapporter, använd GridFS.
Drivrutiner
Använd dig av associationspooling. De flesta MongoDB-förare stöder sammanslutning av föreningar. Ändra storleken på associationspoolen så att den passar ditt användningsfall, med början på 110-115 % av det normala antalet samtidiga databaskrav.
Se till att dina applikationer hanterar temporära skriv- och läsfel mitt i replikvalen.
Garantera att dina applikationer hanterar misslyckade förfrågningar och försök igen vid behov. Det gör inte drivrutiner
försök naturligtvis igen misslyckade förfrågningar.
Använd exponentiell backoff-rationale för återförsök av databasbegäran.
Använd cursor.maxTimeMS() för läsningar och wtimeout för skrivningar om du vill begränsa exekveringsperioden för databasoperationer.
Data hållbarhet
Se till att din replikuppsättning innehåller minst tre databärande nav med w:majority compose-problem. Tre databärande nav krävs för replikuppsättning breda datastabilitet.
Garantera att alla instanser använder journalföring.
Skärning
Garantera att din skärvnyckel överför belastningen lika mycket på dina skärvor.
Använd riktade operationer för arbetsbelastningar som fick skala med antalet skärvor.
För MongoDB 3.6 och senare returnerar sekundärer inte längre föräldralös data om de inte använder läsbekymmer "tillgänglig" (vilket är standardläsproblemet för läsningar mot sekundärer när det inte är relaterat till kausalt tillförlitliga sessioner).
Från och med MongoDB 3.6 håller alla medlemmar i replika-uppsättningen bitar av metadata, vilket tillåter dem att filtrera bort föräldralösa barn när de inte använder "tillgänglig". Som sådan kan icke-riktade eller broadcast-förfrågningar som inte använder "tillgänglig" köras säkert på vilken medlem som helst och kommer inte att returnera föräldralös information.
Det "tillgängliga" läsproblemet kan returnera föräldralösa dokument från extramedlemmar eftersom det inte letar efter överarbetad bitmetadata. I vilket fall som helst, om återlämnandet av föräldralösa dokument är obetydligt för en ansökan, ger den "tillgängliga" läsningen minsta möjliga inaktivitetsläsning bland de olika läsproblemen.
Fördela och justera bitar manuellt när du bäddar in expansiva datamängder i en ny icke-hashad fragmenterad samling. Fördelning och fysisk justering gör det möjligt för inbäddningsstacken att spridas bland skärvorna, vilket utökar exekveringen för startlasten.
Slutsats
Hantering av checklistor för drift och utveckling är ett avgörande steg som utvecklare måste införliva när de använder MongoDB i produktionen. De är viktiga överväganden eftersom de förbättrar flödet av uppgifter för ett projekt i produktionen. MongoDB-produktionsmiljön kräver stabila och pålitliga databasfunktioner eftersom databasen i produktionen lagrar verklig världsarbetande data. Dataintegriteten beror på stabiliteten hos databasen, vilket möjliggörs genom att säkerställa att alla punkter på drift- och utvecklingschecklistan bearbetas före produktion.