Ceci est une ancienne révision du document !


Travaux pratiques GlusterFS

GlusterFS ou la quête de la simplicité

Objectif de la séance

Préparation de la séance

Prérequis matériel, logiciel & personnel

De manière à ce que les travaux pratiques de chacun entraînent le minimum d'effets de bord, il est proposé de réaliser toute cette séance dans un environnement virtualisé installé sur chaque machine d'auditeur.

Les archives des machines virtuelles fournies sont issus de l'outil VirtualBox

Prérequis matériel

Devant héberger le gestionnaire de machines virtuelles VirtualBox, la machine “hôte” doit disposer de :

  • au moins 4GB de RAM (3GB seront sollicités par les 5 machines virtuelles installées)
  • au moins 2 coeurs
  • au moins 10GB d’espace sur le disque dur (une fois les environnements déployés), donc, en comptant les archives des environnements virtualisés, 13GB d'espace
  • une activation de la virtualisation dans le BIOS de la machine (elle est systématique sur les matériel Apple

Prérequis logiciel

Le système d'exploitation hôte doit disposer :

  • un environnement 64 bits (pour être efficace)
  • le logiciel VirtualBox dans sa version 5 ou supérieure
  • un client SSH pour un accès en console à la passerelle
  • un client x2go pour un accès graphique à la passerelle

Prérequis personnel

Une allergie à la commande en ligne rend la réalisation de ces exercices très très difficile. Il est donc recommandé d'avoir une certaine expérience d'un shell quelconque.

Les machines virtuelles fournies sont basées sur la distribution Debian Jessie. De manière à disposer d'une version récente de GlusterFS, l'archive de rétroportage officielle (paquets backports ) ont été tous installés. Cela permet de disposer d'un noyau de version 4.7 et de GlusterFS de version 3.8.4.

Installation des machines virtuelles

Deux archives de machines virtuelles sont à télécharger puis à intégrer.

Installation du client GlusterFS passerelle

L'installation de la machine ANF-GlusterClient ne requiert aucune modification (ni sur le nom, ni sur l'adresse MAC).

En effet, pour éviter tout effet de bord sur les communications réseau, un réseau interne privé de nom forgluster est intégré pour chaque machine virtuelle.

Cette machine ANF-GlusterClient , disposant de 2 interfaces, établit une communication entre l’extérieur (communication avec l’hôte et Internet) et le réseau interne forgluster . Elle dispose également des services réseau internes classiques comme le DHCP et le DNS.

Cette machine intègre en outre un environnement graphique XFCE permettant de se connecter simplement et de suivre les serveurs. Au démarrage de la machine, cet environnement se connecte automatiquement sur le login alpha de mot de passe AlphaANF2016 .

Si le mode graphique de VirtualBox ne convient pas, il est possible d'accéder directement à ANF-GlusterClient à partir de la machine hôte (ou du réseau local) en utilisant le protocole SSH ou x2go sur le port 22322.

Installation des serveurs GlusterFS par clonage

L'installation des 4 serveurs GlusterFS s'effectue par clonage à l'installation de la machine ANF-GlusterMatrix.

Le clonage s'effectue en installant plusieurs fois la matrice mais en procédant à deux modifications :

  • Changer le nom : de ANF-GlusterMatrix vers ANF-GlusterServer1, ANF-GlusterServer2, ANF-GlusterServer3 et ANF-Gluster4 (facultatif mais utile)
  • Réinitialiser l'adresse Mac (indispensable !)

Ordre de démarrage & vérification de connexion

Le serveurs ont leurs adresses IP fournies par la machine Gluster-Client. Il est donc indispensable de d'abord démarrer le Gluster-Client.

