7.2.9.4.4. Déploiement d’un cluster de production avec réduction de la RAM

Le déploiement d’un cluster mongoDB, pour gérer de forte volumétrie avec les performances initiales estimées et une tolérance aux pannes satisfaisante, va s’avérer gourmand en ressource matérielle.

Par exemple, pour gérer un milliard d’AU dans le système, avec une performance de versement estimée à 450.000 AU par heure, et une tolérance aux pannes fondée sur l’utilisation de 3 membres par ReplicaSet, il est estimé le besoin de 960 Go de RAM (donnée extrapolée à partir d’un environnement chargé à 200 millions d’AU avec 4 Shards constitués de machines 4 vCPU / 16 Go RAM).

Si le coût d’une telle infrastructure ne peut pas être supportée, il est possible de diminuer l’allocation RAM sur un membre par ReplicaSet. Le principe étant de conserver une haute disponibilité (et une consistance des données), à performance constante, avec deux membres dont les ressources physiques le permettent. Le troisième membre, dont les ressources ont été abaissées au minimum, est configuré pour ne pas être prioritaire à l’élection d’un noeud primaire. Dans le cas d’une indisponibilité des deux premiers membres, le service reste assuré (avec niveau de tolérance aux pannes toujours équivalent à 3 membres) mais dont les performances initiales ne sont plus assurées.

Pour réaliser le déploiement du cluster mongodb-data, en mode PSSmin, composé de 3 machines hebergeant les services vitam-mongos et vitam-mongoc et de 6 machines hebergeant le service vitam-mongod (pour disposer de 2 Shards), l’inventaire ansible doit référencer les 3 premières machines pour les groupes hosts-mongos-data et hosts-mongoc-data et les 6 autres machines pour le groupe hosts-mongod-data. Parmis les 3 machines de chaque replicaSet, la machine qui est déployée avec les ressources matérielles minimum, doit être suivi du paramètre is_small=true.

Exemple

[hosts-mongodb-data:children]
hosts-mongos-data
hosts-mongoc-data
hosts-mongod-data

[hosts-mongos-data]
host1.vm    mongo_cluster_name=mongodb-data
host2.vm    mongo_cluster_name=mongodb-data
host3.vm    mongo_cluster_name=mongodb-data                                   mongo_rs_bootstrap=true

[hosts-mongoc-data]
host1.vm    mongo_cluster_name=mongodb-data
host2.vm    mongo_cluster_name=mongodb-data
host3.vm    mongo_cluster_name=mongodb-data                                   mongo_rs_bootstrap=true

[hosts-mongod-data]
host4.vm    mongo_cluster_name=mongodb-data  mongo_shard_id=0
host5.vm    mongo_cluster_name=mongodb-data  mongo_shard_id=0  is_small=true
host6.vm    mongo_cluster_name=mongodb-data  mongo_shard_id=0                 mongo_rs_bootstrap=true
host7.vm    mongo_cluster_name=mongodb-data  mongo_shard_id=1
host8.vm    mongo_cluster_name=mongodb-data  mongo_shard_id=1  is_small=true
host9.vm    mongo_cluster_name=mongodb-data  mongo_shard_id=1                 mongo_rs_bootstrap=true

Le déploiement d’un cluster mongodb-offer en mode PSSmin suit les mêmes règles que l’exemple illustré ci-dessus (les groupes ansible ne sont pas les mêmes).