# 5.11.19. Mongodb

## 5.11.19.1. Base mongo-data

Base de données dédiée de type documents, utilisée pour le stockage des données métier (un cluster mongodb par site).

Type :
  COTS
Données stockées :
  - Données d’archives
  - Journaux métier
  - Référentiels métier
Typologie de consommation de ressources :
  - CPU : moyenne
  - Mémoire : forte
  - Réseau : forte
  - Disque : forte

## 5.11.19.2. Base mongo-offer

Base de données dédiée à chaque offre de stockage utilisée pour la persistence des données techniques des offres (un cluster mongodb par offre de stockage).

Type :
  COTS
Données stockées :
  - Offset d’écriture dans les offres
  - Catalogue technique pour les offres froides : Listing des bandes magnétiques, des objets archivés sur bandes…
Typologie de consommation de ressources :
  - CPU : moyenne
  - Mémoire : forte (en particulier pour une offre froide)
  - Réseau : forte (en particulier pour une offre froide)
  - Disque : forte (en particulier pour une offre froide)

## 5.11.19.3. Architecture de déploiement

### 5.11.19.3.1. Architecture 1 noeud

L’architecture à 1 noeud est uniquement constituée d’un noeud mongod ; elle n’est pas supportée par VITAM.

### 5.11.19.3.2. Architecture distribuée

Une architecture MongoDB distribuée utilise les notions suivantes :

- Sharding
    - Mongodb utilise le sharding pour scaler la base de données (scalabilité horizontale)
    - Le sharding distribue les données à travers les n partitions physiques (shards) dont le cluster est composé
    - Bien choisir la clé de sharding est primordial pour une répartition égale des documents insérés dans les différents shards
    - Chaque shard est composé d’un Replica Set
- Replica Set (RS)
    - Les Replica Sets assurent la haute disponibilité de Mongodb
    - Un Replica Set est (règles Mongodb de production) composé de `2 x n + 1` noeuds, avec `n >= 1` (1 noeud primaire, les autres étant des noeuds secondaires) ; le noeud primaire est choisi de manière arbitraire par MongoDB dans la liste des noeuds du Replica Set
    - L’écriture se fait obligatoirement sur le noeud primaire
- Replica Set de config
    - Un Replica Set est dédié pour le stockage de la configuration du cluster
    - Comme tous les autres Replica Sets, il est recommandé de le peupler de `2 x n + 1` noeuds, avec `n >= 1`
- Routeur de requêtes
    - Le routeur mongos permet de rediriger une requête sur le ou les shards requis, en fonction de la clé de sharding ; il agit comme coordinateur de requête

Une architecture MongoDB distribuée comprend 3 types de noeuds différents :

- mongod : stockent les données des Replica Sets métier ;
- mongos : routent les requêtes ;
- mongoc : stockent les données d’état et de configuration du cluster (ces noeuds utilisent en fait un moteur mongod, mais pour un Replica Set particulier : le Replica Set de configuration).

Déploiement d’un cluster Mongo DB avec sharding.

L’architecture proposée dans le cadre de VITAM consiste à séparer les noeuds liés au routage des requêtes et de gestion du cluster d’une part (donc de colocaliser mongos et mongoc), avec les noeuds de stockage des données (mongod) d’autre part.

Ainsi, avec n shards et r noeuds par Replica Set (cluster), on obtient le déploiement suivant :

- au moins 3 serveurs config / service, chacun hébergeant:

  > - 1 noeud mongos (service)
  > - 1 noeud mongoc (Replica Set de configuration)

- n x r serveurs, chacun hébergeant:

  > - 1 noeud mongod

Note

Une typologie de cluster complète (mongos, mongoc, mongod) est systématiquement déployée dans le cadre de la solution logicielle VITAM, cela afin de permettre une extension ultérieure du cluster par le rajout d’un nouveau shard et le rééquilibrage du cluster, et ce même si un seul shard est instancié au démarrage.

Prudence

Une colocalisation des composants (mongos, mongoc & mongod) reste possible dans un déploiement avec un seul shard; cette colocalisation n’est plus possible dans le cas d’un déploiement multi-shardé et il sera nécessaire d’avoir des noeuds dédiées (mongos & mongoc) et des noeuds dédiés pour chacun des shards (mongod) selon les recommandations précédentes.

### 5.11.19.3.3. Ports utilisés

Les ports utilisés par mongodb sont les suivants:

- `tcp:27017` : Port de communication pour les noeuds mongos
- `tcp:27018` : Port d’écoute des noeuds du Replica Set de config (mongoc)
- `tcp:27019` : Port d’écoute des noeuds du/des Replica Set(s) de données (mongod)