LINUX:Glusterfs - Serveurs

De WIKI sur Linux (ADB)
Aller à la navigation Aller à la recherche

retour au menu de Glusterfs


But

Tout d'abord nous allons configurer les serveurs qui vont travailler ensemble.

A tout moment, il est possible d'adapter cette structure sans perturber son fonctionnement. On peut ajouter ou supprimer un serveur du "pool". On peut ajouter, supprimer, étendre, migrer, restreindre chaque ressource disque.

Nous nous cantonnerons à la création du "pool" et des ressources.


Matériel et adressage IP

Pour ces exercices, nous avons besoin de six machines. Le schéma ci-dessous reprend la connectique, le nom des machines Linux et leur adressage IP.

LINUX:Glusterfs1.pdf

Sur chaque machine du cluster, on ajoute un nom aux différentes adresses réseaux afin quelles se reconnaissent entre elles. On le fait en local dans le fichier "/etc/hosts" suivant le schéma ci-dessus. Son contenu devient:


127.0.0.1   localhost localhost.localdomain localhost4 localhost4.localdomain4
::1         localhost localhost.localdomain localhost6 localhost6.localdomain6
  
192.168.1.71 sv1.home.dom
192.168.1.72 sv2.home.dom
192.168.1.73 sv3.home.dom
192.168.1.74 sv4.home.dom
192.168.1.75 sv5.home.dom
192.168.1.76 sv6.home.dom

Notons qu'on peut faire cette opération au travers de notre DNS si nous en disposons.


Installation

La première étape consiste à installer sur tous nos serveurs ("sv1.home.dom" à "sv6.home.dom") le paquet suivant:

dnf install glusterfs-server


Fichiers de configuration

Les fichiers de configuration se retrouvent dans le répertoire "/etc/glusterfs". Nous n'y avons effectué aucune modification.

Après le premier lancement du service Glusterd, le répertoire "/var/lib/glusterd" contient nombre de paramètres qui s'amendent en fonction des machines du cluster et des ressources disques. Ces paramètres sont modifiables via des lignes de commandes.


Activation et lancement du service

Il faut activer et lancer le service "glusterd.service" sur chaque serveur:

systemctl enable glusterd.service
systemctl start  glusterd.service


Configurer le mur de feu ou FireWall

Chaque serveur écoute sur le port TCP 24007. Quand le "pool" sera constitué, chaque serveur du cluster va entrer en communication entre eux et par la suite, les machines clients feront de même.

Si vous activez le Firewall, ce qui est recommandé, il faut y ajouter les règles suivantes sur chaque serveur:

  • pour le "pool" ou ensemble de machines serveurs - accès des serveurs:
-A INPUT  -p tcp -m tcp --sport 24007 -m iprange --src-range 192.168.1.71-192.168.1.76 -m conntrack --ctstate NEW -j ACCEPT
-A OUTPUT -p tcp -m tcp --dport 24007 -m iprange --dst-range 192.168.1.71-192.168.1.76 -j ACCEPT
  • pour le "pool" ou ensemble de machines serveurs - accès des clients:
-A INPUT  -p tcp -m tcp --sport 24007 -m iprange --src-range 192.168.1.81-192.168.1.82 -m conntrack --ctstate NEW -j ACCEPT
  • pour les "brick" ou briques - accès des serveurs:
-A INPUT  -p tcp -m tcp --sport 49152:60999 -m iprange --src-range 192.168.1.71-192.168.1.76 -m conntrack --ctstate NEW -j ACCEPT
-A OUTPUT -p tcp -m tcp --dport 49152:60999 -m iprange --dst-range 192.168.1.71-192.168.1.76 -j ACCEPT
  • pour les "brick" ou briques - accès des clients:
-A INPUT  -p tcp -m tcp --sport 49152:60999 -m iprange --src-range 192.168.1.81-192.168.1.82 -m conntrack --ctstate NEW -j ACCEPT


Pool de serveurs

Un "Pool" est un regroupement de machines qui servent de serveurs GlusterFs et qui vont travailler ensemble.


Création du Pool

Pour que les différents serveurs puissent travailler ensemble, il faut constituer un "Pool".

On se place sur un des serveurs et grâce à la commande suivante, on va ajouter un des autres serveurs à le rejoindre.

Dans notre exemple, on s'est placé sur la machine "sv1.home.dom" et on lui ajoute la machine "sv2.home.dom":

gluster peer probe sv2.home.dom

On fait de même pour les autres serveurs:

gluster peer probe sv3.home.dom
gluster peer probe sv4.home.dom
gluster peer probe sv5.home.dom
gluster peer probe sv6.home.dom

Cette opération n'est pas à effectuer sur les autres serveurs.


Lister la liste des serveurs du pool

