GlusterFS

De UnixManiax
Révision datée du 13 décembre 2021 à 12:30 par AdminWiki (discussion | contributions) (Création initiale)
(diff) ← Version précédente | Voir la version actuelle (diff) | Version suivante → (diff)
Aller à la navigation Aller à la recherche


Présentation

GlusterFS est un système de fichiers distribué, accessible par le réseau, en mode clients/serveurs. On doit utiliser des systèmes de fichiers avec attributs étendus, comme XFS, ext4, ext3, ext2, ZFS, ReiserFS, btrfs et beaucoup d’autres. XFS est recommandé (https://docs.gluster.org/en/v3/Install-Guide/Common_criteria/). Chaque serveur s’appelle un nœud ou brique. En réalité, une brique est le filesystem dédié à GlusterFS sur un nœud. Mais par abus de langage, dans la plupart des docs qu’on trouve, les nœuds sont appelés briques. Minimum 2 briques. En réalité on peut en n’avoir qu’une, mais ça n’a aucun intérêt, autant faire un serveur NFS dans ce cas. Il n'y a pas de notion maître/esclave. Chaque fois qu'on ajoute une brique, le système devient plus performant.

Plusieurs types de volumes :

Mise en place

Gluster stocke ses fichiers de conf dynamiquement dans /var/lib/glusterd. Si jamais le filesystem se rempli, ça pourrait rendre le service instable, voire le planter complètement. Il est donc conseillé de le séparer de /var/log, voire de le mettre tout seul.

Installation des packages

Exemple sur Debian10 :

# apt install glusterfs-server -y
# systemctl enable --now glusterd

Exemple sur CentOS 8 :

# dnf install centos-release-gluster -y
# dnf install -y glusterfs-server
# systemctl enable --now glusterd glusterfsd

Ouverture des flux

Sur CentOS 8, ou une autre distribution avec firewalld actif, il faut ouvrir le service glusterfs :

# firewall-cmd --zone=public --add-service=glusterfs
# firewall-cmd --zone=public --add-service=glusterfs --permanent

Ce service inclus les ports suivants : 24007/tcp, 24008/tcp, 24009/tcp, 38465/tcp, 38466/tcp, 38467/tcp, 38468/tcp, 38469/tcp et la plage 49152-49664/tcp. A noter que cette liste me paraît très large. Sur le site de glusterfs, pour la 3.7.0 beta 1, ils ne parlent que de 24007/tcp, 24008/tcp et 49152 à 49156/tcp ([[1]]).

Trusted pool

Supposons que nous avons deux briques : brick1 et brick2. Une fois que les briques sont installées, il faut les associer. Les briques se reconnaissent au sein de ce qu'on appelle un trusted pool. Pour cela, aller sur une des briques, par exemple brick1, et taper :

brick1# gluster peer probe brick2
peer probe : success.

Pour vérifier :

# gluster peer status
Number of Peers: 1

Hostname: brick2
Uuid: 2b5f991b-8a43-43fc-836b-f6292157489a
State: Peer in Cluster (Connected)

Pour afficher la liste de briques :

# gluster pool list
UUID						Hostname     State
2b5f991b-8a43-43fc-836b-f6292157489a	brick2		Connected 
9189775d-c84f-48a8-93bc-85e3a10af75d	localhost    Connected

Si on veut supprimer une brique du pool :

# gluster peer detach brick2

Création d'un volume répliqué

Sur brick1, on a créé un point de montage /Gluster/Volumes en XFS. Sur brick2, on a créé un point de montage /gluster/volumes en ext4. On ne peut pas créer de volume directement sur un point de montage, donc on va créer des sous-répertoires. Sur brick1, on créé /Gluster/Volumes/Volume1. Sur brick2, on créé /gluster/volumes/volume1. J'ai fait exprès de mettre des majuscules d'un côté et des minuscules de l'autre, pour montrer que ça n'a aucune importance d'avoir des noms et arborescences différentes sur les briques.

On va créer un volume miroir nommé "volume1", avec 2 replicas, en utilisant le transport tcp :

# gluster volume create volume1 replica 2 transport tcp brick1:/Gluster/Volumes/Volume1 brick2:/gluster/volumes/volume1
Replica 2 volumes are prone to split-brain. Use Arbiter or Replica 3 to avoid this. See: 
http://docs.gluster.org/en/latest/Administrator%20Guide/Split%20brain%20and%20ways%20to%20deal%20with%20it/.
Do you still want to continue?
 (y/n) y
volume create: volume1: success: please start the volume to access data

On voit l'avertissement disant qu'il est préférable d'avoir au moins 3 briques. Malgré tout, on créé le volume. Pour voir :

# gluster volume list
volume1
root@emmabuntus:~# gluster volume status
Volume volume1 is not started

On voit que le volume est créé, mais pas démarré. Pour le démarrer et vérifier :

# gluster volume start volume1
volume start: volume1: success

# gluster volume list
volume1

# gluster volume status
Status of volume: volume1
Gluster process				TCP Port  RDMA Port  Online  Pid
------------------------------------------------------------------------------
Brick brick1:/Gluster/Volumes/Volume1	49152     0          Y       1737 
Brick brick2:/gluster/volumes/volume1	49152     0          Y       1925 
Self-heal Daemon on localhost		N/A       N/A        Y       1948 
Self-heal Daemon on brick1		N/A       N/A        Y       1760 

Task Status of Volume volume1
------------------------------------------------------------------------------
There are no active volume tasks

Montage depuis un client

Installer le package "glusterfs-client". Monter en précisant une des briques et en indiquant le point de montage :

# mount -t glusterfs brick1:/volume1 /mnt

Ou depuis /etc/fstab :

brick1:/volume1 /mnt glusterfs defaults 0 0

A noter qu'au lieu d'utiliser le client natif gluster comme on vient de le faire, on peut aussi utiliser NFS ou CIFS/samba. Mais dans ce cas il est préférable de mettre les nœuds en cluster de type CTDB (cluster NFS) pour avoir de la haute disponibilité. C'est donc beaucoup plus contraignant. Lors du montage, on doit indiquer le nom d'une des briques (ici brick1). Mais le client récupère ensuite la liste de toutes les briques et peut communiquer avec n'importe laquelle.

Paramétrage du volume

Timeout

Par défaut, le timeout pour qu'un client bascule d'une brique à l'autre, en cas d'indisponibilité, est de 42 secondes. Ça peut paraître très long. Voici comment le passer à 5 secondes.

# gluster volume set volume1 network.ping-timeout 5

Limiter les accès

Pour limiter l'accès d'un volume aux machines du réseau 10.34.210.0/24 :

# gluster volume set volume1 auth.allow 10.34.210.*

On peut mettre plusieurs ips ou réseaux en les séparant par des virgules. Pour revenir au comportement par défaut, il faut autoriser "*". A l'inverse, on peut autoriser tout le monde, sauf des ips, avec le paramètre auth.reject. Dans ce cas, pour revenir au comportement par défaut, on va rejeter "NONE".

Quotas

On peut activer des quotas pour le volume au niveau des sous-répertoires. Il faut d'abord activer les quotas :

# gluster volume quota volume1 enable

Puis on défini la valeur :

# gluster volume quota volume1 limit-usage /sous-repertoire 100M

Pour voir l'état des quotas :

# gluster volume quota volume1 list

Corbeille

On peut activer une corbeille pour conserver les fichiers supprimés. On peut également limiter la taille aux fichiers de moins de 10Mo.

# gluster volume set volume1 features.trash on
# gluster volume set volume1 features.trash-dir "Poubelle"
# gluster volume set volume1 features.trash-max-falesize 10485760

On peut également activer la corbeille pour les opérations internes comme "rebalance" (par défaut à off) :

# gluster volume set volume1 features.trash-internal-op on

Administration courante