sql >> Database >  >> NoSQL >> MongoDB

Een gids voor het configureren van een load balancer in een MongoDB Sharded-cluster

Voor elke database is de taakverdeling van alle verzoeken van clients een belangrijk en fundamenteel mechanisme om schaalbaarheid te garanderen. Een goede oplossing voor taakverdeling verdeelt alle clientverzoeken gelijkmatig over alle databasebronnen. Als het databasecluster niet wordt bewaakt met een goede oplossing voor taakverdeling, kan uw database de toegenomen verkeersbelasting niet aan.

Gelukkig biedt MongoDB ingebouwde ondersteuning voor load balancing van het hoge verkeer door horizontale schaling via sharding te ondersteunen. Met sharding kunt u de gegevens van uw collecties over meerdere servers verdelen. U kunt ook nieuwe servers/machines aan uw cluster toevoegen om het toegenomen verkeer op de database af te handelen. U kunt deze handleiding volgen om uw MongoDB-replicacluster om te zetten in een shardingcluster.

In dit artikel zullen we leren over het gedrag van het balancer-proces dat wordt uitgevoerd in de MongoDB-shardclusters en hoe we het gedrag ervan kunnen wijzigen. Het MongoDB-balancerproces zorgt ervoor dat uw collecties gelijkmatig over de scherven worden verdeeld. Als een shard van uw cluster bijvoorbeeld te veel blokken van uw shard-verzameling bevat, kan die specifieke shard meer verkeer ontvangen in vergelijking met andere shards. Daarom balanceert het balancerproces de brokken verzamelingen op de juiste manier over de scherven. In de meeste MongoDB-implementaties zijn de standaardconfiguraties van het balancerproces voldoende voor normale bewerkingen. Maar in sommige situaties willen databasebeheerders misschien het standaardgedrag van dit proces wijzigen. Als u het standaardgedrag van het balancerproces wilt wijzigen voor behoeften op applicatieniveau of operationele vereisten, kunt u deze handleiding volgen.

Laten we beginnen met enkele basiscommando's om wat informatie te krijgen over de status en status van het balancerproces.

Status balancer

Deze opdracht controleert of de balancer is ingeschakeld of mag worden uitgevoerd of niet. Als het balancer-proces niet actief is, retourneert deze opdracht false. Hiermee wordt niet gecontroleerd of het balancerproces loopt of niet.

sh.getBalancerState()

Het Balancer-proces inschakelen

Als de balancer niet standaard is ingeschakeld, kunt u deze inschakelen door de volgende opdracht uit te voeren. Deze opdracht start het balancer-proces niet, maar activeert het proces en zorgt ervoor dat chunk-balancering niet wordt geblokkeerd wanneer het balancer-proces de volgende keer wordt uitgevoerd.

sh.enableBalancing(<collection_name/namespace>)

Het Balancer-proces uitschakelen

Het balancer-proces wordt standaard op elk moment uitgevoerd. Daarom, als u het balancer-proces voor een bepaalde periode wilt uitschakelen, kunt u de volgende opdracht gebruiken. Een ideaal scenario om deze opdracht te gebruiken, is wanneer u een back-up van uw database maakt.

sh.stopBalancer()

Zorg ervoor dat het balancer-proces is gestopt voordat u de back-up maakt. Als het proces is ingeschakeld tijdens het maken van de databaseback-up, kunt u eindigen met een inconsistente replica van uw database. Dit kan gebeuren wanneer het balancer-proces enkele chunks over de shards verplaatst voor taakverdeling tijdens het back-upproces.

Je kunt de balancering op sommige specifieke collecties ook uitschakelen door de volledige naamruimte van een collectie als parameter op te geven met de volgende opdracht.

sh.disableBalancing("<db_name>.<collection_name>")

Loopstatus balancer

Dit commando controleert of het balancer-proces actief is of niet. Het controleert ook of het de sharding-brokken actief beheert of niet. Retourneert true als het proces loopt, anders wordt false geretourneerd.

sh.isBalancerRunning()

Standaard configuraties voor stukgrootte

Standaard is de chunkgrootte in een MongoDB-shardcluster 64 MB. Voor de meeste scenario's is dit goed genoeg voor het migreren of splitsen van de shard chunks. Soms omvat het normale migratieproces echter meer I/O-bewerkingen dan uw hardware kan verwerken. In dit soort situaties wilt u misschien de grootte van brokken verkleinen. U kunt dit doen door de volgende reeks opdrachten uit te voeren.

use config

db.settings.save( { _id:"chunksize", value: <sizeInMB> } )

Als u de standaardgrootte van de chunk in het shard-cluster wijzigt, moet u rekening houden met het volgende

  • U kunt de chunkgrootte alleen specificeren tussen 1 en 1024 MB
  • Automatisch splitsen gebeurt alleen bij invoegen of bijwerken
  • Kleinere blokken zullen leiden tot meer tijd tijdens het splitsingsproces.

Schema balanceren voor een bepaalde tijd

Als uw database enorm groot is, kunnen balancerings- of migratieprocessen de algehele prestaties van uw database beïnvloeden. Daarom is het verstandig om het balanceringsproces in een bepaald tijdvenster te plannen, wanneer de belasting van de database zeer gering is. U kunt de volgende opdrachten gebruiken om het tijdvenster in te stellen waarin het balancerproces moet worden uitgevoerd.

use config

db.settings.update({ _id : "balancer" }, { $set : { activeWindow : { start : "<start-time>", stop : "<stop-time>" } } }, true )

Voorbeeld

De volgende opdracht stelt het tijdvenster in van 1:00 AM tot 5:00 AM voor het balanceren van het proces.

db.settings.update({ _id : "balancer" }, { $set : { activeWindow : { start : "01:00", stop : "05:00" } } }, true )

Zorg ervoor dat het opgegeven tijdsbestek voldoende is voor een volledig balanceringsproces.

Je kunt ook een bestaand tijdvenster voor het balanceringsproces verwijderen door de volgende opdracht uit te voeren.

db.settings.update({ _id : "balancer" }, { $unset : { activeWindow : true } })

Afgezien van de bovenstaande opdrachten, kunt u ook het replicatiegedrag wijzigen terwijl u het chunk-migratieproces uitvoert met behulp van de parameter _secondaryThrottle. U kunt ook de eigenschap _waitForDelete met de opdracht moveChunk gebruiken om het balanceringsproces te laten weten dat het moet wachten op de verwijderingsfase van de huidige migratie voordat wordt begonnen met de nieuwe chunk-migratiefase.

Conclusie

Hopelijk is dit alles wat u nodig hebt terwijl u het standaardgedrag van het MongoDB-balancerproces wijzigt. Balanceren is een zeer belangrijk aspect van elk MongoDB-shard-cluster. Dus als u het balanceringsproces in detail kent, wordt het heel eenvoudig om het standaardgedrag van het balancerproces aan te passen aan uw behoeften en gebruiksscenario's.


  1. afbeelding opslaan in mongodb

  2. Hoe de pubsub-time-outfunctie van redis implementeren?

  3. Redis-winkelsleutel zonder waarde

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