Ce wiki traite de la partie [serveur](https://fr.wikipedia.org/wiki/Serveur_informatique) de GlusterFS pour la partie [client](https://fr.wikipedia.org/wiki/Client_(informatique)) voyez ce wiki : [Monter un volume/répertoire GlusterFS sur Ubuntu/Debian](https://linuxfr.org/wiki/monter-un-volume-repertoire-glusterfs-sur-ubuntu-debian)
![logo glusterfs fourmis qui mange une feuille](https://framapic.org/iD0LBSZjAPpv/h3eeOOViKxvt.png)
#Qu'est-ce que GlusterFS ?#
[GlusterFS](https://www.gluster.org/) permet de créer des volumes/répertoires virtuels agrégeant un nombre X de serveurs. Pour cela GlusterFS crée des volumes (sorte de partition JBOD) à cheval sur les serveurs que vous stipulez lors de la création du volume et dispose d'un mode de redondance ([replication](http://www.gluster.org/community/documentation/index.php/Gluster_3.1:_Configuring_Distributed_Replicated_Volumes)) afin de lutter contre les pannes de stockage. Par défaut, sans réplication, gluster fait une sorte de raid0 (si vous uploader 10 fichiers sur un pool contenant deux Servers/Node, vous aurez 5 fichiers par server) ([source](http://www.gluster.org/community/documentation/index.php/QuickStart#Step_7_-_Testing_the_GlusterFS_volume)). Vous pouvez utiliser l'argument stripe nombreDecoupage si vous souhaitez que les fichiers soient découpé avec leur data propre dispersée sur les différents stockages (le but étant d'augmenter les performances en lecture).
En une phrase, il permet de faire un [cluster](https://fr.wikipedia.org/wiki/Grappe_de_serveurs) de stockage.
###GlusterFS supporte :###
* Les accès simultanés depuis plusieurs clients.
* [Les Quotas](http://www.gluster.org/community/documentation/index.php/Gluster_3.2:_Managing_Directory_Quota) (définir des tailles max pour les volumes)
* [géo-réplication](https://www.gluster.org/community/documentation/index.php/Gluster_3.2:_Starting_GlusterFS_Geo-replication) (utilise un mécanisme Master/Slave, certains préfèrent [passer par bittorent](http://blog.bittorrent.com/2013/09/10/sync-hacks-how-to-use-bittorrent-sync-as-geo-replication-for-storage/))
* [Snapshot](https://gluster.readthedocs.io/en/latest/Administrator%20Guide/Managing%20Snapshots/) ([instantanné](https://fr.wikipedia.org/wiki/Instantan%C3%A9_%28informatique%29) - [Documentation](http://www.gluster.org/community/documentation/index.php/Features/Gluster_Volume_Snapshot)).
* Gestion du nombre de [replication/copie](http://www.gluster.org/community/documentation/index.php/Gluster_3.1:_Configuring_Distributed_Replicated_Volumes) par volume/repertoire
###Les types de volume/répertoire sont :###
* **RAID0 non Strip / JBOD** (fichier) (les fichiers sont répartis sur les différentes unités de stockage (bricks), si vous perdez une unité les données sur les autres bricks sont encore valable et accessible)
* **RAID0 Strip** (data) (chaque fichier est découpé N fois et ses datas respective distribuées sur N espaces de stockage, en cas de perte d'une unité de stockage TOUTES les données sont perdues; [infos](http://www.gluster.org/community/documentation/index.php/Gluster_3.2:_Creating_Striped_Volumes))
* **Replication X** - Raid1 (les fichiers sont dupliqués X fois à travers les Nodes comme du Raid1, perdre une unité de stockage n'a aucune incidence sur les données)
* **Distributed Replicated** (les fichiers sont distribué sur certains nodes et dupliqués sur d'autres comme du Raid10; [infos](https://access.redhat.com/documentation/en-US/Red_Hat_Storage/2.1/html/Administration_Guide/sect-User_Guide-Setting_Volumes-Distributed_Replicated.html))
* **Distributed Stripped Replicated - RAID10 Strip** (chaque fichier est découpé en N morceau répartis sur N Nodes et répliqué X fois sur X Nodes)
###La mise en place est simple :###
1. vous installez le serveur sur au moins une machine
1. vous connectez les serveurs entre eux.
1. vous créez un volume virtuel
1. avec un logiciel client vous pouvez accéder à votre volume (qui se comporte comme une partition) en vous connectant à n'importe lequel des deux Serveurs/Nodes.
**Note :** vous pouvez [créer un raid local sur plusieurs disques](https://www.0rion.netlib.re/forum4/viewtopic.php?f=68&t=289&p=763#p763). Par contre vous ne pouvez hélas pas créer un raid gluster dans un autre raid/jbod gluster.
###Fonctionnement###
ndlr : simple et si possible imagé
_
______________
_
#Installer GlusterFS Server#
###Passez en admin (root)###
**Sur Ubuntu/Raspbian**
```
sudo su
```
**Sur Debian/Ubuntu minimal**
```
su
```
###Installez le logiciel glusterfs-server###
```
apt-get install glusterfs-server attr
```
**Note :** si vous souhaitez installer une version spécifique de Gluster utilisez l'attribut --version=id_version par exemple :
```
apt-get install glusterfs-server --version=3.7.15-ubuntu1~xenial1
```
Pour connaître la version du package installé, entrez dans un terminal
```
apt-show-versions glusterfs-server
```
###Donner le droits d'accès (rw) au fichiers log###
```
sudo chmod 644 /var/log/glusterfs/*.log
```
###Lancez le démon###
```
service glusterfs-server restart
```
_
_________
_
#Désinstaller glusterfs-server#
###Passez en admin (root)###
**Sur Ubuntu/Raspbian**
```
sudo su
```
**Sur Debian/Ubuntu minimal**
```
su
```
Au choix :
###Supprimez gluster sans supprimer les données (volumes, peer, etc)###
```
apt-get remove glusterfs-server
```
###Supprimez gluster ET ses données###
```
apt-get purge --auto-remove glusterfs-server
rm -R /etc/glusterfs
rm -R /var/lib/glusterd
```
_
_________
_
#Création de Raid#
##Créer un volume type RAID1 avec choix du nombre de réplication##
###Adaptez puis entrez cette commande dans votre terminal###
```
sudo gluster volume create NomVolume replica 2 transport tcp HOSTNAME_server1:/media/superPartition HOSTNAME_server2:/media/superPartition force
```
* _**HOSTNAME**_ => peut valoir l'ip, le nom de domaine ou tout path réseau valable d'un des server du cluster
* _**NomVolume**_ => le nom du volume dans dans la grille GlusterFS
* _**replica 2**_ => le nombre de fois que les fichiers doivent être dupliqué
* **_transport tcp_** => on utilise [TCP/IP](https://fr.wikipedia.org/wiki/Transmission_Control_Protocol)
* _**force**_ => ne se met qu'à la fin de la commande, permet d'utiliser le mode root
* exemple officiel : gluster volume create NEW-VOLNAME [replica COUNT] [transport tcp | rdma | tcp,rdma] NEW-BRICK...
###Ensuite démarrez votre volume/répertoire###
```
sudo gluster volume start NomVolume
```
**Note :** remplacez _**start**_ par _**stop**_ pour arrêter un volume (c'est un [umount](http://wawadeb.crdp.ac-caen.fr/iso/tmp/ressources/linux/doc.mandrakelinux.com/MandrakeLinux/100/fr/Command-Line.html/fs-and-mntpoints-mount.html) version gluster)
##Créer un volume avec un Arbitrer (replica 3 arbiter 1)##
**infos :** [Arbiter volumes and quorum options in gluster](https://gluster.readthedocs.io/en/latest/Administrator%20Guide/arbiter-volumes-and-quorum/)
(ndlr : à tester et corriger)
Le Nœud Arbitrer est chargé d'aider à élire un Noeud Maitre après une coupure réseau importante ([split brain](https://linuxfr.org/users/nicolasecarnot/journaux/systeme-de-fichiers-clusterise-ocfs2-gfs2-glusterfs-autres#comment-1705885)). Il est choisit automatiquement par GlusterFS parmi les Noeuds, il prend le troisième Nœud (bricks) et il n'est pas possible de le configurer/modifier ([source](http://staged-gluster-docs.readthedocs.io/en/release3.7.0beta1/Features/afr-arbiter-volumes/)).
Le paramètre replica doit être à 3 pour pouvoir utiliser un Arbitrer. Il faut donc au minimum 3 machines pour ce mécanisme.
**Note :** en raid1 (replica 2) lorsqu'une machine est absente tout est cassé. Ici (replica 3 arbiter 1) tant qu'au moins deux machines sur 3 de chaque séries sont connectées entre elles (peu importe lesquelles), tout continue de fonctionner.
```
sudo gluster volume create NomVolume replica 3 arbiter 1 transport tcp HOSTNAME_server1:/media/superPartition HOSTNAME_server2:/media/disque2 HOSTNAME_server3:/media/mon/path force
```
* _**HOSTNAME**_ => peut valoir l'ip, le nom de domaine ou tout path réseau valable d'un des server du cluster
* _**NomVolume**_ => le nom du volume dans dans la grille GlusterFS
* _**replica 3**_ => le nombre de fois que les fichiers doivent être dupliqué
* **_transport tcp_** => on utilise [TCP/IP](https://fr.wikipedia.org/wiki/Transmission_Control_Protocol)
* _**force**_ => ne se met qu'à la fin de la commande, permet d'utiliser le mode root
* exemple officiel : gluster volume create <VOLNAME> replica 3 arbiter 1 <NEW-BRICK>
_
___________________
_
_
_________
_
#Options & Utilisations#
**Note :** Pour utiliser les commandes suivantes dans un script vous devez ajouter en fin de commande **_force --mode=script_**
##Ajouter un Noeud/Node (ajouter peer)##
```
sudo gluster peer probe HOSTNAME
```
_**HOSTNAME**_ peut valoir l'IP, le nom de domaine ou tout path réseau valable d'un des server du cluster
**Note :** Une fois que le pool est établi, seuls les membres de confiance (trust) peuvent ajouter de nouveaux serveurs au pool. Un nouveau serveur ne peut PAS s'ajouter au pool, il doit être ajouté par le pool. ([source](http://www.gluster.org/community/documentation/index.php/QuickStart#Step_5_-_Configure_the_trusted_pool))
##Retirer un Noeud/peers (supprimer peer)##
```
sudo gluster peer detach HOSTNAME
```
_**HOSTNAME**_ peut valoir l'IP, le nom de domaine ou tout path réseau valable d'un des serveurs du cluster
**Note :** Tout les volumes ouvert en commun entre ses pairs (peers) doivent être stoppé AVANT.
##Retirer un Noeud/peers et les bricks liés##
###Récupérez les infos des bricks à supprimer###
```
sudo gluster volume info
```
###Soit on supprime le peer de son bricks###
```
sudo gluster volume remove-brick nomBricks replica 1 HOSTNAME:/media/monDisk/monDossier force
```
###Soit on supprime le bricks##
```
sudo gluster volume delete nomBricks
```
###Lancez enfin la commande pour détachez le Node/peers###
```
sudo gluster peer detach HOSTNAME
```
_**HOSTNAME**_ peut valoir l'IP, le nom de domaine ou tout path réseau valable d'un des server du cluster
**Note :** Tout les volumes ouvert en commun entre ses pairs (peers) doivent être stoppé AVANT.
##Ajouter un ou plusieurs serveurs à un volume / augmenter la taille d'un volume##
```
sudo gluster volume add-brick NomVolume HOSTNAME:/media/maPartition
```
**_NomVolume_** => le nom du volume dans dans la grille GlusterFS
**_HOSTNAME_** => peut valoir l'ip, le nom de domaine ou tout path réseau valable d'un des server du cluster
**_/media/maPartition_** => le path où stocker les données sur le serveur
Exemple officiel : _gluster volume add-brick VOLNAME NEW-BRICK_
Source : http://www.gluster.org/community/documentation/index.php/Gluster_3.2:_Expanding_Volumes
##Afficher le status des connexions en cours##
```
sudo gluster peer status
```
##Afficher les infos des volumes##
```
sudo gluster volume info
```
##Supprimer un serveur d'un volume en cours en mode répliqué (raid) /diminuer un volume##
```
sudo gluster volume remove-brick monVolume replica 2 HOSTNAME:/media/maPartition
```
**_NomVolume_** => le nom du volume dans dans la grille GlusterFS
**_replica 2_** => le nombre de replication
**_HOSTNAME_** => peut valoir l'ip, le nom de domaine ou tout path réseau valable d'un des server du cluster
_**/media/maPartition**_ => le path où stocker les données sur le serveur
**Source :** https://support.rackspace.com/how-to/add-and-remove-glusterfs-servers/
##Supprimer un volume##
```
sudo gluster volume delete NomVolume
```
**Note :** ça ne supprime pas les fichiers.
**Le volume doit être stoppé avant via**
```
sudo gluster volume stop NomVolume
```
##Lister les fichiers logs##
```
sudo ls /var/log/glusterfs/
```
##Restreindre l'accès à une ou plusieurs IP/plage d'IP##
```
sudo gluster volume set nomVolume auth.allow 192.168.1.2,192.168.*.1
```
_**nomVolume**_ => le nom identifiant votre volume
_**192.168.1.2,192.168.*.1**_ => un exemple d'ip suivis d'un exemple de plage d'ip à autoriser
**Note :** Fonctionne aussi si le volume est en cours de fonctionnement.
#Foire Aux Questions#
###Que se passe-t-il si on ajoute sur le serveur comme point de montage un dossier dans lequel il y a un ou des fichiers/dossiers?###
**Réponse :** Le ou les fichiers sont ignoré par GlusterFS purement et simplement. Ils sont toujours accessible via le système de fichier du serveur mais pas via un quelconque volume glusterfs.
###Que se passe-t-il si on ajoute sur le client comme point de montage un dossier dans lequel il y a un ou plusieurs fichiers/dossiers ?###
**Réponse :** Le ou les fichiers disparaissent jusqu'à ce que le volume soit démonté ([umount](https://doc.ubuntu-fr.org/montage#en_ligne_de_commande1)), il ne semble rien leur arriver de malheureux. Lorsque le volume est démonté en cas d'écriture vers son point de montage, alors les données sont écrites sur le disque dur principal (système), ce qui peut être un problème pour certains usages ([motion](https://doc.ubuntu-fr.org/motion) sur raspberry pi entre autre).
###Si un serveur doit lire des données, va-t-il uniquement le lire localement où va-t-il utiliser les autres serveurs afin de compenser la latence des disques dur?###
**Réponse :** les données sont envoyées/reçues vers les différents serveurs en même temps.
###Que se passe-t-il si un des bricks/disques dur tombe en panne en cours avec un volume fonctionnement ?###
Réponse : Si vous êtes en raid1, il n'y a aucune perte de données et le service continue de fonctionner mode osef. Si vous êtes en JBOD/raid0 non stripping, le point de montage est toujours accessible et seules les datas présentent sur le bricks planté ne sont plus accessible. Il va de soit que si le disque dur en panne était le seul ou le dernier représentant d'un volume, le volume tombe aussi.
###Peut-on synchroniser des serveurs en local (malgré un loopback foireux ([Hairpinning](https://fr.wikipedia.org/wiki/Hairpinning)) ###
Impossible d'utiliser le nom de domaine depuis l'intérieur du réseau) pour ensuite les disséminer sur d'autres connexions sans changer la configuration ? (et sans utiliser Tor)
**Réponse :** Une solution est de configurer en utilisant un hostname, puis en modifiant le ficher _/etc/hosts_ ([infos](http://www.commentcamarche.net/faq/5993-modifier-son-fichier-hosts)) pour indiquer les IP locales des différents Nodes correspondant à chaque nom de domaine. Une fois que les machines quittent votre réseau local vous devez bien entendu allez supprimer les valeurs temporaires.
###Quelques filtres d'affichages [wireshark](https://fr.wikipedia.org/wiki/Wireshark) pour zieuter tout cela ?###
**Réponse :** Entrez une des valeurs suivantes pour voir se qu'il se passe : _**glusterfs**_. Vous pouvez trouver la [liste des valeurs ici](https://www.wireshark.org/docs/dfref/g/glusterfs.html).
###Les communications sont-elles chiffrées ?###
**Réponse :** Par défaut Non, mais vous pouvez activer le chiffrement par TLS (ex-ssl) en suivant ce tuto : [GlusterFS Security](http://www.gluster.org/community/documentation/index.php/GlusterFS_Security).
###Les données stockées sur le(s) serveur(s) sont-elles chiffrées ?###
**Réponse :** Par défaut Non. Une feature/extension ([Doc - Features/disk-encryption](http://www.gluster.org/community/documentation/index.php/Features/disk-encryption)) est en fin de conception afin de rendre gluster compatible avec le chiffrement côté serveur (disk encryption).
###Quels sont les ports utilisés par les serveurs gluster ?###
**Réponse :** 111 ([portmap/rpcbind](https://fr.wikipedia.org/wiki/Portmap)), 24007 ([GlusterFS Daemon](http://www.gluster.org/community/documentation/index.php/Gluster_3.1:_Starting_the_glusterd_Daemon)), 24008 (GlusterFS Management) et un port par volume/répertoire à partir de 49152. Si vous utilisez [NFS](http://www.gluster.org/community/documentation/index.php/Gluster_3.2:_Using_NFS_with_Gluster) alors les ports 38465, 38466 et 38467 sont aussi requis.
**Source :** [Get started with GlusterFS - considerations and installation](https://support.rackspace.com/how-to/getting-started-with-glusterfs-considerations-and-installation/)
###Si on a un volume répliqué sur deux Nodes/Serveurs ("replicate 2") et que l'un d'eux n'est pas présent au démarrage de l'autre, le volume fonctionne-t-il?###
**Réponse :** Non (!!!), afin d'éviter un split brain (gluster ne pouvant savoir si le serveur est a jour ou non). Monter le volume devient impossible même en local (127.0.0.1) !.
###Quelle est la différence entre le paramètre "replicate" et "geo-replication"?###
**Réponse :** replicate applique les modifications en temps réelle sur tout les Serveurs d'un Volume et lit les données sur X Serveurs en même temps. Geo-replication par contre fait des mises à jours régulières des modifications du système de fichier depuis un serveur Maître vers des serveurs Esclaves et ne lit les données que depuis le serveur Maitre.
###Que se passe-t-il si le point de montage tombe en panne en cours de fonctionnement ?###
**Réponse :** Il est automatiquement remplacé par un autre en cas de mirroring.
###Que se passe-t-il si on fait un raid local (sur la même machine) et que la carte réseau n'est pas connectée###
**Réponse :** le raid/jbod ne sera pas accessible tant que la machine ne sera pas connectée au réseau et ce même si le raid/jbod est uniquement local.
_
____________________
_
#Farm Link#
* [[Tuto/HowTo] [Debian] [cluster] GlusterFS Server](https://www.0rion.netlib.re/forum4/viewtopic.php?f=68&t=298) (tuto d'origine)
* [Monter un volume/répertoire GlusterFS](https://linuxfr.org/wiki/monter-un-volume-repertoire-glusterfs-sur-ubuntu-debian)
* [[Projet] Le stockage distribué avec GlusterFS](https://www.guillaume-leduc.fr/le-stockage-distribue-avec-glusterfs.html)
* [HowTo:geo-replication](http://www.gluster.org/community/documentation/index.php/HowTo:geo-replication)
* [LinuxFr - GlusterFS 3.2 — La géo‐réplication](http://linuxfr.org/news/glusterfs%C2%A032-%E2%80%94%C2%A0la-g%C3%A9o%E2%80%90r%C3%A9plication)
* [DOC : Gluster 3.2: Creating Replicated Volumes](http://www.gluster.org/community/documentation/index.php/Gluster_3.2:_Creating_Replicated_Volumes)
* [DOC : Gluster 3.1: Automatically Mounting Volumes](http://www.gluster.org/community/documentation/index.php/Gluster_3.1:_Automatically_Mounting_Volumes)
* [DOC : Getting started install](http://www.gluster.org/community/documentation/index.php/Getting_started_install)
* [DOC : Gluster 3.1: Configuring Distributed Replicated Volumes](http://www.gluster.org/community/documentation/index.php/Gluster_3.1:_Configuring_Distributed_Replicated_Volumes)
* [ArchWiki - fstab](https://wiki.archlinux.org/index.php/fstab)
* [Mise en place d'un stockage partagé avec GlusterFS](http://www.supinfo.com/articles/single/171-mise-place-stockage-partage-avec-glusterfs)
* [Setting up GlusterFS with SSL/TLS](http://gluster.readthedocs.io/en/latest/Administrator%20Guide/SSL/?highlight=tls)
* [Gluster : Vulnerability Statistics](https://www.cvedetails.com/vendor/12480/Gluster.html)
* [Gluster : Security Vulnerabilities](https://www.cvedetails.com/vulnerability-list/vendor_id-12480/Gluster.html)
* [How to expand GlusterFS replicated clusters by one server](https://joejulian.name/blog/how-to-expand-glusterfs-replicated-clusters-by-one-server/)
* [Setting up GlusterFS Server Volumes](https://gluster.readthedocs.io/en/latest/Administrator%20Guide/Setting%20Up%20Volumes/)
* [Replicated Volumes vs Geo-replication](http://www.gluster.org/community/documentation/index.php/Gluster_3.2:_Replicated_Volumes_vs_Geo-replication)
* [[Tuto/HowTo] Formater les disques d'un volume GlusterFS sur Ubuntu](https://linuxfr.org/wiki/formater-les-disques-d-un-volume-gluster-sur-ubuntu)
* [Debugging GlusterFS with Wireshark](https://people.redhat.com/ndevos/talks/debugging-glusterfs-with-wireshark.d/debugging-with-wireshark.pdf)