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