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.