Tous les produits
Search
Centre de documentation

ApsaraDB for MongoDB:Manage the balancer

Dernière mise à jour :Sep 09, 2026

Le répartiteur de charge distribue les données entre les nœuds de shard d'une instance de cluster fragmenté ApsaraDB for MongoDB. Vérifiez l'état du répartiteur, planifiez une fenêtre d'activité ou activez et désactivez le service.

Remarque

Les exemples de cette rubrique utilisent le shell mongo. Les commandes et la sortie peuvent différer selon l'outil utilisé.

Fonctionnement

Le répartiteur surveille la répartition des données sur les nœuds de shard et migre automatiquement les données. Son comportement varie selon la version du moteur de base de données.

MongoDB 5.0 et versions antérieures

Le répartiteur suit le nombre de chunks par nœud de shard. Lorsque la différence atteint le seuil de migration, il migre les chunks (moveChunk) pour rééquilibrer le cluster.

Version du moteur de base de données Seuil de migration
MongoDB 4.2, 4,4, 5,0 1
MongoDB 3.4 (obsolète), MongoDB 4.0 Par défaut : 2. Réduit à 1 si le nombre total de chunks < 20 ou si le nombre de chunks précédemment migrés < 20
MongoDB 3.2 (obsolète) Nombre total de chunks < 20 : le seuil est 2. Nombre total de chunks 20–80 : le seuil est 4. Nombre total de chunks >= 80 : le seuil est 8

MongoDB 6.0

Le répartiteur surveille la taille des données par collection et par shard au lieu du nombre de chunks. Si la différence de taille entre deux shards d'une collection dépasse 384 Mo (trois fois la taille de chunk par défaut), il divise les données par tag de shard et les migre à l'aide de moveRange.

Pour vérifier l'équilibre des données, exécutez getShardDistribution() et concentrez-vous sur la taille des données plutôt que sur le nombre de chunks.

Remarque

Après la mise à niveau vers la V6.0 (mineure 7.0.1) ou ultérieure, sh.status() peut indiquer que le nombre de chunks entre les shards n'est plus équilibré ou que chaque shard ne contient qu'un seul chunk. Il s'agit du comportement attendu du nouveau répartiteur. Pour plus de détails, consultez Nombre de chunks déséquilibré entre les shards après une mise à niveau MongoDB.

Notes d'utilisation

  • Prise en charge uniquement pour les instances de cluster fragmenté.

  • Par défaut, le répartiteur s'exécute en continu (fenêtre d'activité de 24 heures).

  • La migration des chunks consomme des ressources et peut dégrader les performances. Planifiez la fenêtre d'activité pendant les heures creuses.

Vérifier l'état du répartiteur

Avant de désactiver le répartiteur, vérifiez qu'aucune migration n'est en cours.

  1. Connectez-vous à l'instance de cluster fragmenté à l'aide du shell mongo.

  2. Exécutez la commande suivante :

       sh.isBalancerRunning()
  3. Interprétez le résultat en fonction du type de retour : Valeur de retour Map Certaines versions du shell mongo renvoient un objet Map. Vérifiez le champ inBalancerRound comme documenté dans sh.isBalancerRunning().

    Valeur de retour booléenne

    Valeur Signification
    false Le répartiteur est inactif. Vous pouvez le désactiver en toute sécurité.
    true Le répartiteur migre des chunks. Ne le désactivez pas afin d'éviter toute incohérence des données.
    **Valeur inBalancerRound** Signification
    false Le répartiteur est inactif. Vous pouvez le désactiver en toute sécurité.
    true Le répartiteur migre des chunks. Ne le désactivez pas afin d'éviter toute incohérence des données.
       {
         mode: 'full',
         inBalancerRound: false,
         numBalancerRounds: Long("1143"),
         ok: 1,
         '$clusterTime': {
           clusterTime: Timestamp({ t: 1639753724, i: 3 }),
           signature: {
             hash: Binary(Buffer.from("0000000000000000000000000000000000000000", "hex"), 0),
             keyId: Long("0")
           }
         },
         operationTime: Timestamp({ t: 1639753724, i: 3 })
       }

