[ NIVEAU ] Débutant
Cette procédure permet l’installation d’un serveur permettant de stocker des fichiers. Il distribura ses fichiers pour l’ensemble du Datacenter par l’intermédiaire du service “GlusterFS”.
Pré-requis
Pour exécuter cette opération vous devez :
- disposer d’un serveur Raspberry PI4 muni de RaspiOS 64bits ou bien d’un Rock64 muni de ArmBian 64Bits
- avoir suivi la procédure : Suivre la procédure concernant l’installation des systèmes d’exploitation
- savoir exécuter une commande dans une console Linux
- savoir utiliser l’éditeur “vi”
- être connecté “root” à la console, pour les utilisateur sudo : tapez
sudo bash
- disposer d’un disque de stockage USB, pour des raisons de performance, préférez un disque SSD - USB3. Adaptez la taille du volume à vos besoins.
Pourquoi GlusterFS ?
Le plus simple aurait été d’installer un serveur NFS, mais la particularité de GlusterFS est qu’il peut être étendu comme un service RAID. Si dans le temps pour souhaitez disposer d’une copie “temps réel” de vos fichiers, il suffira d’ajouter un serveur et de l’intégrer au cluster GlusterFS.
Installation et montage du disque SSD chiffré.
Suivre la procédure permettant de chiffrer le contenu d’un disque.
Installation des paquets nécessaires
apt-get -y update
apt-get -y install glusterfs-server
# enable at boot
systemctl enable glusterd
systemctl start glusterd
systemctl status glusterd
La console doit renvoyer “Active: active” :
glusterd.service - GlusterFS, a clustered file-system server
Loaded: loaded (/lib/systemd/system/glusterd.service; disabled; vendor preset: enabled)
Active: active (running) since Wed 2020-12-23 18:18:22 CET; 8s ago
Paramétrage GlusterFs
Création des volumes GlusterFS
L’objet de cette procédure est de créer deux volumes GlusterFS pour : nextcloud et matrix. Le disque est monté sur "/Disk1" et dispose de deux répertoires : “nextcloud”, “matrix” Je vais donc créer deux volumes qui seront ensuite partagés par GlusterFS.
ATTENTION : Pour des répertoires comportant déjà des fichiers : voir plus bas le chapitre “Problèmes rencontrés”
# Initialisation du réseau Gluster
gluster peer probe $(hostname)
# Réponse :
# peer probe: success.
# Création des volumes nommé gfsvol-nextcloud et gfsvol-matrix
gluster volume create gfsvol-nextcloud $(hostname):/Disk1/nextcloud
# Réponse :
# volume create: gfsvol-nextcloud: success: please start the volume to access data
gluster volume create gfsvol-matrix $(hostname):/Disk1/matrix
# Réponse :
# volume create: gfsvol-matrix: success: please start the volume to access data
# Démarrage du volume
gluster volume start gfsvol-nextcloud
# Réponse :
# volume start: glusterfsvolume: success
gluster volume start gfsvol-matrix
# Réponse :
# volume start: glusterfsvolume: success
Gestion des volumes
Opérations | Commandes | Remarques |
---|---|---|
Créér un volume | gluster volume create [nom du volume] $(hostname):[Chemin du répertoire local] | |
Démarrer un volume | gluster volume start [nom du volume] | démarrre le partage |
Stopper un volume | gluster volume stop [nom du volume] | stoppe le partage |
Supprimer un volume | gluster volume delete [nom du volume] | Ne supprime pas les données contenu dans le volume |
Statut du cluster
gluster v status
Doit renvoyer un résultat similaire :
Status of volume: gfsvol-matrix
Gluster process TCP Port RDMA Port Online Pid
------------------------------------------------------------------------------
Brick raspi6:/Disk1/matrix-synapse 49153 0 Y 1043
Task Status of Volume gfsvol-matrix
------------------------------------------------------------------------------
There are no active volume tasks
Status of volume: gfsvol-nextcloud
Gluster process TCP Port RDMA Port Online Pid
------------------------------------------------------------------------------
Brick raspi6:/Disk1/nextcloud 49152 0 Y 1000
Task Status of Volume gfsvol-nextcloud
------------------------------------------------------------------------------
There are no active volume tasks
Vérifications Post-installation
Il est important de vérifier à partir d’un autre serveur, l’accessibilité des volumes :
apt-get -y install glusterfs-client
# Puis monter un volume
mount -t glusterfs [Ip serveur gluster]:[nom de volume] [Point de montage]
# ex : mount -t glusterfs 192.168.1.53:nextcloud-config /mnt
Vérifier :
- Le système de fichier comporte des fichiers (commande ls)
- Le contenu d’un fichier (commande cat)
- Créer un dossier/répertoire
- Supprimer un dossier/répertoire.
# Démonter le système de fichier
umount /mnt
Ouverture des ports de communication (Firewall)
Protocole | Port | Sens | Remarque |
---|---|---|---|
TCP | 24007 | Input | |
TCP | 49152 | Input | Premier volume partagé |
TCP | 49153 | Input | Second volume partagé |
TCP | 4915X | Input | Xeme volume partagé |
TCP | 491XX | Input | XXeme volume partagé |
Glusterfs utilise un port par volume partagé, et commence à 49152.
Liste des ports ouverts par Glusterfs
En utilisant la commande gluster v status
:
echo "Ports ouverts pour les volumes Gluster"
PORTS=`service glusterd status | grep "listen-port" | sed 's/.*\.listen-port=//'|sort -u`
echo "$PORTS"
Ajout des règles firewall
## Interface réseau datacenter
IFACE=eth0
## Chemin iptables
IPT="/usr/sbin/iptables"
## Liste des ports
PORTS=`service glusterd status | grep "listen-port" | sed 's/.*\.listen-port=//'|sort -u`
## Ajout des règles - Ouverture firewall input/output
for P in $PORTS
do
echo "Opening port $P"
$IPT -m comment --comment "[GLUSTERFS] Volume INPUT $P" -A INPUT -i $IFACE -p tcp -m tcp --dport $P -j ACCEPT
if [ "$?" != "0" ];then
echo "Error - iptables - INPUT $P"
exit 1
fi
$IPT -m comment --comment "[GLUSTERFS] Volume OUTPUT $P" -A OUTPUT -o $IFACE -p tcp -m tcp --sport $P -m state --state RELATED,ESTABLISHED -j ACCEPT
if [ "$?" != "0" ];then
echo "Error - iptables - OUTPUT $P"
exit 1
fi
done
echo "Sauvegarde des règles"
/usr/sbin/iptables-save > /etc/iptables/rules.v4
Sauvegarde/Restauration des fichiers
Personnellement j’effectue une sauvegarde quotidienne externe, vers une “box de stockage” joignable par sshs ou borgbackup. Avec “Borgbackup”, les fichiers sont chiffrés au moyen d’une clé personnelle, l’hébergeur ne peut, par conséquent, pas “voir” le contenu du stockage.
Conclusion
Le service GlusterFS est démarré. Cette procédure n’aborde pas la réplication, mais une fois initialisé, il est assez trivial d’ajouter des serveurs pour implémenter une réplication.
Problèmes rencontrés
Déplacement de volumes - volume create: xxxxxxx: failed: xxxx/xxx is already part of a volume
J’ai déplacé un répertoire associé à un volume Gluster sans le stopper, il est donc impossible de le recréer. Il faut réinitialiser les attributs du volume, exemple le problème est situé sur /Disk/config, impossible de créer le volume avec le message “volume create: nextcloud-config: failed: /Disk/config is already part of a volume”
setfattr -x trusted.glusterfs.volume-id /Disk/config
setfattr -x trusted.gfid /Disk/config
rm -rf /Disk/config/.glusterfs
ou bien supprimer le répertoire (ici /Disk/config) puis le re-créer, cà marche aussi :)
Création d’un volume avec des données existantes
J’ai créé un volume à partir d’un répertoire disposant déjà de tous les fichiers de données Nextcloud. Ce n’est pas la bonne pratique, puisque ce sont les clients Gluster qui permettent de mettre à jour les meta-données de GlusterFS. La conséquence : Les données sur le serveurs existent, mais les clients ne “voient” qu’une partie de ces fichiers. J’ai trouvé un lien permmettant d’y remédier, je ne l’ai pas essayé (lien trouvé après avoir reinjecté les donnéees au travers d’un client gluster) :
Exemple:
- déplacez vos données nextcloud vers /Disk1/datanextcloud,
- création du volume glusterfs, avec ce répertoire qui comporte une multitude de fichiers :
gluster v create gfs-nextcloudata $(hostname):/Disk1/datanextcloud
- Je me connecte avec un client, le client ne voit qu’une dizaine de fichiers !!!!
- Proposition de Chris :
# Sur le serveur Gluster
# Monter le volume incriminé
mount -t glusterfs 127.0.0.1:gfs-nextcloudata /mnt
cd /Disk/datanextcloud
find . -exec stat '/mnt/{}' \;
By doing this on each server, you’re accessing each and every one of those files and folders causing Gluster to create the metadata and that makes the data appear in the Gluster volume. Hooray!