For enhver database er belastningsbalancering af alle anmodninger, der kommer fra klienter, en vigtig og grundlæggende mekanisme til at sikre skalerbarhed. En ordentlig belastningsbalanceringsløsning spreder alle klientanmodninger jævnt over alle databaseressourcerne. Hvis databaseklyngen ikke er beskyttet med en ordentlig belastningsbalanceringsløsning, vil din database ikke være i stand til at håndtere øget trafikbelastning på den.
Heldigvis giver MongoDB indbygget support til belastningsbalancering af den høje trafik ved at understøtte horisontal skalering gennem sharding. Du kan distribuere dataene fra dine samlinger på tværs af flere servere ved hjælp af sharding. Du kan også tilføje nye servere/maskiner til din klynge for at håndtere den øgede trafik på databasen. Du kan følge denne guide for at konvertere din MongoDB replika-klynge til en sharding-klynge.
I denne artikel vil vi lære om opførselen af balancerprocessen, der kører i MongoDB sharded clusters, og hvordan man ændrer dens adfærd. MongoDB balancer-processen sørger for at fordele dine samlinger jævnt på tværs af skårene. For eksempel, hvis et shard af din klynge indeholder for mange bidder af din sharded samling, kan det pågældende shard modtage mere trafik sammenlignet med andre shards. Derfor balancerer balancer-processen bidderne af samlinger ordentligt på tværs af skårene. I de fleste af MongoDB-installationerne er standardkonfigurationerne af balancer-processen tilstrækkelige til normale operationer. Men i nogle situationer vil databaseadministratorer måske ændre standardadfærden for denne proces. Hvis du ønsker at ændre standardadfærden for balancer-processen til behov på applikationsniveau eller driftskrav, kan du følge denne vejledning.
Lad os starte med nogle grundlæggende kommandoer for at få nogle oplysninger om balancerprocessens tilstand og status.
Status for balancer
Denne kommando kontrollerer, om balanceren er aktiveret eller tilladt at køre eller ej. Hvis balancer-processen ikke kører, vil denne kommando returnere falsk. Dette vil ikke kontrollere, om balancer-processen kører eller ej.
sh.getBalancerState()
Aktiver balancerprocessen
Hvis balanceren ikke er aktiveret som standard, kan du aktivere den ved at køre følgende kommando. Denne kommando starter ikke balancer-processen, men den aktiverer processen og sikrer, at chunk-balancering ikke blokeres, når balancer-processen kører næste gang.
sh.enableBalancing(<collection_name/namespace>)
Deaktiver balancerprocessen
Balancerprocessen kører som standard til enhver tid. Derfor, hvis du vil deaktivere balancer-processen i en bestemt tidsperiode, kan du bruge følgende kommando. Et ideelt scenarie til at bruge denne kommando er, når du tager en sikkerhedskopi af din database.
sh.stopBalancer()
Sørg for, at balancer-processen er stoppet, før du tager sikkerhedskopien. Hvis processen er aktiveret, mens du tager backup af databasen, kan du ende med en inkonsistent replika af din database. Dette kan ske, når balancer-processen flytter nogle bidder hen over skårene til belastningsbalancering under backup-processen.
Du kan også deaktivere balanceringen på nogle specifikke samlinger ved at angive det fulde navneområde for en samling som en parameter ved hjælp af følgende kommando.
sh.disableBalancing("<db_name>.<collection_name>")
Balancer kørestatus
Denne kommando kontrollerer, om balancer-processen kører eller ej. Den kontrollerer også, om den aktivt administrerer sønderdelingsstykkerne eller ej. Returnerer sand, hvis processen kører, ellers returnerer falsk.
sh.isBalancerRunning()
Standard konfigurationer af chunkstørrelse
Som standard er chunk-størrelsen i enhver MongoDB sharded cluster 64 MB. For de fleste scenarier er dette godt nok til at migrere eller opdele de sønderdelte bidder. Nogle gange involverer den normale migreringsproces dog flere I/O-operationer, end din hardware kan behandle. I disse typer situationer vil du måske reducere størrelsen af bidder. Du kan gøre det ved at køre følgende sæt kommandoer.
use config
db.settings.save( { _id:"chunksize", value: <sizeInMB> } )
Hvis du ændrer standardstørrelsen for chunk-størrelsen i den sønderdelte klynge, skal du huske følgende ting
- Du kan kun angive chunkstørrelsen mellem 1 og 1024 MB
- Automatisk opdeling vil kun ske ved indsættelse eller opdatering
- Lære chunk-størrelser vil føre til mere tid under opdelingsprocessen.
Planlæg afbalancering for et bestemt tidspunkt
Når din databasestørrelse er enorm, kan balancerings- eller migreringsprocesser påvirke din databases overordnede ydeevne. Derfor er det klogt at planlægge balanceringsprocessen i et bestemt tidsvindue, når belastningen på databasen er meget mindre. Du kan bruge følgende kommandoer til at indstille tidsvinduet for balancer-processen til at køre.
use config
db.settings.update({ _id : "balancer" }, { $set : { activeWindow : { start : "<start-time>", stop : "<stop-time>" } } }, true )
Eksempel
Følgende kommando indstiller tidsvinduet fra 1:00 til 5:00 for at afbalancere processen.
db.settings.update({ _id : "balancer" }, { $set : { activeWindow : { start : "01:00", stop : "05:00" } } }, true )
Sørg for, at den givne tidsramme er tilstrækkelig nok til en komplet balanceringsproces.
Du kan også fjerne ethvert eksisterende tidsvindue for balanceringsproces ved at køre følgende kommando.
db.settings.update({ _id : "balancer" }, { $unset : { activeWindow : true } })
Udover ovenstående kommandoer kan du også ændre replikeringsadfærden, mens du udfører chunk-migreringsprocessen ved at bruge parameteren _secondaryThrottle. Du kan også bruge egenskaben _waitForDelete med moveChunk-kommandoen til at bede balanceringsprocessen vente på den aktuelle migrerings slettefase, før den starter med den nye chunk-migreringsfase.
Konklusion
Forhåbentlig vil dette være alt hvad du behøver, mens du ændrer standardadfærden for MongoDB balancer-processen. Balancering er et meget vigtigt aspekt af enhver MongoDB sharded cluster. Så hvis du kender til balanceringsprocessen i detaljer, bliver det meget nemt at ændre standardadfærden for balancerprocessen i overensstemmelse med dine behov og anvendelsestilfælde.