Aller au contenu

Gérer un cluster de shards déséquilibré#

Identification d'un cluster déséquilibré#

  • Utiliser la commande db.printShardingStatus() pour vérifier le statut du sharding
  • Vérifier la distribution des chunks entre les shards
    • Un déséquilibre est visible si certains shards ont beaucoup plus de chunks que d'autres
  • Utiliser MongoDB Atlas ou MongoDB Cloud Manager pour une visualisation graphique

Analyse des causes d'un déséquilibre#

  • Shard key inappropriée
    • Clés trop concentrées ou trop dispersées
    • Clés non monotones
  • Taille des chunks trop grande ou trop petite
    • Ajuster avec sh.splitFind() et sh.mergeChunks()
  • Croissance inégale des données
    • Ajout ou suppression massive de données

Utilisation de la fonction "Balancer"#

  • Balancer permet de redistribuer les chunks entre les shards
  • Activer le Balancer automatique :
    • sh.startBalancer() pour démarrer
    • sh.stopBalancer() pour arrêter
  • Vérifier le statut du Balancer :
    • sh.getBalancerState()
    • sh.isBalancerRunning()
  • Configurer des fenêtres de temps pour l'exécution du Balancer
    use config
    db.settings.updateOne({_id: "balancer"}, {$set: {activeWindow: {start: "00:00", stop: "04:00"}}}, {upsert: true})
    

Conseils pour prévenir le déséquilibre#

  • Choisir une shard key adaptée
    • Prendre en compte la distribution des données et la croissance prévue
  • Surveiller régulièrement la distribution des chunks
    • Utiliser les outils de monitoring comme MongoDB Atlas
  • Configurer les seuils de scission et de migration de chunks
    use config
    db.settings.updateOne({_id: "chunksize"}, {$set: {value: <taille_du_chunk>}}, {upsert: true})
    
  • Utiliser le Balancer de manière proactive pour rééquilibrer les shards
    • Planifier des fenêtres d'exécution régulières