# Moose File System

Moose File System (MooseFS) est un système de fichiers distribué développé par Gemius SA. Le développeur principal est Jakub Kruszona-Zawadzki. MooseFS se veut tolérant aux pannes, redimensionnable, compatible POSIX, et générique. Le code préalablement propriétaire a été libéré et mis à disposition publiquement le 5 mai 2008.

## Fonctionnement

MooseFS suit en grande partie les mêmes concepts que Google File System, Lustre ou Ceph. Le système de fichier est composé de trois éléments:
* Serveur de Métadonnées (MDS) — qui gère la répartition des fichiers, leur accès et l'espace de nommage. La version actuelle (2.0+) de MooseFS supporte la présence de MDS multiples. Les clients ne s'adressent au MDS que pour récupérer ou mettre à jour la disposition d'un fichier et ses attributs; les données sont transférées directement entre les clients et les serveurs « chunk ». Le serveur de métadonnées est un démon fonctionnant en espace utilisateur. Les métadonnées sont conservées en mémoire et stockées de manière « paresseuse ».
* Serveur Métajournal (Metalogger server) — qui récupère régulièrement les métadonnées du MDS et les stocke en tant que sauvegarde. Il existe depuis la version 1.6.5, et son fonctionnement est optionnel.
* Serveur Chunk (CSS) — qui stocke les données et éventuellement les réplique. Ils peuvent être en grand nombre, bien que la limite de montée en charge ne soit pas connue. La plus grosse grappe connue est composée de 160 serveurs. Le serveur chunk est lui aussi un démon fonctionnant en espace utilisateur, s'appuyant sur le système de fichier local pour gérer le stockage des données.
* Enfin, les clients — qui s'adressent au MDS et aux CSS. Les clients MooseFS montent le système de fichiers en espace utilisateur à l'aide de FUSE.

## Fonctionnalités

Afin d'offrir une haute disponibilité et de bonnes performances, MooseFS propose les fonctionnalités suivantes :
* Tolérance aux pannes — MooseFS utilise la réplication. Les données sont répliquées parmi les serveurs chunk. Le ratio de réplication (N) est défini par fichier ou répertoire. Si (N-1) réplicas échouent, les données restent accessibles. Actuellement, MooseFS ne propose pas d'autres méthodes pour assurer la tolérance aux pannes, telles que la redondance via RAID réseau. La tolérance aux pannes nécessite donc beaucoup d'espace pour les très gros fichiers - N*taille du fichier au lieu de taille du fichier+(N*taille des bandes), comme cela serait le cas pour le RAID 4, RAID 5 ou le RAID 6.
* Découpage des données — Les gros fichiers sont divisés en morceaux (chunks), d'une taille pouvant aller jusqu'à 64 mégaoctets qui peuvent être stockés sur différents serveurs chunks afin d'obtenir une bande passante agrégée plus élevée.
* Répartition de charge — MooseFS essaie d'utiliser les ressources de stockage de manière égale. Si le volume MooseFS est plein à 40 %, l'algorithme utilisé actuellement tâchera de remplir chaque espace de stockage de chaque serveur chunk à 40 %.
* Sécurité — En dehors des permissions POSIX classiques, MooseFS offre depuis la version 1.6 un système simple d'authentification, ressemblant à celui de NFS : authentification/autorisation.

## Matériel, logiciel, et réseau

Tout comme d'autres systèmes de fichiers distribués, les serveurs MooseFS n'ont pas besoin de matériel particulier. Il suffit d'un système d'exploitation compatible POSIX. TCP/IP est utilisé pour connecter les machines.