Pour vérifier que tout s'est bien passé, la commande suivante exécutée sur n'importe quel serveur, permet de récupérer la liste des serveurs du "Pool":

gluster peer status

qui donne à partir de la machine "sv1.home.dom":


Number of Peers: 5
  
Hostname: sv2.home.dom
Uuid: d2d834b7-96e7-49a1-a178-9aa54bc74426
State: Peer in Cluster (Connected)
  
Hostname: sv3.home.dom
Uuid: 27bd8184-14c8-4176-987d-db0a03fc6993
State: Peer in Cluster (Connected)
  
Hostname: sv4.home.dom
Uuid: 3dc268fd-cc74-4072-b454-c6a26240fdf7
State: Peer in Cluster (Connected)
  
Hostname: sv5.home.dom
Uuid: ba63e02a-8dd2-4324-a8e6-16a59855378f
State: Peer in Cluster (Connected)
  
Hostname: sv6.home.dom
Uuid: 15f5b1c0-f4c6-4f98-93c4-d539a4cf3873
State: Peer in Cluster (Connected)


Connexions réseaux

On peut constater l'ouverture des communications au travers du réseau avec la commande suivante:

netstat -natp | grep gluster

qui donne:


tcp        0      0 0.0.0.0:24007           0.0.0.0:*               LISTEN      1215/glusterd
tcp        0      0 192.168.1.71:24007      192.168.1.72:49151      ESTABLISHED 1215/glusterd
tcp        0      0 192.168.1.71:24007      192.168.1.73:49151      ESTABLISHED 1215/glusterd
tcp        0      0 192.168.1.71:24007      192.168.1.74:49151      ESTABLISHED 1215/glusterd
tcp        0      0 192.168.1.71:24007      192.168.1.75:49151      ESTABLISHED 1215/glusterd
tcp        0      0 192.168.1.71:24007      192.168.1.76:49151      ESTABLISHED 1215/glusterd
tcp        0      0 192.168.1.71:49151      192.168.1.72:24007      ESTABLISHED 1215/glusterd
tcp        0      0 192.168.1.71:49150      192.168.1.73:24007      ESTABLISHED 1215/glusterd
tcp        0      0 192.168.1.71:49149      192.168.1.74:24007      ESTABLISHED 1215/glusterd
tcp        0      0 192.168.1.71:49148      192.168.1.75:24007      ESTABLISHED 1215/glusterd
tcp        0      0 192.168.1.71:49147      192.168.1.76:24007      ESTABLISHED 1215/glusterd

On remarque que les connexions se font dans les deux sens avec toutes les machines du cluster. Ceci se répète sur toutes les machines concernées.


Détacher un serveur du Pool

On peut faire l'opération inverse: enlever un serveur du "Pool" avec la commande suivante, ici le serveur "sv6.home.dom":

gluster peer detach sv6.home.dom

On le fait à partir d'une machine du pool.

Attention: Il est impératif que ce serveur qu'on élimine, ne participe à aucune ressource disque du pool.


Gestion des ressources disques

Maintenant que le "Pool" des serveurs est constitué, il faut créer les ressources disques. Ces ressources sont organisées de différentes façons; nous allons les passer en revue.


Principe

Le principe pour créer une ressource consiste a créer un ensemble d'espaces disques individuels sur certains des serveurs du cluster. Cet ensemble d'espaces disques individuels forme un volume. Dans ce volume on va y placer des fichiers. Ces fichiers seront répartis de différentes façons dans les différents espaces disques individuels. Nous sommes donc en présence d'un système de fichiers distribués au travers du réseau.

Les systèmes de répartitions a de nombreuses analogies avec le système de gestion des disques en RAID. Mais il y a plusieurs différences dont en voici deux principales:

  • Le RAID se cantonne sur une seule machine, Glusterfs s'étend sur plusieurs machines du réseau
  • Le RAID se déroule au bas niveau du bloc des disques, Glusterfs travaille au niveau du fichier ou de morceaux de fichiers

Une ressource est nommée volume. Un volume correspond a un ensemble d'espaces disques individuels se trouvant sur diverses machines du cluster.


Matériel

Pour nos essais, nous avons placé sur chaque serveur deux nouveaux disques avec une seule partition que nous avons formatée en XFS; nous aurions pu utiliser LVM avant le formatage en XFS. Nous utiliserons principalement le premier disque se nomme "/disk1"; le second se nomme "/disk2"; il ne sera que peu utilisé. Nous y créerons plusieurs volumes mais dans la pratique, il est conseillé pour une question simple de gestion d'avoir des disques de même taille et qu'ils ne soient utilisés que par un seul volume. Dans le cas contraire, nous aurons des problèmes de débordements car Glusterfs essaie de répartir les fichiers de façon équitables. Il existe une option de gestion de quotas.

Sur chacun de ces disques, nous créons un répertoire "glusterfs". Ce nom peut être nommé selon vos désirs.