Une fois la machine ANF-GlusterClient démarrée (directement sur le compte de l'utilisateur alpha), les machines serveurs peuvent être démarrées à leur tour.

En démarrant ANF-GlusterServer1, puis ANF-GlusterServer2, ensuite ANF-GlusterServer3, enfin ANF-GlusterServer4 successivement, les serveurs doivent disposer respectivement des noms peer1, peer2, peer3, peer4.

  • Login root : GlusterANF2016
  • Login alpha : AlphaANF2016

La commande clush de ClusterShell est utilisée pour vérifier que les 4 serveurs sont bien accessibles par le client. Elle permet de s'adresser à un groupe de machines en leur appliquant la même commande.

Pour la suite du TP, tout ou presque se fera par la commande en ligne. Donc, il est nécessaire d'ouvrir un terminal (icône en bas du bureau). De plus, la majorité des commandes sont à exécuter comme root.

De manière à simplifier le déroulé du TP en effectuant des copier/coller, il est possible d'installer un navigateur graphique dans gluster-client. Pour cela, taper dans un terminal :

sudo apt-get install -t jessie-backports -y firefox-esr

Appliquons la commande w aux quatres serveurs de peer1 à peer4, nous avons :

clush -w root@peer[1-4] w

Nous avons comme résultat quelque chose de comparable à :

peer2:  15:30:54 up 23 min,  0 users,  load average: 0,00, 0,00, 0,00
peer2: USER     TTY      FROM             LOGIN@   IDLE   JCPU   PCPU WHAT
peer3:  15:30:54 up 22 min,  0 users,  load average: 0,08, 0,02, 0,01
peer3: USER     TTY      FROM             LOGIN@   IDLE   JCPU   PCPU WHAT
peer4:  15:30:54 up 21 min,  0 users,  load average: 0,00, 0,00, 0,00
peer4: USER     TTY      FROM             LOGIN@   IDLE   JCPU   PCPU WHAT
peer1:  15:30:53 up 25 min,  0 users,  load average: 0,00, 0,00, 0,00
peer1: USER     TTY      FROM             LOGIN@   IDLE   JCPU   PCPU WHAT

Si nous cherchons à vérifier que chaque serveur dispose d'un serveur GlusterFS démarré (de nom glusterd ) :

clush -w root@peer[1-4] ps aux | grep glusterd

Nous obtenons comme résultat (au numéros de PID près) :

  peer4: root      1344  0.0  3.5 400828 17888 ?        Ssl  15:09   0:00   /usr/sbin/glusterd -p /var/run/glusterd.pid
  peer3: root      1321  0.0  3.6 400828 18192 ?        Ssl  15:08   0:00   /usr/sbin/glusterd -p /var/run/glusterd.pid
  peer2: root      1333  0.0  3.5 400828 18128 ?        Ssl  15:07   0:00   /usr/sbin/glusterd -p /var/run/glusterd.pid
  peer1: root      1341  0.0  3.5 400828 18024 ?        Ssl  15:05   0:00   /usr/sbin/glusterd -p /var/run/glusterd.pid

Premiers pas avec la commande ''gluster''

Toutes les commandes permettant de gérer des volumes GlusterFS, les pairs, le chiffrement, des géoréplication, etc… exploitent la commande gluster.

Gestion des pairs

Sous GlusterFS, tous les serveurs sont équivalents : il n'existe pas de serveurs de méta-données, de frontale de connexion. Ainsi, chaque composant d'une grappe de stockage distribué est équivalent à l'autre.

Ces composants assurant indifféremment stockage, gestion des méta-données et service de fichiers sont appelés des “pairs” (peer en anglais) et leur gestion se réalise par la commande unique gluster peer

Objectifs :

  • lister les pairs
  • associer des pairs

Lister les pairs

La première commande consiste à lister les pairs (les serveurs) susceptibles de partager des volumes.

gluster peer status

Pour la lancer sur un des serveurs en particulier, par exemple peer1 à partir du client

ssh root@peer1 gluster peer status

La commande renvoit :

Number of Peers: 0

Pour le lancer sur tous les serveurs :

clush -w root@peer[1-4] gluster peer status

La commande clush renvoit alors :

peer1: Number of Peers: 0
peer3: Number of Peers: 0
peer4: Number of Peers: 0
peer2: Number of Peers: 0

Associer des pairs

Il suffit de se connecter sur un des serveurs et de préciser le serveur à associer. Par exemple, pour associer le peer4 au peer1, il suffit de taper :

gluster peer probe peer4

Pour réaliser cette opération directement à partir de la machine cliente, nous utilisons :

ssh root@peer1 gluster peer probe peer4

En cas de succès, la commande renvoit comme message :

peer probe: success. 

Pour assurer l'association des pairs peer3 et peer2 :

ssh root@peer1 gluster peer probe peer3
peer probe: success. 
ssh root@peer1 gluster peer probe peer2
peer probe: success. 

De manière à vérifier que les serveurs peer1 à peer4 font désormais partie de la même grappe, nous utilisons :

ssh root@peer1 gluster pool list

La commande renvoit :

UUID					Hostname 	State
26898237-86c7-4687-8660-703de9cd48b0	peer4    	Connected 
d7ae008b-1269-4992-bb1b-bd858eeb1ccc	peer3    	Connected 
a6fd556e-7fa9-4c3c-8190-8b33805d47d3	peer2    	Connected 
25dbbaa2-980d-42a8-bd04-426218d9673a	localhost	Connected 

La machine peer1 sur laquelle nous avons lancée notre commande répond avec son nom local localhost.

Les UUID présentés dans le résultat (et unique pour chacun de nous) de la dernière commande permettent d’identifier de manière unique un serveur. Ces UUID sont présents dans le fichier /var/lib/glusterd/glusterd.info.

Pour nous en assurer, nous utilisons :

clush -w root@peer[1-4] cat /var/lib/glusterd/glusterd.info

La commande renvoit :

peer1: UUID=25dbbaa2-980d-42a8-bd04-426218d9673a
peer1: operating-version=30800
peer3: UUID=d7ae008b-1269-4992-bb1b-bd858eeb1ccc
peer3: operating-version=30800
peer4: UUID=26898237-86c7-4687-8660-703de9cd48b0
peer4: operating-version=30800
peer2: UUID=a6fd556e-7fa9-4c3c-8190-8b33805d47d3
peer2: operating-version=30800

Création d'un premier volume GlusterFS

Maintenant, nous sommes prêts à créer notre premier volume GlusterFS.

La première étape pour créer un volume GlusterFS est d'abord de définir une racine dans laquelle GlusterFS va stocker tout le nécessaire au stockage des données et à la gestion des méta-données.

Nous allons aussi créer un point de montage de ce volume

Objectifs :

  1. créer et activer un volume de type “distributed”
  2. monter la partition en local ou distanciel
  3. étudier le stockage local
  4. ajouter le support NFS

Etapes :

  1. créer le dossier de stockage local /MyGluster sur le pair peer1
  2. créer un volume MyGluster sur le pair peer1
  3. observer les propriétés du volume MyGluster
  4. activer le volume MyGluster
  5. observer les changements de propriétés de MyGluster
  6. monter sur le pair peer1 le volume MyGluster sur la racine /media/MyGluster
  7. monter sur le client le volume MyGluster dans le dossier /media/MyGluster
  8. créer un fichier TestFile.txt dans le dossier /media/MyGluster contenant “Premier Test” sur le client
  9. regarder la signature MD5 de TestFile.txt dans le dossier monté sur le serveur
  10. regarder la signature MD5 de TestFile.txt dans le dossier de stockage du serveur
  11. ajouter le support NFS sur le volume MyGluster
  12. regarder les propriétés du volume MyGluster
  13. monter le volume MyGluster en NFS sur le client dans le dossier /media/MyGlusterNFS préabalement créé
  14. regarder la signature MD5 de TestFile.txt dans le dossier NFS

Création d’un dossier pour le premier partage

ssh root@peer1 mkdir /MyGluster

Création du volume GlusterFS de nom MyGluster sur ce point de montage /MyGluster sur le serveur 1 nommé peer1

ssh root@peer1 gluster volume create MyGluster peer1:/MyGluster force

L’option force est indispensable dans ce cas : en effet, tout le système des machines virtuelles créées repose sur une unique partition. GlusterFS le détecte et ne recommande pas cette opération. Nous lui forçons la main !

volume create: MyGluster: success: please start the volume to access data

L’indication précédente invite à le monter, c’est ce que nous faisons :

ssh root@peer1 gluster volume start MyGluster
volume start: MyGluster: success

La commande gluster volume info permet à tout instant de visualiser la configuration

ssh root@peer1 gluster volume info
Volume Name: MyGluster
Type: Distribute
Volume ID: 70b68cd9-357c-40aa-bcfc-9c1b1a51b4b7
Status: Started
Snapshot Count: 0
Number of Bricks: 1
Transport-type: tcp
Bricks:
Brick1: peer1:/MyGluster
Options Reconfigured:
transport.address-family: inet
performance.readdir-ahead: on
nfs.disable: on

Cet espace de stockage est déjà montable sur n’importe quelle machine, sur le serveur lui même :

ssh root@peer1 mkdir /media/MyGluster
ssh root@peer1 mount -t glusterfs peer1:MyGluster /media/MyGluster
ssh root@peer1 df
Sys. de fichiers blocs de 1K Utilise Disponible Uti
devtmpfs              239524       0     239524   0
tmpfs                 252128       0     252128   0
tmpfs                 252128    6636     245492   3
tmpfs                   5120       0       5120   0
tmpfs                 252128       0     252128   0
/dev/sda1            1951744  847456     981376  47
peer1:MyGluster      1951744  847488     981376  47

Ou sur le client :

sudo mount -t glusterfs peer1:MyGluster /media/MyGluster

Il est possible d'utiliser la commande plus compacte mount.glusterfs en lieu et place de mount -t glusterfs. Cependant, cette commande n'est pas recommandée parce qu'elle empêche l'utilisation de l'option noatime bien utile pour ne pas surcharger le système de fichiers hôte à chaque accès de fichiers.

df
Sys. de fichiers blocs de 1K Utilise Disponible Uti
udev                   10240       0      10240   0
tmpfs                 204068    2988     201080   2
/dev/sda1            3905536 1519816    2165432  42
tmpfs                 510168       0     510168   0
tmpfs                   5120       0       5120   0
tmpfs                 510168       0     510168   0
peer1:MyGluster      1951744  847488     981248  47

Écrivons un premier fichier dans le volume monté sur le client et récupérons sa signature MD5 à des fins de vérification :

sudo sh -c 'echo "Premier Test" > /media/MyGluster/TestFile.txt'
md5sum /media/MyGluster/TestFile.txt 

La commande renvoit :

6a55620050029ce24a149a6b02cf9f73  /media/MyGluster/TestFile.txt

Nous pouvons également vérifier la cohérence du fichier dans le volume en lançant la commande sur un autre client, par exemple le serveur lui même !

ssh root@peer1 md5sum /media/MyGluster/TestFile.txt 

La commande renvoit :

6a55620050029ce24a149a6b02cf9f73  /media/MyGluster/TestFile.txt

GlusterFS permet de pouvoir exploiter un volume GlusterFS en NFS standard.

L'activation du partage NFS se fait très simplement sur le volume gluster. Il suffit de désactiver le paramètre nfs.disable

ssh root@peer1 gluster volume set MyGluster nfs.disable off

La commande renvoir en cas de succès :

volume set: success

Créons alors un nouveau point de montage et montons ce partage GlusterFS en NFS

sudo mkdir /media/MyGlusterNFS
sudo mount -t nfs peer1:/MyGluster /media/MyGlusterNFS

Assurons-nous du montage par la commande df laquelle renvoit :

Sys. de fichiers blocs de 1K Utilise Disponible Uti
udev                   10240       0      10240   0
tmpfs                 204068    2992     201076   2
/dev/sda1            3905536 1519816    2165432  42
tmpfs                 510168       0     510168   0
tmpfs                   5120       0       5120   0
tmpfs                 510168       0     510168   0
peer1:MyGluster      1951744  847616     981248  47
peer1:/MyGluster     1951744  846848     982016  47

Là aussi, un petit test pour voir si le document est consistant :

md5sum /media/MyGlusterNFS/TestFile.txt
ssh root@peer1 md5sum /media/MyGluster/TestFile.txt

La sortie des 2 commandes précédentes est la suivante :

6a55620050029ce24a149a6b02cf9f73  /media/MyGlusterNFS/TestFile.txt
6a55620050029ce24a149a6b02cf9f73  /media/MyGluster/TestFile.txt

Il est aussi intéressant de “voir” comment, où et de quelle manière GlusterFS stocke les informations. Le dossier /MyGluster sur peer1 contient tous les documents que nous avons créés, mais plus encore :

ssh root@peer1 ls -la /MyGluster 
total 24
drwxr-xr-x 1 root root  88 nov.  30 17:02 .
drwxr-xr-x 1 root root 210 nov.  30 16:49 ..
drw------- 1 root root 208 nov.  30 17:02 .glusterfs
-rw-r--r-- 2 root root  13 nov.  30 16:55 TestFile.txt
drwxr-xr-x 1 root root  22 nov.  30 16:51 .trashcan

Si nous regardons la signature des fichiers que nous avons créés :

ssh root@peer1 md5sum /MyGluster/TestFile.txt
6a55620050029ce24a149a6b02cf9f73  /MyGluster/TestFile.txt

Nous retrouvons donc bien, à l’endroit où nous avons placé “physiquement” les données, le fichier dans sa totalité, avec la cohérence associée.

Pour visualiser les clients qui ont monté le volume, la commande gluster volume status peut-être utilisée :

ssh root@peer1 gluster volume status
Client connections for volume MyGluster
----------------------------------------------
Brick : peer1:/MyGluster
Clients connected : 6
Hostname                                               BytesRead    BytesWritten
--------                                               ---------    ------------
10.20.16.1:49145                                            5968            4692
10.20.16.254:49149                                         10165            9268
10.20.16.1:49146                                            4516            4400
10.20.16.3:49148                                            1708            1228
10.20.16.4:49148                                            1708            1228
10.20.16.2:49148                                            1708            1228

Vient maintenant le moment de clore ce premier contact avec un volume GlusterFS atomique, sur un seul serveur, en démontant d'abord tous les clients connectés :

Nous démontons d'abord sur le client les volumes montés en GlusterFS et NFS :

sudo umount /media/MyGlusterNFS
sudo umount /media/MyGluster

Nous démontons ensuite sur le serveur

ssh root@peer1 umount /media/MyGluster
ssh root@peer1 gluster volume status MyGluster clients
Client connections for volume MyGluster
----------------------------------------------
Brick : peer1:/MyGluster
Clients connected : 4
Hostname                                               BytesRead    BytesWritten
--------                                               ---------    ------------
10.20.16.1:49146                                            4860            4848
10.20.16.3:49148                                            1708            1228
10.20.16.4:49148                                            1708            1228
10.20.16.2:49148                                            1708            1228

Il ne reste finalement que les 4 serveurs qui sont clients d’eux mêmes pour diffuser les données.

Arrêt & suppression d’un volume GlusterFS

Les commandes d'arrêt et de suppression de volume nécessitent une validation par y. Pour la valider en forçant, nous préfixons la commande de echo y | .

Arrêt du volume

ssh root@peer1 "echo y | gluster volume stop MyGluster"
Stopping volume will make its data inaccessible. Do you want to continue? (y/n) volume stop: MyGluster: success

Suppression du volume

ssh root@peer1 "echo y | gluster volume delete MyGluster"
Deleting volume will erase all information about the volume. Do you want to continue? (y/n) volume delete: MyGluster: success

Vérification de suppression

ssh root@peer1 gluster volume info
No volumes present

Création d'un volume de type ''distributed'' (équivalent ''linear'')

Le mode d'agrégation par défaut de GlusterFS s'apparente au mode linear de la gestion par mdadm. Il consiste simplement à agréger des volumes.

Création des racines de stockages

Nous créons sur chaque pair peer1 à peer4 une nouvelle racine de stockage.

clush -w root@peer[1-4] mkdir /MyGlusterLinear /media/MyGlusterLinear

Création du volume de montage

Dans notre cas, nous créons un volume de nom MyGlusterLinear agrégeant les racines de stockage /MyGlusterLinear des pairs peer1, peer2 :

ssh root@peer1 gluster volume create MyGlusterLinear transport tcp peer1:/MyGlusterLinear peer2:/MyGlusterLinear force

En cas de succès, la commande renvoit :

volume create: MyGlusterLinear: success: please start the volume to access data

Démarrage du volume

Comme dans le cas précédent, un volume créé demande d'être activé :

ssh root@peer1 gluster volume start MyGlusterLinear

En cas de succès :

volume start: MyGlusterLinear: success

Information sur le volume créé

Pour visualiser la configuration du volume créé, nous utilisons :

ssh root@peer1 gluster volume info MyGlusterLinear

La commande renvoit :

Volume Name: MyGlusterLinear
Type: Distribute
Volume ID: e77e82d8-f1e6-49f1-b72a-7e25ba3465b4
Status: Started
Snapshot Count: 0
Number of Bricks: 2
Transport-type: tcp
Bricks:
Brick1: peer1:/MyGlusterLinear
Brick2: peer2:/MyGlusterLinear
Options Reconfigured:
transport.address-family: inet
performance.readdir-ahead: on
nfs.disable: on

Comme nouveauté, nous voyons que les nombres de bricks composant le volume est de 2, et que ces briques sont listées sous forme de leur pair associé à la racine de stockage.

Montage d'un volume Distribute & investigations

Montons sur le client ce volume après création d'un point spécifique :

sudo mkdir /media/MyGlusterLinear
sudo mount -t glusterfs peer1:MyGlusterLinear /media/MyGlusterLinear

Explorons l'espace disponible :

df -h | grep Gluster

Nous disposons donc de 1.7GB d'espace libre :

peer1:MyGlusterLinear   3,8G    1,7G  1,9G  47% /media/MyGlusterLinear

Si nous regardons quel espace est disponible sur les serveurs

clush -w root@peer[1-2] df -h | grep sda
root@peer2: /dev/sda1          1,9G    835M  951M  47% /
root@peer1: /dev/sda1          1,9G    835M  951M  47% /

Nous constatons que chacun dispose de 828MB ce qui représente le quart de l'espace identifié plus haut : une solution donc simple pour concaténer les espaces disponibles de serveurs.

Configurons l'espace de stockage comme un espace /scratch (avec des droits comparables à du /tmp):

sudo chmod 777 /media/MyGlusterLinear
sudo chmod o+t /media/MyGlusterLinear
ls -ltra /media/MyGlusterLinear

Test d'écritures parallèles & investigations

Lançons un test écrivant un millier de fichiers en parallèle :

seq -w 1000 | /usr/bin/time xargs -P 1000 -I '{}' bash -c "echo Hello File '{}' > /media/MyGlusterLinear/File.'{}'"

Cette commande prend autour de 50 secondes sur une machine lente.

Lançons maintenant une lecture tout aussi parallèle

ls /media/MyGlusterLinear/File.* | /usr/bin/time xargs -P 1000 -I '{}' md5sum '{}'

Cette commande prend autour de 12 secondes.

Il est possible de voir comment sont distribués les fichiers sur les différents serveurs :

clush -w root@peer[1-4] 'ls /MyGlusterLinear/File.* | wc -l'
root@peer4: 0
root@peer4: ls: impossible d'accéder à /MyGlusterLinear/File.*: Aucun fichier ou dossier de ce type
root@peer1: 506
root@peer2: 494
root@peer3: 0
root@peer3: ls: impossible d'accéder à /MyGlusterLinear/File.*: Aucun fichier ou dossier de ce type

Il y a donc à peu près équirépartition des écritures entre les serveurs peer1 et peer2 : GlusterFS remplit donc son office !

Ajoutons une brique avec peer3 :

ssh root@peer1 gluster volume add-brick MyGlusterLinear peer3:/MyGlusterLinear force

En cas de succès, nous obtenons :

volume add-brick: success
ssh root@peer3 gluster volume info
Volume Name: MyGlusterLinear
Type: Distribute
Volume ID: e6cc9af2-5f48-4599-bc8e-12a7ee9d39b1
Status: Started
Snapshot Count: 0
Number of Bricks: 3
Transport-type: tcp
Bricks:
Brick1: peer1:/MyGlusterLinear
Brick2: peer2:/MyGlusterLinear
Brick3: peer3:/MyGlusterLinear
Options Reconfigured:
transport.address-family: inet
performance.readdir-ahead: on
nfs.disable: on

Regardons si l'espace disponible s'est étendu par la commande df:

Sys. de fichiers      Taille Utilisé Dispo Uti% Monté sur
udev                     10M       0   10M   0% /dev
tmpfs                   200M    3,0M  197M   2% /run
/dev/sda1               3,8G    1,7G  1,9G  47% /
tmpfs                   499M       0  499M   0% /dev/shm
tmpfs                   5,0M       0  5,0M   0% /run/lock
tmpfs                   499M       0  499M   0% /sys/fs/cgroup
peer1:MyGlusterLinear   5,6G    2,5G  2,8G  47% /media/MyGlusterLinear

L'espace s'est étendu d'autant !

Lançons le mécanisme de répartition avec balance :

ssh root@peer1 gluster volume rebalance MyGlusterLinear start
volume rebalance: MyGlusterLinear: success: Rebalance on MyGlusterLinear has been started successfully. Use rebalance status command to check status of the rebalance process.
ID: 58ce178d-5fd8-44b2-b484-382f71ad0a02

Cette procédure pouvant être assez longue, l'état du rebalance s'obtient par un simple status à la place de start.

ssh root@peer1 gluster volume rebalance MyGlusterLinear status
                                    Node Rebalanced-files          size       scanned      failures       skipped               status  run time in h:m:s
                               ---------      -----------   -----------   -----------   -----------   -----------         ------------     --------------
                               localhost              171         2.7KB           506             0             0            completed        0:0:8
                                   peer3                0        0Bytes             2             0             0            completed        0:0:0
                                   peer2                0        0Bytes           494             0           147            completed        0:0:4
volume rebalance: MyGlusterLinear: success

Si nous regardons la redistribution, nous obtenons :

clush -w root@peer[1-4] 'ls /MyGlusterLinear/File.* | wc -l'

</code> root@peer2: 494 root@peer1: 335 root@peer4: ls: impossible d'accéder à /MyGlusterLinear/File.*: Aucun fichier ou dossier de ce type root@peer4: 0 root@peer3: 318 </code>

La redistribution n'est pas parfaite, mais elle reste correcte !

Replaçons maintenant la brique issue de peer2 par celle disponible de peer4 :

ssh root@peer2 gluster volume replace-brick MyGlusterLinear peer1:/MyGlusterLinear peer4:/MyGlusterLinear
volume replace-brick: success: replace-brick commit force operation successful
ssh root@peer3 gluster volume info
Volume Name: MyGlusterLinear
Type: Distribute
Volume ID: e6cc9af2-5f48-4599-bc8e-12a7ee9d39b1
Status: Started
Snapshot Count: 0
Number of Bricks: 3
Transport-type: tcp
Bricks:
Brick1: peer2:/MyGlusterLinear
Brick2: peer4:/MyGlusterLinear
Brick3: peer3:/MyGlusterLinear
Options Reconfigured:
transport.address-family: inet
performance.readdir-ahead: on
nfs.disable: on

Si nous regardons la répartitions des fichiers avec

clush -w root@peer[1-4] 'ls /MyGlusterLinear/File.* | wc -l'

Nous avons :

root@peer3: 318
root@peer1: 347
root@peer2: 335
root@peer4: 347

Nous voyons que la “charge” de peer1 a été transféré sur peer4. Cependant, en regardant la signature des fichiers, nous constatons qu'ils sont vides sur peer1.

Effaçons ces fichiers et démontons le volume monté sur le client :

rm /media/MyGlusterLinear/File.*
sudo umount /media/MyGlusterLinear

Création d’un volume de type ''striped'' (équivalent RAID0)

clush -w root@peer[1-4] mkdir /MyGlusterRAID0
ssh root@peer1 gluster volume create MyGlusterRAID0 stripe 2 peer1:/MyGlusterRAID0 peer2:/MyGlusterRAID0 force
ssh root@peer1 gluster volume start MyGlusterRAID0
volume create: MyGlusterRAID0: success: please start the volume to access data
volume start: MyGlusterRAID0: success
ssh root@peer1 gluster volume info MyGlusterRAID0
 
Volume Name: MyGlusterRAID0
Type: Stripe
Volume ID: 4b7451de-36cc-4679-925e-f0846e4325b9
Status: Started
Snapshot Count: 0
Number of Bricks: 1 x 2 = 2
Transport-type: tcp
Bricks:
Brick1: peer1:/MyGlusterRAID0
Brick2: peer2:/MyGlusterRAID0
Options Reconfigured:
transport.address-family: inet
performance.readdir-ahead: on
nfs.disable: on

Montage sur le client & réglages de droits d'accès

mkdir /media/MyGlusterRAID0
sudo mount -t glusterfs -o noatime peer1:MyGlusterRAID0 /media/MyGlusterRAID0
sudo chmod 777 /media/MyGlusterRAID0
sudo chmod o+t /media/MyGlusterRAID0

Ecriture de données & cohérence des données

seq -w 1000 | /usr/bin/time xargs -P 1000 -I '{}' bash -c "echo Hello File '{}' > /media/MyGlusterRAID0/File.'{}'"

Rajout d'une brique

Création d'un volume de type ''replica'' (équivalent ''RAID1'')

Objectif : création et manipulation d'un volume redondé sur 4 disques.

Etapes :

  1. création d'une racine de volume GlusterFS de nom MyGlusterRAID1
  2. création & démarrage et visualisation d'un volume de nom MyGlusterRAID1 avec une redondance de 2
  3. montage du volume MyGlusterRAID1 sur le client
  4. écriture parallèle de 1000 fichiers de signatures différentes
  5. vérification de la cohérence et redondance des fichiers
  6. vérification de la distribution des données
  7. application du mécanisme de balance
  8. vérification du mécanisme de balance

Création d'une racine de volume GlusterFS

Eléments de sécurité sous GlusterFS

Résilience de l'accès au serveur

Objectif : étudier et agir sur la disponibilité de l'accès au serveur.

mount -t glusterfs -obackup-volfile-servers=peer1:peer2:peer3:peer4,noatime peer1:/MyGlusterRAID1 /media/MyGlusterRAID1

Contrôle d'accès par adresse

Objectif : filtrer l'accès au volume GlusterFS par adresse IP

Détermination de l'IP des machines

Restriction à uniquement les serveurs du pool

ssh root@peer1 gluster volume set distonet auth.allow 10.20.16.0

gluster volume info

Chiffrement de la communication

Objectif : assurer une confidentialité forte sur l'accès et le transit

Création de la clé OpenSSL, des certificats serveurs et client

openssl genrsa -out glusterfs.key 1024
openssl req -new -x509 -days 3650 -key glusterfs.key -subj /CN=gluster-client -out glusterfs.pem
seq 4 | xargs -I '  ' openssl req -new -x509 -days 3650 -key glusterfs.key -subj /CN=peer'  ' -out peer'  '.pem
cat glusterfs.pem peer* >> glusterfs.ca
seq 4 | xargs -I '  ' scp glusterfs.key peer'  ':/etc/ssl
seq 4 | xargs -I '  ' scp glusterfs.ca peer'  ':/etc/ssl
ssh root@peer1 gluster volume set MyGlusterLinear client.ssl on
ssh root@peer1 gluster volume set MyGlusterLinear server.ssl on
ssh root@peer1 gluster volume set MyGlusterLinear ssl.own-cert /etc/ssl/glusterfs.ca
ssh root@peer1 "echo y | gluster volume stop MyGlusterLinear"
ssh root@peer1 gluster volume start MyGlusterLinear

Fonctionnalités avancées

Gestion du tiering

clush -w peer[1-4] mkdir /MyGlusterReplica
ssh root@peer1 gluster volume create MyGlusterReplica replica 2 transport tcp peer1:/MyGlusterReplica peer3:/MyGlusterReplica force
ssh root@peer1 gluster volume start MyGlusterReplica
ssh root@peer1 gluster volume info
ssh peer1 gluster volume tier MyGlusterReplica attach replica 2 peer2:/MyGlusterReplica peer4:/MyGlusterReplica force
ssh root@peer1 gluster tier status
ssh root@peer1 gluster volume info
Volume Name: MyGlusterReplica
Type: Tier
Volume ID: 4502aaf9-f9c6-4eec-9c73-a889f3b457c7
Status: Started
Snapshot Count: 0
Number of Bricks: 4
Transport-type: tcp
Hot Tier :
Hot Tier Type : Replicate
Number of Bricks: 1 x 2 = 2
Brick1: peer4:/MyGlusterReplica
Brick2: peer2:/MyGlusterReplica
Cold Tier:
Cold Tier Type : Replicate
Number of Bricks: 1 x 2 = 2
Brick3: peer1:/MyGlusterReplica
Brick4: peer3:/MyGlusterReplica
Options Reconfigured:
cluster.tier-mode: cache
features.ctr-enabled: on
transport.address-family: inet
performance.readdir-ahead: on
nfs.disable: on

Résilience des disques

Gestion des disques par LVM

Localiser son fichier

getfattr -n trusted.glusterfs.pathinfo -e text /media/MyGluster/File.txt

https://access.redhat.com/documentation/en-US/Red Hat Storage/3.1/html/Administration Guide/ch26s02.html 

Voir les fichiers accédés

https://access.redhat.com/documentation/en-US/Red Hat Storage/2.0/html/Administration Guide/sect-User Guide-Monitor Workload-Displaying Volume Status.html 
formation/anfbigdata.1481722029.txt.gz · Dernière modification: 2016/12/14 14:27 par equemene