MongoDB
 sql >> Base de données >  >> NoSQL >> MongoDB

Guide de configuration d'un équilibreur de charge dans un cluster partagé MongoDB

Pour toute base de données, l'équilibrage de charge de toutes les requêtes provenant des clients est un mécanisme important et fondamental pour assurer l'évolutivité. Une solution d'équilibrage de charge appropriée répartit uniformément toutes les demandes des clients sur toutes les ressources de la base de données. Si le cluster de bases de données n'est pas protégé par une solution d'équilibrage de charge appropriée, votre base de données ne pourra pas gérer l'augmentation de la charge de trafic sur celui-ci.

Heureusement, MongoDB fournit un support intégré pour l'équilibrage de charge du trafic élevé en prenant en charge la mise à l'échelle horizontale via le sharding. Vous pouvez répartir les données de vos collections sur plusieurs serveurs à l'aide du sharding. Vous pouvez également ajouter de nouveaux serveurs/machines à votre cluster pour gérer l'augmentation du trafic sur la base de données. Vous pouvez suivre ce guide pour convertir votre cluster de répliques MongoDB en cluster de partitionnement.

Dans cet article, nous allons découvrir le comportement du processus d'équilibrage qui s'exécute dans les clusters fragmentés MongoDB et comment modifier son comportement. Le processus d'équilibrage MongoDB s'occupe de répartir vos collections uniformément sur les fragments. Par exemple, si un fragment de votre cluster contient trop de fragments de votre collection fragmentée, ce fragment particulier peut recevoir plus de trafic que les autres fragments. Par conséquent, le processus d'équilibrage équilibre correctement les fragments de collections sur les fragments. Dans la plupart des déploiements MongoDB, les configurations par défaut du processus d'équilibrage sont suffisantes pour les opérations normales. Mais, dans certaines situations, les administrateurs de base de données peuvent souhaiter modifier le comportement par défaut de ce processus. Si vous souhaitez modifier le comportement par défaut du processus d'équilibrage pour des besoins au niveau de l'application ou des exigences opérationnelles, vous pouvez suivre ce guide.

Commençons par quelques commandes de base pour obtenir des informations sur l'état et le statut du processus d'équilibrage.

État de l'équilibreur

Cette commande vérifie si l'équilibreur est activé ou autorisé à s'exécuter ou non. Si le processus d'équilibrage n'est pas en cours d'exécution, cette commande renverra false. Cela ne vérifiera pas si le processus d'équilibrage est en cours d'exécution ou non.

sh.getBalancerState()

Activer le processus d'équilibrage

Si l'équilibreur n'est pas activé par défaut, vous pouvez l'activer en exécutant la commande suivante. Cette commande ne démarrera pas le processus d'équilibrage, mais elle activera le processus et garantira que l'équilibrage des blocs ne sera pas bloqué lors de la prochaine exécution du processus d'équilibrage.

sh.enableBalancing(<collection_name/namespace>)

Désactiver le processus d'équilibrage

Le processus d'équilibrage s'exécute à tout moment par défaut. Par conséquent, si vous souhaitez désactiver le processus d'équilibrage pendant une période spécifique, vous pouvez utiliser la commande suivante. Un scénario idéal pour utiliser cette commande est lorsque vous effectuez une sauvegarde de votre base de données.

sh.stopBalancer()

Assurez-vous que le processus d'équilibrage est arrêté avant d'effectuer la sauvegarde. Si le processus est activé lors de la sauvegarde de la base de données, vous pouvez vous retrouver avec une réplique incohérente de votre base de données. Cela peut se produire lorsque le processus d'équilibreur déplace certains morceaux sur les fragments pour équilibrer la charge pendant le processus de sauvegarde.

Vous pouvez également désactiver l'équilibrage sur certaines collections spécifiques en fournissant l'espace de noms complet d'une collection en tant que paramètre à l'aide de la commande suivante.

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

État d'exécution de l'équilibreur

Cette commande vérifie si le processus d'équilibrage est en cours d'exécution ou non. Il vérifie également s'il gère activement les fragments de partitionnement ou non. Renvoie vrai si le processus est en cours d'exécution sinon renvoie faux.

sh.isBalancerRunning()

Configurations de taille de bloc par défaut

Par défaut, la taille de bloc dans n'importe quel cluster fragmenté MongoDB est de 64 Mo. Pour la plupart des scénarios, cela suffit pour migrer ou diviser les morceaux fragmentés. Cependant, le processus de migration normal implique parfois plus d'opérations d'E/S que votre matériel ne peut en traiter. Dans ces types de situations, vous souhaiterez peut-être réduire la taille des blocs. Vous pouvez le faire en exécutant l'ensemble de commandes suivant.

use config

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

Si vous modifiez la taille par défaut du segment dans le cluster fragmenté, gardez à l'esprit les éléments suivants

  • Vous ne pouvez spécifier la taille du segment qu'entre 1 et 1 024 Mo
  • Le fractionnement automatique ne se produira que lors de l'insertion ou de la mise à jour
  • Des tailles de bloc inférieures entraîneront plus de temps pendant le processus de fractionnement.

Planifier l'équilibrage pour une heure spécifique

Lorsque la taille de votre base de données est énorme, les processus d'équilibrage ou de migration peuvent avoir un impact sur les performances globales de votre base de données. Par conséquent, il est judicieux de planifier le processus d'équilibrage pendant une fenêtre de temps spécifique lorsque la charge sur la base de données est très inférieure. Vous pouvez utiliser les commandes suivantes pour définir la fenêtre de temps d'exécution du processus d'équilibrage.

use config

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

Exemple

La commande suivante définira la fenêtre horaire de 1h00 à 5h00 pour que le processus d'équilibrage s'exécute.

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

Assurez-vous que le délai imparti est suffisant pour un processus d'équilibrage complet.

Vous pouvez également supprimer toute fenêtre de temps de processus d'équilibrage existante en exécutant la commande suivante.

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

Outre les commandes ci-dessus, vous pouvez également modifier le comportement de réplication lors du processus de migration de bloc en utilisant le paramètre _secondaryThrottle. En outre, vous pouvez utiliser la propriété _waitForDelete avec la commande moveChunk pour indiquer au processus d'équilibrage d'attendre la phase de suppression de la migration actuelle avant de commencer la nouvelle phase de migration de bloc.

Conclusion

Espérons que ce sera tout ce dont vous aurez besoin pour modifier le comportement par défaut du processus d'équilibrage MongoDB. L'équilibrage est un aspect très important de tout cluster fragmenté MongoDB. Ainsi, si vous connaissez le processus d'équilibrage en détail, il devient très facile de modifier le comportement par défaut du processus d'équilibrage en fonction de vos besoins et de vos cas d'utilisation.