Attention: Il ne faut jamais y placer des fichiers, les détruire, les modifier directement à partir du serveur. L'interaction avec ces ressources disques ne peut se faire qu'à partir des clients. On peut consulter leurs contenus par curiosité. Ce n'est que quand le volume est détruit au niveau de Glusterfs que l'on peut détruire son contenu. Je conseille de le détruire dans ce cas afin de pouvoir réutiliser cet espace disque pour un nouveau volume.


Type Distribué

Ce premier type distribué correspond au RAID0. Les fichiers sont distribués sur les divers espaces disques individuels des machines du cluster. Cette répartition tend à être équitable entre les disques. Il n'y a pas de doublons de fichier.


Type Répliqué

Ce second type répliqué correspond au RAID1. Les fichiers sont distribués sur les divers espaces disques individuels des machines du cluster. Chaque espace disque accueille tous les fichiers. Ils sont tous en doublons.


Type Distribué-Répliqué

Ce troisième type distribué-répliqué correspond au RAID10. Les fichiers sont distribués sur les divers espaces disques individuels des machines du cluster. C'est une combinaison des deux types précédents.


Type Dispersé

Ce quatrième type dispersé correspond au RAID6. Les fichiers sont distribués sur les divers espaces disques individuels des machines du cluster. Chaque fichier est découpé en morceaux égaux ou blocs, le dernier est complété par du vide et il y a un ou plusieurs blocs de contrôle. Chaque espace disque accueille à tour de rôle un de ces blocs.


Type Distribué-Dispersé

Ce cinquième type distribué-dispersé correspond au RAID60. Les fichiers sont distribués sur les divers espaces disques individuels des machines du cluster. Chaque fichier est découpé en morceaux égaux ou blocs, le dernier est complété par du vide et il y a un ou plusieurs blocs de contrôle. Chaque espace disque accueille à tour de rôle un de ces blocs. C'est une combinaison du type précédent et du type "distribué" vu plus haut.


Arrêt d'un volume

Avant de pouvoir éliminer un volume, il faut l'arrêter.

On effectue cette opération à partir d'une des machines du cluster et va impacter toutes les machines impliquées par le volume.

La commande suivante va arrêter le volume "diskgfs1":

gluster volume stop diskgfs1


Elimination d'un volume

Maintenant que le volume est arrêté, on peut le détruire.

On effectue cette opération à partir d'une des machines du cluster et va impacter toutes les machines impliquées par le volume.

La commande suivante va arrêter le volume "diskgfs1":

gluster volume delete diskgfs1

La destruction d'un volume n'efface pas les fichiers et répertoires concerné. Dès que ce volume est détruit, on peut effacer ces fichiers et répertoires sur les différentes machines anciennement concernées par ce volume. On ne le fait pas avant.

Pour notre exemple, on détruit:

  • le répertoire "/disk1/glusterfs/brique1" sur la machine "sv1.home.dom"
  • le répertoire "/disk1/glusterfs/brique1" sur la machine "sv2.home.dom"


Liste des paramètres

La commande suivante, appliquée au volume "diskgfs1", permet de lister tous les paramètres de ce volume:

gluster volume get diskgfs1 all


Modification de paramètre

Il se peut que vous désiriez changer un paramètre d'un volume.

Dans l'exemple suivant, appliquée au volume "diskgfs1", on veut changer la paramètre "network.ping-timeout" et lui attribuer la valeur de "10":

gluster volume set diskgfs1 network.ping-timeout 10


Sécurité

Un paramètre intéressant permet de restreindre l'accès à un volume.

Dans l'exemple suivant, appliquée au volume "diskgfs1", on veut limiter l'accès aux machines du sous-réseau "192.168.1.0/24":

gluster volume set diskgfs1 auth.allow 192.168.1.0/24


Gestion automatique des problèmes

Normalement le système règle automatiquement les problèmes courants en dehors d'un problème physique d'un disque. Si par exemple, une des machines du cluster n'est pas démarrée ou n'est pas joignable suite à une coupure réseau, la distribution des fichiers se rétablira dès son retour en activité.

Outre les commandes déjà vues, on peut éventuellement dépister quelques problèmes par la commande suivante, ici pour le volume "diskgfs1":

gluster volume heal diskgfs1 info summary

qui donne:


Brick sv1.home.dom:/disk1/glusterfs/brique1
Status: Connected
Total Number of entries: 0
Number of entries in heal pending: 0
Number of entries in split-brain: 0
Number of entries possibly healing: 0
  
Brick sv2.home.dom:/disk1/glusterfs/brique1
Status: Connected
Total Number of entries: 0
Number of entries in heal pending: 0
Number of entries in split-brain: 0
Number of entries possibly healing: 0





retour au menu de Glusterfs