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

Una guida alla configurazione di un sistema di bilanciamento del carico in un cluster suddiviso in MongoDB

Per qualsiasi database, il bilanciamento del carico di tutte le richieste provenienti dai client è un meccanismo importante e fondamentale per garantire la scalabilità. Una corretta soluzione di bilanciamento del carico distribuisce tutte le richieste del client in modo uniforme su tutte le risorse del database. Se il cluster di database non è protetto con una soluzione di bilanciamento del carico adeguata, il tuo database non sarà in grado di gestire l'aumento del carico di traffico su di esso.

Fortunatamente, MongoDB fornisce supporto integrato per il bilanciamento del carico del traffico elevato supportando il ridimensionamento orizzontale tramite lo sharding. Puoi distribuire i dati delle tue raccolte su più server utilizzando lo sharding. Puoi anche aggiungere nuovi server/macchine al tuo cluster per gestire l'aumento del traffico sul database. Puoi seguire questa guida per convertire il tuo cluster di replica MongoDB in un cluster di partizionamento orizzontale.

In questo articolo, impareremo il comportamento del processo di bilanciamento che viene eseguito nei cluster sharded MongoDB e come modificarne il comportamento. Il processo di bilanciamento di MongoDB si occupa di distribuire le tue raccolte in modo uniforme tra gli shard. Ad esempio, se uno shard del tuo cluster contiene troppi blocchi della tua raccolta partizionata, quel particolare shard può ricevere più traffico rispetto ad altri shard. Pertanto, il processo di bilanciamento bilancia correttamente i blocchi di raccolte tra gli shard. Nella maggior parte delle distribuzioni di MongoDB, le configurazioni predefinite del processo di bilanciamento sono sufficienti per le normali operazioni. Tuttavia, in alcune situazioni, gli amministratori di database potrebbero voler modificare il comportamento predefinito di questo processo. Se desideri modificare il comportamento predefinito del processo di bilanciamento per qualsiasi esigenza a livello di applicazione o requisito operativo, puoi seguire questa guida.

Iniziamo con alcuni comandi di base per ottenere alcune informazioni sullo stato e lo stato del processo del bilanciatore.

Stato stato bilanciatore

Questo comando controlla se il bilanciatore è abilitato o autorizzato all'esecuzione o meno. Se il processo di bilanciamento non è in esecuzione, questo comando restituirà false. Questo non verificherà se il processo di bilanciamento è in esecuzione o meno.

sh.getBalancerState()

Abilita il processo di bilanciamento

Se il bilanciatore non è abilitato per impostazione predefinita, puoi abilitarlo eseguendo il comando seguente. Questo comando non avvierà il processo di bilanciamento, ma abiliterà il processo e garantisce che il bilanciamento dei blocchi non venga bloccato alla successiva esecuzione del processo di bilanciamento.

sh.enableBalancing(<collection_name/namespace>)

Disabilita il processo di bilanciamento

Il processo di bilanciamento viene eseguito in qualsiasi momento per impostazione predefinita. Pertanto, se desideri disabilitare il processo di bilanciamento per un determinato periodo di tempo, puoi utilizzare il comando seguente. Uno scenario ideale per utilizzare questo comando è quando si esegue un backup del database.

sh.stopBalancer()

Assicurati che il processo di bilanciamento sia interrotto prima di eseguire il backup. Se il processo è abilitato durante l'esecuzione del backup del database, potresti ritrovarti con una replica incoerente del tuo database. Ciò può verificarsi quando il processo di bilanciamento sposta alcuni blocchi tra gli shard per il bilanciamento del carico durante il processo di backup.

Puoi anche disabilitare il bilanciamento su alcune collezioni specifiche fornendo lo spazio dei nomi completo di una collezione come parametro usando il comando seguente.

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

Stato di funzionamento del bilanciatore

Questo comando controlla se il processo di bilanciamento è in esecuzione o meno. Verifica anche se sta gestendo attivamente i blocchi di partizionamento orizzontale o meno. Restituisce true se il processo è in esecuzione, altrimenti restituisce false.

sh.isBalancerRunning()

Configurazioni di dimensioni Chunk predefinite

Per impostazione predefinita, la dimensione del blocco in qualsiasi cluster sharded MongoDB è 64 MB. Per la maggior parte degli scenari, questo è abbastanza buono per migrare o dividere i blocchi partizionati. Tuttavia, a volte il normale processo di migrazione non coinvolge più operazioni di I/O di quante ne possa elaborare l'hardware. In questi tipi di situazioni, potresti voler ridurre le dimensioni dei blocchi. Puoi farlo eseguendo il seguente set di comandi.

use config

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

Se modifichi la dimensione predefinita del blocco nel cluster partizionato, tieni a mente quanto segue

  • Puoi specificare la dimensione del blocco solo tra 1 e 1024 MB
  • La divisione automatica avverrà solo all'inserimento o all'aggiornamento
  • Le dimensioni dei blocchi inferiori porteranno a più tempo durante il processo di divisione.

Programma il bilanciamento per un'ora specifica

Quando le dimensioni del database sono enormi, i processi di bilanciamento o migrazione possono influire sulle prestazioni complessive del database. Pertanto, è consigliabile pianificare il processo di bilanciamento durante un intervallo di tempo specifico quando il carico sul database è molto inferiore. Puoi utilizzare i seguenti comandi per impostare l'intervallo di tempo per l'esecuzione del processo di bilanciamento.

use config

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

Esempio

Il comando seguente imposterà l'intervallo di tempo dall'1:00 alle 5:00 per l'esecuzione del processo di bilanciamento.

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

Assicurati che il periodo di tempo indicato sia sufficiente per un processo di bilanciamento completo.

Puoi anche rimuovere qualsiasi finestra temporale del processo di bilanciamento esistente eseguendo il comando seguente.

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

Oltre ai comandi precedenti, puoi anche modificare il comportamento di replica mentre esegui il processo di migrazione dei blocchi utilizzando il parametro _secondaryThrottle. Inoltre, puoi utilizzare la proprietà _waitForDelete con il comando moveChunk per indicare al processo di bilanciamento di attendere la fase di eliminazione della migrazione corrente prima di iniziare con la nuova fase di migrazione dei blocchi.

Conclusione

Si spera che questo sia tutto ciò di cui hai bisogno mentre modifichi il comportamento predefinito del processo di bilanciamento di MongoDB. Il bilanciamento è un aspetto molto importante di qualsiasi cluster partizionato MongoDB. Quindi, se conosci in dettaglio il processo di bilanciamento, diventa molto facile modificare il comportamento predefinito del processo di bilanciamento in base alle tue esigenze e casi d'uso.