GlusterFS
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