1 votes

Processus par lots à faible priorité sur une base de données Mongo active

Nous voulons exécuter MapReduces sur notre base de données Mongo en direct, principalement pour pouvoir extraire des métriques. Cependant, nous avons eu quelques pannes graves causées par ces MRs qui encombraient le serveur Mongo (en particulier 100% d'IO disque). Nous pensons que c'est dû à des index manquants.

Est-il possible d'exécuter des traitements par lots comme ceux-ci avec une faible priorité de manière à ne pas rendre la base de données inaccessible pour notre application en direct ?

1voto

Adam C Points 5092

Il n'y a aucun moyen d'être "gentil" avec les travaux de MR que vous exécutez - ils donneront des résultats, etc. mais en fin de compte (surtout si vous avez des index mal choisis), vous allez avoir un impact sur le primaire en évinçant son ensemble de travail de la RAM, en causant des conflits d'E/S sur le disque, etc. C'est pourquoi je recommande vivement d'optimiser vos index pour éviter cela autant que possible.

Pour alléger la charge, vous pouvez exécuter des tâches de MR en mémoire sur les secondaires au lieu de votre primaire. Tout ce qui ne nécessite pas de sortie vers une base de données peut être exécuté de cette manière (il n'y a aucun moyen d'écrire sur un secondaire).

Si ce n'est pas possible, une autre approche que j'ai vue consiste à mettre les données à la disposition d'un cluster "analytique" spécifiquement destiné à exécuter les tâches MR tout en laissant les bases de données de production intactes. Il existe de multiples approches pour maintenir le second cluster à jour, depuis les snapshots de système de fichiers et autres techniques de type batch jusqu'à l'utilisation de mongooplog ou une application personnalisée et curseurs disponibles à répliquer.

L'autre approche que vous pourriez adopter serait de partager pour augmenter votre capacité sur vos primaires. Si vous vous engagez dans cette voie, assurez-vous que vous utilisez au moins la version 2.2 (2.2.2 au moment où nous écrivons ces lignes), la prise en charge de la MR sharded a été considérablement améliorée avec la version 2.2.

0voto

user152468 Points 101

Comme Adam l'a dit, il n'y a aucun moyen d'exécuter des travaux avec une priorité inférieure sur mongodb. Nous avons eu le même problème avec des travaux coûteux qui ont rendu d'autres requêtes extrêmement lentes. Nous avons résolu ce problème en copiant les données qui devaient être traitées par les MR-jobs vers une base de données dédiée au crunching sur un hôte différent.

Outre les méthodes mongooplog et tailable cursor pour copier des données entre bases de données mentionnées par Adam, vous pouvez également le faire directement via javascript pour copier uniquement les données dont vous avez besoin (éventuellement de manière incrémentielle). Voir cet article de blog pour plus d'informations : Qualité de service dans MongoDB . Vous pouvez également utiliser mongodump et mongorestore. mongodump .

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X