# 5.18. Reconstruction

La reconstruction consiste à recréer le contenu des bases de données (MongoDB-data, Elasticsearch-data) en cas de perte de l’une ou l’autre à partir des informations présentes dans les offres de stockage. Elle part du principe que le contenu des offres n’a pas été altéré.

Prudence

Dans cette version de la solution logicielle VITAM, la reconstruction nécessite de couper le service aux utilisateurs.

Prudence

Une reconstruction complète à partir des offres de stockage peut être extrêmement longue, et ne doit être envisagée qu’en dernier recours.

## 5.18.1. Procédure mono-site

La procédure à appliquer est la même que la procédure du site primaire pour une installation multi-sites.

## 5.18.2. Procédure multi-sites

### 5.18.2.1. Cas du site primaire

La reconstruction se réalise de la manière suivante :

1. Arrêt de VITAM sur le site à reconstruire

   > - Utiliser le playbook `ansible-vitam-exploitation/stop_vitam.yml`

Il est indispensable de valider que tous les services VITAM (y compris les timers systemd) sont bien arrêtés

2. Purge des données (le cas échéant) stockées dans MongoDB-data, excepté les bases identity, config et admin :

   > - Utiliser le playbook `ansible-vitam-exploitation/start_mongodb.yml` pour démarrer les bases mongodb
   > - Procéder à la purge des données en utilisant l’outil mongo shell ou un outil équivalent :
   >     - Se connecter avec l’utilisateur `vitamdb-admin`
   >     - Lister les bases via la commande `show dbs`
   >     - Pour chacune des bases, excepté les bases identity, config et admin, les vider via la commande `db.getCollectionNames().forEach(function(x) {db[x].remove({})});`
   > - Utiliser le playbook `ansible-vitam-exploitation/stop_mongodb.yml` pour stopper les bases mongodb

3. Purge des données (le cas échéant) stockées dans Elasticsearch-data :

   > - Utiliser le playbook `ansible-vitam-exploitation/start_elasticsearch_data.yml` pour démarrer elasticsearch-data

   > - Dans le cas où Cerebro ou un outil équivalent est disponible, lister les indexes et les purger via l’IHM

   > - Sinon :
   >     - Se connectant en ssh sur un des nœuds elasticsearch-data
   >     - Lister les indexes ES via `curl 'http://localhost:9200/_cat/indices?v'`
   >     - Pour chacun des indexes, vider l’index via : `curl -XDELETE 'http://localhost:9200/{index_name}'`

   >     (Pour cette action de purge d’elasticsearch-data un playbook équivalent est disponible : `ansible-vitam-exploitation/clean_indexes_es_data.yml`)

   > - Utiliser le playbook `ansible-vitam-exploitation/stop_elasticsearch_data.yml` pour stopper elasticsearch-data

4. Reconfiguration et démarrage en tant que site secondaire:

   > - Paramétrer la variable `primary_site` à `false` dans le fichier d’inventaire puis utiliser le playbook `ansible-vitam/vitam.yml`

5. Dès lors, l’accès utilisateur reste coupé, et l’intégralité des données est reconstruite progressivement

   > - Le suivi de la reconstruction se fait en observant l’évolution de l’offset de reconstruction stocké dans MongoDB-data
   > - Pour la release 8, la procédure est décrite dans la section « Recalcul des données graphe »

6. La collection `Offset` de la base de données `metadata` est créée et permet de suivre l’avancement de la reconstruction.

7. Une fois la reconstruction terminée (plus de modification dans la collection `Offset`), il convient de reconfigurer en tant que site primaire, puis redémarrer :

   > - Paramétrer la directive `primary_site` à `true` puis utiliser le playbook `ansible-vitam/vitam.yml`

### 5.18.2.2. Cas du site secondaire

La reconstruction se réalise de la manière suivante :

1. Arrêt de VITAM sur le site à reconstruire

   > - Utiliser le playbook `ansible-vitam-exploitation/stop_vitam.yml`

Il est indispensable de valider que tous les services VITAM (y compris les timers systemd) sont bien arrêtés.

2. Purge des données (le cas échéant) stockées dans MongoDB-data, excepté les bases identity, config et admin (procédure identique au cas du site primaire)

3. Purge des données (le cas échéant) stockées dans Elasticsearch-data (procédure identique au cas du site primaire)

4. Redémarrage du site secondaire Vitam

   > - Utiliser le playbook `ansible-vitam-exploitation/start_vitam.yml`

   > - La prochaine itération de reconstruction au fil de l’eau redémarrera la reconstruction à partir du début

   > - Attendre la fin de la reconstruction au fil de l’eau sur le site secondaire

   >   > - Le suivi de la reconstruction se fait en observant l’évolution de l’offset de reconstruction stocké dans MongoDB-data
   >   > - Pour la release 7 (version 1.4.x) il faut lancer le service dédié `vitam-metadata-graph-builder.service` sur le composant metadata pour recalculer le graphe des unités archivistiques et des groupes d’objets techniques n’ayant pas encore reconstruit leurs données graphe

## 5.18.3. Contrôle des données reconstruites

La reconstruction des objets en base de données que ce soit sur MongoDB-data ou Elasticsearch-data est un processus long. Afin de contrôler si tous les objets ont été reconstruits ou si la reconstruction est toujours en cours il est nécessaire de compter les objets des collections Units et ObjectGroups de la base Metadata.

Un playbook a été réalisé afin de réaliser ce comptage à la fois sur Elasticsearch-data et sur MongoDB-data.

Il s’execute sur chacun des sites à comparer via le playbook `ansible-vitam-exploitation/reconstruction_doc_count.yml`.

À l’issue de l’exécution, le fichier environments/unit_got_docs_count.<site_name> est généré.