wiki/HowtoGlusterFS.md

186 lines
4.8 KiB
Markdown
Raw Normal View History

2023-08-30 17:36:17 +02:00
---
categories: cloud storage haute-disponibilite
2023-09-05 16:15:03 +02:00
title: Howto GlusterFS
2023-08-30 17:36:17 +02:00
...
* Documentation : <https://docs.gluster.org/en/latest/>
**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>
</dl>
2018-07-10 15:28:17 +02:00
## Configuration d'un nouveau cluster
### Installation
~~~
# apt install glusterfs-server
~~~
2023-08-30 17:36:17 +02:00
Il est ensuite possible de vérifié que glusterfs est installé avec :
~~~
# glusterd --version
glusterfs 9.2
Repository revision: git://git.gluster.org/glusterfs.git
[...]
~~~
### Création du cluster
2023-08-30 17:36:17 +02:00
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é) :
~~~
srv1# gluster peer probe <adresse IP srv2>
peer probe: success.
~~~
2023-08-30 17:36:17 +02:00
> Note : Les serveurs doivent pouvoir communiquer entre eux sans restriction au niveau réseau.
2023-08-30 17:36:17 +02:00
Pour vérifier que les serveurs ont bien était ajoutés, faire la commande suivante sur un des serveurs du cluster :
~~~
# gluster peer status
Number of Peers: 1
Hostname: xxx
Uuid: xxxxx
State: Peer in Cluster (Connected)
~~~
### Création d'un volume
2023-08-30 17:36:17 +02:00
Ici `/srv/gluster/` est un montage d'un volume dédié pour GlusterFS et le volume à créer se nomme `foovol`.
Créer le répertoire sur chaque serveur :
~~~
# mkdir /srv/gluster/foovol
~~~
Puis sur un des serveurs, créer le volume GlusterFS
~~~
# gluster volume create foovol replica 2 <IP srv1>:/srv/gluster/foovol <IP srv2>:/srv/gluster/foovol
volume create: foovol: success: please start the volume to access data
# gluster volume start foovol
volume start: foovol: success
~~~
2023-08-30 17:36:17 +02:00
> 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.
Vérification :
~~~
# gluster volume info
2023-08-30 17:36:17 +02:00
gluster volume info
Volume Name: foovol
Type: Replicate
Volume ID: [...]
Status: Started
Snapshot Count: 0
Number of Bricks: 1 x 2 = 2
Transport-type: tcp
Bricks:
Brick1: <addresse IP srv1>:/srv/gluster/foovol
Brick2: <addresse IP srv2>:/srv/gluster/foovol
[...]
~~~
Sur la machine cliente, on peut maintenant monter le volume :
~~~
# echo "srv1:/foovol /mnt/foovol glusterfs defaults 0 0" >>/etc/fstab
# mkdir /mnt/foovol
# mount /mnt/foovol
~~~
## Administration
2023-08-30 17:36:17 +02:00
Vérifier l'état global des volumes GlusterFS :
~~~
# gluster volume status <volume|all>
~~~
Obtenir la liste des clients glusterfs et leur utilisation des différentes brick :
~~~
# gluster volume status <volume|all> clients
~~~
Autres informations :
2016-11-11 13:20:23 +01:00
~~~
2023-08-30 17:36:17 +02:00
# gluster volume status <volume|all> (mem|fd|inode|callpool)
2016-11-11 13:20:23 +01:00
~~~
2018-02-27 18:28:43 +01:00
2023-08-30 17:36:17 +02:00
### Lister les peers
2018-02-27 20:51:38 +01:00
~~~
# gluster peer status
~~~
2023-08-30 17:36:17 +02:00
### Lister les volumes
2018-02-27 18:28:43 +01:00
~~~
2018-02-27 20:52:01 +01:00
# gluster volume list
2018-02-27 18:28:43 +01:00
~~~
2023-08-30 17:36:17 +02:00
#### Voir la santé du volume "foo"
2018-02-27 18:28:43 +01:00
~~~
# gluster volume heal foo info
~~~
2023-08-30 17:36:17 +02:00
#### Forcer un 'heal' pour le volume "bar"
2018-02-27 18:28:43 +01:00
~~~
# gluster volume heal bar
~~~
2018-07-10 15:28:17 +02:00
2023-08-30 17:36:17 +02:00
## Cas pratiques
2018-07-10 15:28:17 +02:00
2023-08-30 17:36:17 +02:00
### Récupération d'un split-brain - Forcer l'utilisation d'un réplicas comme source de résolution
2018-07-10 15:28:17 +02:00
Dans une situation de split-brain, on peut avoir :
~~~
# gluster volume heal foo info
Brick tic.example.net:/srv/gluster/foovol
<gfid:1b82dc4fd-3d3f-4dc1-89a9-0783b2c10bc> - Is in split-brain
Status: Connected
Number of entries: 1
Brick tac.example.net:/srv/gluster/foovol
<gfid:1b82dc4fd-3d3f-4dc1-89a9-0783b2c10bc> - Is in split-brain
Status: Connected
Number of entries: 1
~~~
Dans ce cas, on peut définir que c'est le réplica "tic" qui va être utilisé pour rétablir le reste du cluster avec la commande :
~~~
# gluster volume heal foo split-brain source-brick tic.example.net:/srv/gluster/foovol gfid:1b82dc4fd-3d3f-4dc1-89a9-0783b2c10bc
Healed gfid:1b82dc4fd-3d3f-4dc1-89a9-0783b2c10bc
~~~
[Plus de documentation](https://docs.gluster.org/en/v3/Troubleshooting/resolving-splitbrain/)