**GlusterFS** est un système de fichier distribué permettant d'utilisé le stockage de plusieurs serveurs pour un seul système de fichier. On peut l'utilisé en mode réplication, où chaque fichier est répliquer sur plusieurs serveurs afin d'augmenter sa disponibilité en cas de coupures (un peu comme du RAID1), ou en mode distribué, où les fichiers ne sont pas tous sur un même serveur (un peu comme du RAID0), ou un mixe des deux.
## Vocabulaire de GlusterFS
<dl>
<dt>Cluster</dt>
<dd>Un groupe de serveurs partageant une configuration GlusterFS commune.</dd>
<dt>Peer</dt>
<dd>Un serveur qui est membre du cluster.</dd>
<dt>Brick</dt>
<dd>L'emplacement physique utilisé pour le stockage des données d'un volume.</dd>
<dt>Volume</dt>
<dd>Un stockage logique exporté par GlusterFS.</dd>
Après avoir installé `glusterfs-server` sur l'ensemble des serveurs du future cluster, il faut ajouté les serveurs à leur liste de serveurs de confiance. glusterd s'occupe de communiquer la liste entre chaque serveur déjà présent dans la liste, et l'ajout est symétrique, il suffit donc de faire la commande suivante sur une seule machine du cluster (1 fois par serveur à ajouté) :
> Note : Les serveurs doivent pouvoir communiquer entre eux sans restriction au niveau réseau (techniquement ils ont besoin d'accès à : 24007/TCP, 24008/TCP, */UDP et `base-port`-`max-port`/TCP (à priori 49152-60999/TCP)). Le port 24007 étant particulièrement important, étant celui utilisé pour ajouté des serveurs dans la liste des serveurs de confiances.
> Note: Un volume en mode replica avec seulement 2 réplication comme ci-dessus est fortement sensible aux split-brain, il est donc recommandé d'utilisé au moins 3 serveurs et `replica 3`. En général, le mode réplica devrait être utilisé avec `2n+1` replica, où `n` est le nombre de serveurs de stockage pouvant tomber sans coupures de service.
> Ce plugin, sans modification, provoque des faux-positifs dans le cas où glusterfs n'utilise pas les FQDN des serveurs.
Le monitoring de glusterfs au niveau des serveurs glusterfs peut ce faire avec le plugin [atlantos/nagios-check-gluster](https://github.com/atlantos/nagios-check-gluster).
Celui-ci surveille :
* que glusterd soit bien démarré sur le serveur,
* que les peer sont bien connectés,
* que les volumes sont bien démarrés,
* que les services servant à l'export des données des volumes soient bien démarrés,
* (si voulu, et par défaut) que les services de correction automatique de la synchronisation soient bien démarrés,
* (si voulu, et par défaut) que les services de détection du "Bitrot" soient bien démarrés,
* (si voulu, et par défaut) que les services (interne) d'export par NFS soient bien démarrés (il ne sont pas utilisé lors de l'export par Ganesha),
* (si voulu, et par défaut) qu'il n'y a pas de problèmes de synchronisation,
* (si voulu, et par défaut) que le check de "Bitrot" ne retourne aucune erreur.
> Glusterd peut techniquement exporté nativement un volume par NFS mais cette fonctionnalité n'est pas compilé dans le paquet dans les dépôts Debian.
> L'export par Ganesha est aussi nécessaire pour faire de la Haute Disponibilité avec NFS.
L'export d'un volume GlusterFS par NFS peut se faire par [Ganesha](https://nfs-ganesha.github.io/). Pour ce faire, il faut installer les paquets `nfs-ganesha` et `nfs-ganesha-gluster` :
~~~
apt install nfs-ganesha nfs-ganesha-gluster
~~~
Il faut ensuite définir un export tel que :
~~~
EXPORT {
Export_Id = <nombre>; # Identifiant interne à Ganesha pour cet export, doit être un nombre entre 1 et 65535
Path = "<volume_path>"; # Chemin du volume à être exporter, peut être '/<volume_name>' par exemple
Pseudo = "<pseudo_path>"; # pseudo chemin pour NFSv4
Access_Type = <None|RW|RO|MDONLY|MDONLY_RO>;
FSAL {
Name = "GLUSTER";
Hostname = "<nom_de_domaine|adresse_ip>"; # Adresse du serveur glusterfs à contacté, probablement localhost
Volume = "<nom_du_volume_glusterfs>";
}
}
~~~
et configuré ganesha pour glusterfs (fichier: `/etc/ganesha/ganesha.conf`):