Définir une fenêtre d'activité

Limitez le fonctionnement du répartiteur à des heures spécifiques pour réduire l'impact sur les performances pendant les heures de pointe.

  1. Connectez-vous à l'instance de cluster fragmenté à l'aide du shell mongo.

  2. Basculez vers la base de données config :

       use config
  3. Définissez la fenêtre d'activité. Remplacez les espaces réservés par vos valeurs. Exemple : Exécutez le répartiteur de 01:00 à 03:00 tous les jours :

    Remarque

    Les heures sont exprimées dans le fuseau horaire local de la région de l'instance.

    Espace réservé Description Format
    <start-time> Heure de début de la fenêtre d'activité HH:MM (HH : 00–23, MM : 00–59)
    <stop-time> Heure de fin de la fenêtre d'activité HH:MM (HH : 00–23, MM : 00–59)
       db.settings.update(
          { _id: "balancer" },
          { $set: { activeWindow : { start : "<start-time>", stop : "<stop-time>" } } },
          { upsert: true }
       )
       db.settings.update(
          { _id: "balancer" },
          { $set: { activeWindow : { start : "01:00", stop : "03:00" } } },
          { upsert: true }
       )
  4. Exécutez sh.status() pour vérifier. La sortie affiche la fenêtre d'activité :

Supprimer la fenêtre d'activité

Pour rétablir l'équilibrage continu, supprimez la fenêtre d'activité :

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

Activer le répartiteur

L'activation du répartiteur lance immédiatement la migration des données si le sharding est configuré, ce qui consomme les ressources de l'instance. Effectuez cette opération pendant les heures creuses.

  1. Connectez-vous à l'instance de cluster fragmenté à l'aide du shell mongo.

  2. Basculez vers la base de données config :

       use config
  3. Activez le répartiteur :

       sh.setBalancerState(true)

Désactiver le répartiteur

Remarque

Un répartiteur désactivé arrête la migration des données entre les nœuds de shard, ce qui peut entraîner un déséquilibre des données.

  1. Connectez-vous à l'instance de cluster fragmenté à l'aide du shell mongo.

  2. Basculez vers la base de données config :

       use config
  3. Vérifiez si le répartiteur migre des données. Interprétez la valeur de retour comme décrit dans Vérifier l'état du répartiteur.

    • Si le résultat est false (ou inBalancerRound: false pour les valeurs de retour Map), passez à l'étape suivante.

    • Si le résultat est true (ou inBalancerRound: true), attendez que la migration soit terminée. La désactivation du répartiteur en cours de migration peut provoquer une incohérence des données.

       sh.isBalancerRunning()
  4. Une fois le répartiteur inactif, désactivez-le :

       sh.stopBalancer()

Références

FAQ

Est-il normal que des documents orphelins soient générés après l'activation du répartiteur, et comment les gérer ?

Des documents orphelins peuvent être créés lorsqu'une migration de chunk est interrompue ou annulée, ou lorsqu'une clé de shard inadaptée répartit les données de manière inégale. Dans ces cas, une opération moveChunk peut laisser des données sur le shard source.

Le nombre de documents orphelins peut fluctuer lorsque le répartiteur migre fréquemment des chunks. Cela est normal si le nombre finit par tomber à 0 et ne reste pas élevé pendant une longue période.

L'équilibrage peut également être déclenché automatiquement lorsque la différence de volume de données entre les collections dépasse le seuil par défaut, tel que 200 Mo. Ce processus peut temporairement créer des documents orphelins.

Si des documents orphelins persistent, vérifiez les journaux du répartiteur pour détecter les erreurs de migration et assurez-vous que la clé de shard répartit les données de manière homogène. Une fois toutes les migrations de chunks terminées, exécutez cleanupOrphaned pour supprimer les documents orphelins restants.