La base de données va se fragmenter au fil des insertions/suppression d'éléments, et le volume des données va devenir plus faible que le volume sur disque (dans /var/lib/mongo). Il est possible de surveiller cet écart de consommation, et même la réduire.
Deux méthodes options existent pour le compactage de la base :
La première option ne nécessite pas le montage d'une autre base ni de transfert de données. C'est globalement plus simple, mais pendant que la base se compacte elle est indisponible ce qui peut provoquer un long temps d'indisponibilité. De plus, suivant le moteur de base utilisé les contraintes et les résultats sont variables:
Il est fortement recommandé de passer sur le moteur Wired Tiger, qui permet d'avoir de meilleures performances et un espace disque consommé plus faible (moins de fragmentation et compression de données). Le script de vérification de la fragmentation permet de donner le moteur de données utilisé.
Il est important à noter que pendant que le script va fonctionner, la base sera bloquée et les opérations ne pourront pas se faire. Nous vous conseillons de faire cette opération avec Shinken éteint.
Le script de compactage est launch_mongo_compaction.py
Attention: ce script ne fonctionne que sur un shinken supérieur à la v02.07.00 |
Il se lance de la manière suivante:
launch_mongo_compaction.py -H IP_SERVER --ssh-user=shinken --connection-method=ssh --ssh-keyfile=~shinken/.ssh/id_rsa |
ATTENTION: Pour rappel, lancer cette commande va bloquer la base pendant l'opération, qui va dépendre de la vitesse du serveur, notamment de la vitesse de ses disques, car toutes les données vont être lues/réécrites. Il faut que Shinken soit arrêté pendant cette opération. |
Au lancement, il va parcourir les bases de données, et va les compacter. Voici une exécution du script:

Pour information la base de données de ce lancement faisait 600Mo sur disque pour un volume de données en base de 1.5Go.
Pour s'assurer que le format de données est WiredTiger, il faut que l'entrée suivante soit dans le fichier /etc/mongod.conf:
ATTENTION: le fichier /etc/mongod.conf doit être dans le nouveau format de configuration (du yaml). Si la chaine wiredTiger n'est pas présente (et commentée) alors c'est que vous avez l'ancien format, et devez migrer vos paramètres. Pour ce faire, vous avez le fichier /etc/mongod.conf.rpmnew qui est présent avec le nouveau format, vous n'avez qu'à:
|
storage:
engine: wiredTiger |
Puis relancer la base:
/etc/init.d/mongod start |
Ensuite il faut lancer l'import, qui va se faire avec le nouveau format de données, et avec un espace disque consommé minimal:
shinken-restore |