Différences

Ci-dessous, les différences entre deux révisions de la page.

Lien vers cette vue comparative

Les deux révisions précédentes Révision précédente
Prochaine révision
Révision précédente
formation:anfbigdata [2016/12/14 11:31]
equemene [Création d'un volume de type ''distributed'' (équivalent ''linear'')]
formation:anfbigdata [2016/12/15 18:59] (Version actuelle)
equemene
Ligne 1: Ligne 1:
-====== Travaux pratiques GlusterFS ======+====== Travaux pratiques GlusterFS ​pour ANF Bigdata ​======
  
-GlusterFS ou la quête ​de la simplicité ​+Support ​de Travaux pratiques dans le cadre de [[https://​indico.mathrice.fr/​event/​5/​|Des données au BigData : exploitez le stockage distribué]]
  
 +===== CQQCOQP (Comment ? Quoi ? Qui, Combien ? Où ? Quand ? Pourquoi ?) =====
 +
 +  * **Pourquoi ?** Survoler les principales fonctionnalités de GlusterFS et se faire sa propre idée
 +  * **Quoi ?** Tester au travers d'​exemples simples en appliquant le modèles STNPPNFP
 +  * **Quand ?** Jeudi 15 décembre de 9h à 12h
 +  * **Combien ?** 12GB d'​espace disque, 3GB de RAM, 5 VM 
 +  * **Où ?** Sur une machine unique, dans en environnement VirtualBox
 +  * **Qui ?** Pour des admin'​sys soucieux d'​expérimenter rapidement
 +  * **Comment ?** En appliquant une série de commandes simples au travers d'un terminal
 ===== Objectif de la séance ===== ===== Objectif de la séance =====
    
 +C'est de donner un aperçu des différentes fonctionnalités de GlusterFS dans un environnement propre, en insistant sur sa simplicité d'​installation,​ de configuration,​ d'​administration.
 ===== Préparation de la séance ===== ===== Préparation de la séance =====
    
Ligne 591: Ligne 600:
 </​code>​ </​code>​
  
-Cette commande prend autour de 50 secondes ​sur une machine lente.+Cette commande prend un peu moins d'une minute ​sur une machine lente.
  
 Lançons maintenant une lecture tout aussi parallèle Lançons maintenant une lecture tout aussi parallèle
Ligne 598: Ligne 607:
 </​code>​ </​code>​
  
-Cette commande prend autour de 12 secondes.+Cette commande ​ne prend quelques quelques ​secondes.
  
 Il est possible de voir comment sont distribués les fichiers sur les différents serveurs : Il est possible de voir comment sont distribués les fichiers sur les différents serveurs :
Ligne 606: Ligne 615:
  
 <​code>​ <​code>​
-root@peer4: ​271 +root@peer4: ​0 
-root@peer2270 +root@peer4ls: impossible d'​accéder à /​MyGlusterLinear/​File.*:​ Aucun fichier ou dossier de ce type 
-root@peer1: ​236 +root@peer1: ​506 
-root@peer3: ​223+root@peer2: 494 
 +root@peer3: ​
 +root@peer3: ls: impossible d'​accéder à /​MyGlusterLinear/​File.*:​ Aucun fichier ou dossier de ce type
 </​code>​ </​code>​
   ​   ​
-Il y a donc à peu près équirépartition des écritures entre les différents ​serveurs : GlusterFS remplit donc son office !+Il y a donc à peu près équirépartition des écritures entre les serveurs ​**peer1** et **peer2** ​: GlusterFS remplit donc son office !
  
-Effaçons ces fichiers ​:+Ajoutons une brique avec **peer3** ​:
 <​code>​ <​code>​
-rm /media/​MyGlusterLinear/​File.*+ssh root@peer1 gluster volume add-brick MyGlusterLinear peer3:/​MyGlusterLinear ​force 
 +</code> 
 +En cas de succès, nous obtenons : 
 +<​code>​ 
 +volume add-brick: success
 </​code>​ </​code>​
  
-Démontons le volume 
 <​code>​ <​code>​
-umount ​/media/​MyGlusterLinear+ssh root@peer3 gluster volume info 
 +</code>  
 + 
 +<​code>​ 
 +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
 </​code>​ </​code>​
 +
 +Regardons si l'​espace disponible s'est étendu par la commande ''​df'':​
 +<​code>​
 +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
 +</​code>​
 +
 +L'​espace s'est étendu d'​autant !
 +
 +Lançons le mécanisme de répartition avec ''​balance''​ :
 +<​code>​
 +ssh root@peer1 gluster volume rebalance MyGlusterLinear start
 +</​code>​
 +<​code>​
 +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
 +</​code>​
 +Cette procédure pouvant être assez longue, l'​état du ''​rebalance''​ s'​obtient par un simple ''​status''​ à la place de ''​start''​.
 +<​code>​
 +ssh root@peer1 gluster volume rebalance MyGlusterLinear status
 +</​code>​
 +Nous avons une sortie comparable à ce qui suit :
 +<​code>​
 +                                    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
 +</​code>​
 +
 +Si nous regardons la redistribution,​ nous obtenons :
 +<​code>​
 +clush -w root@peer[1-4] 'ls /​MyGlusterLinear/​File.* | wc -l'
 +</​code>​
 +
 +<​code>​
 +root@peer2: 347
 +root@peer1: 335
 +root@peer4: 0
 +root@peer4: ls: impossible d'​accéder à /​MyGlusterLinear/​File.*:​ Aucun fichier ou dossier de ce type
 +root@peer3: 318
 +</​code>​
 +
 +La redistribution n'est pas parfaite, mais elle reste correcte !
 +
 +Supprimons maintenant la brique issue de **peer1** à partir de **peer2** :
 +<​code>​
 +ssh root@peer2 gluster volume remove-brick MyGlusterLinear peer1:/​MyGlusterLinear start
 +</​code>​
 +
 +Le message suivant indique que la procédure a démarré
 +<​code>​
 +volume remove-brick start: success
 +ID: 92c17fc7-9980-4c73-83fd-fd011a8be530
 +</​code>​
 +
 +Contrôlons la progression de la migration des données issues de la demande de suppression :
 +<​code>​
 +ssh root@peer2 gluster volume remove-brick MyGlusterLinear peer1:/​MyGlusterLinear status
 +</​code>​
 +
 +Une fois terminé, nous avons pour la même commande précédente :
 +<​code>​
 +                                    Node Rebalanced-files ​         size       ​scanned ​     failures ​      ​skipped ​              ​status ​ run time in h:m:s
 +                               ​--------- ​     ----------- ​  ​----------- ​  ​----------- ​  ​----------- ​  ​----------- ​        ​------------ ​    ​--------------
 +                      peer1.gluster.zone ​             335         ​5.2KB ​          ​335 ​            ​0 ​            ​0 ​           completed ​       0:0:13
 +</​code>​
 +
 +Relançons la commande pour voir la distribution sur les différents serveurs
 +<​code>​
 +clush -w root@peer[1-4] 'ls /​MyGlusterLinear/​File.* | wc -l'
 +</​code>​
 +Nous obtenons :
 +<​code>​
 +root@peer1: 0
 +root@peer1: ls: impossible d'​accéder à /​MyGlusterLinear/​File.*:​ Aucun fichier ou dossier de ce type
 +root@peer4: 0
 +root@peer4: ls: impossible d'​accéder à /​MyGlusterLinear/​File.*:​ Aucun fichier ou dossier de ce type
 +root@peer2: 347
 +root@peer3: 653
 +</​code>​
 +Les fichiers ont bien disparu de **peer1** et se sont retrouvés sur **peer3** !
 +
 +Validons la suppression
 +<​code>​
 +ssh root@peer2 'echo y | gluster volume remove-brick MyGlusterLinear peer1:/​MyGlusterLinear commit'​
 +</​code>​
 +
 +Un petit message nous invite à la prudence, pour, au pire, restaurer les données :
 +<​code>​
 +Removing brick(s) can result in data loss. Do you want to Continue? (y/n) volume remove-brick commit: success
 +Check the removed bricks to ensure all files are migrated.
 +If files with data are found on the brick path, copy them via a gluster mount point before re-purposing the removed brick. ​
 +</​code>​
 +
 +<​code>​ssh root@peer3 gluster volume info</​code>​
 +
 +<​code>​
 +Volume Name: MyGlusterLinear
 +Type: Distribute
 +Volume ID: e6cc9af2-5f48-4599-bc8e-12a7ee9d39b1
 +Status: Started
 +Snapshot Count: 0
 +Number of Bricks: 2
 +Transport-type:​ tcp
 +Bricks:
 +Brick1: peer2:/​MyGlusterLinear
 +Brick3: peer3:/​MyGlusterLinear
 +Options Reconfigured:​
 +transport.address-family:​ inet
 +performance.readdir-ahead:​ on
 +nfs.disable:​ on
 +</​code>​
 +
 +Effaçons ces fichiers et démontons le volume monté sur le client :
 +<​code>​
 +rm /​media/​MyGlusterLinear/​File.*
 +sudo umount /​media/​MyGlusterLinear
 +</​code>​
 +
 +<note important>​Il ne faut utiliser la commande ''​replace-brick''​ **uniquement** dans le cadre d'un volume ''​replica''​ !</​note>​
  
 ===== Création d’un volume de type ''​striped''​ (équivalent RAID0) ===== ===== Création d’un volume de type ''​striped''​ (équivalent RAID0) =====
Ligne 632: Ligne 792:
 <​code>​ <​code>​
 ssh root@peer1 gluster volume create MyGlusterRAID0 stripe 2 peer1:/​MyGlusterRAID0 peer2:/​MyGlusterRAID0 force ssh root@peer1 gluster volume create MyGlusterRAID0 stripe 2 peer1:/​MyGlusterRAID0 peer2:/​MyGlusterRAID0 force
 +ssh root@peer1 gluster volume start MyGlusterRAID0
 </​code>​ </​code>​
  
 <​code>​ <​code>​
-volume create: ​stripe: success: please start the volume to access data+volume create: ​MyGlusterRAID0: success: please start the volume to access data 
 +volume start: MyGlusterRAID0:​ success
 </​code>​ </​code>​
  
 <​code>​ <​code>​
-ssh root@peer1 gluster volume ​start MyGlusterRAID0+ssh root@peer1 gluster volume ​info MyGlusterRAID0
 </​code>​ </​code>​
  
-Montage sur le client+<​code>​ 
 +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 
 +</​code>​ 
 + 
 +Montage sur le client ​& réglages de droits d'​accès
 <​code>​ <​code>​
 mkdir /​media/​MyGlusterRAID0 mkdir /​media/​MyGlusterRAID0
-mount -t glusterfs peer1:​MyGlusterRAID0 /​media/​MyGlusterRAID0+sudo mount -t glusterfs ​-o noatime ​peer1:​MyGlusterRAID0 ​/​media/​MyGlusterRAID0 
 +sudo chmod 777 /​media/​MyGlusterRAID0 
 +sudo chmod o+t /​media/​MyGlusterRAID0
 </​code>​ </​code>​
  
 Ecriture de données & cohérence des données ​ Ecriture de données & cohérence des données ​
-  +<​code>​ 
-Rajout d'une brique ​+seq -w 1000 | /​usr/​bin/​time xargs -P 1000 -I '{}' bash -c "echo Hello File '​{}'​ > /​media/​MyGlusterRAID0/​File.'​{}'"​ 
 +</​code>​
  
-===== Création d'un volume de type ''​replica'' ​(équivalent ​''​RAID1'') =====+Si nous regardons les MD5 dans ''​/​media/​MyGlusterRAID0/​'' ​et sur les deux serveurs **peer1** et **peer2** dans ''​/​MyGlusterRAID0/​''​, nous constatons uniquement des fichiers de taille nulle sont sur **peer2** et les mêmes signature sur **peer1** : ceci est dû à la taille au delà de laquelle les données sont découpées.
  
-Objectif : création et manipulation d'un volume ​redondé sur 4 disques.+En effet, la commande ​''ssh root@peer1 gluster ​volume ​get MyGlusterRAID0 all | grep stripe-block-size''​ 
 +<​code>​ 
 +cluster.stripe-block-size ​              ​128KB ​                                   
 +</​code>​
  
-Etapes : +Essayons avec 10 fichiers de 1MB générés aléatoirement pour dépasser cette limite 
-  création d'une racine ​de volume ​GlusterFS de nom MyGlusterRAID1 +<​code>​ 
-  - création & démarrage et visualisation ​d'un volume de nom MyGlusterRAID1 ​avec une redondance de +rm /​media/​MyGlusterRAID0/​File.* 
-  - montage du volume MyGlusterRAID1 sur le client +seq -w 10 | /​usr/​bin/​time xargs -P 10 -I '{}' bash -c "​base64 /​dev/​urandom | head -c 1048576 > /​media/​MyGlusterRAID0/​File.'​{}'"​ 
-  écriture parallèle ​de 1000 fichiers de signatures différentes +</​code>​ 
-  vérification de la cohérence et redondance des fichiers + 
-  vérification ​de la distribution ​des données +<​code>​ 
-  - application du mécanisme de balance +ls /​media/​MyGlusterRAID0/​File.* | xargs -P 10 -I '​{}'​ md5sum '​{}'​ | sort 
-  - vérification du mécanisme de balance +ssh root@peer1 "ls /​MyGlusterRAID0/​File.* | xargs -I '​{}'​ md5sum '​{}'"​ | sort 
-   +ssh root@peer2 "ls /​MyGlusterRAID0/​File.* | xargs -I '​{}'​ md5sum '​{}'"​ | sort 
-Création ​d'​une ​racine de volume ​GlusterFS ​+</​code>​ 
 + 
 +Nous voyons que les sommes MD5 ne sont pas identiques... En cas de plantage ​de GlusterFS, il n'y a pas possibilité ​de récupérer les informations en allant les chercher "à la main". 
 + 
 +===== Création ​dun volume de type ''​replica''​ (équivalent RAID1) ===== 
 + 
 +<​code>​ 
 +clush -w root@peer[1-4] mkdir /MyGlusterRAID1 
 +</​code>​ 
 + 
 +<​code>​ 
 +ssh root@peer1 gluster volume create MyGlusterRAID1 replica ​peer1:/​MyGlusterRAID1 peer3:/​MyGlusterRAID1 force 
 +ssh root@peer1 gluster ​volume ​start MyGlusterRAID1 
 +</​code>​ 
 + 
 +<​code>​ 
 +volume create: MyGlusterRAID1:​ success: please start the volume to access data 
 +volume start: MyGlusterRAID1:​ success 
 +</​code>​ 
 + 
 +<​code>​ 
 +ssh root@peer3 gluster volume info MyGlusterRAID1 
 +</​code>​ 
 + 
 +<​code>​ 
 +Volume Name: MyGlusterRAID1 
 +Type: Replicate 
 +Volume ID: 7bb3b6dd-a82c-45bd-bb28-5f9545438d84 
 +Status: Started 
 +Snapshot Count: 0 
 +Number of Bricks: 1 x 2 = 2 
 +Transport-type:​ tcp 
 +Bricks: 
 +Brick1: peer1:/​MyGlusterRAID1 
 +Brick2: peer3:/​MyGlusterRAID1 
 +Options Reconfigured:​ 
 +transport.address-family:​ inet 
 +performance.readdir-ahead:​ on 
 +nfs.disable:​ on 
 +</​code>​ 
 + 
 +Montage ​sur le client ​& réglages de droits d'​accès 
 +<​code>​ 
 +mkdir /​media/​MyGlusterRAID1 
 +sudo mount -t glusterfs -o noatime peer1:​MyGlusterRAID1 /​media/​MyGlusterRAID1 
 +sudo chmod 777 /​media/​MyGlusterRAID1 
 +sudo chmod o+t /​media/​MyGlusterRAID1 
 +</​code>​ 
 + 
 +Ecriture ​de données & cohérence des données  
 +<​code>​ 
 +seq -w 1000 | /​usr/​bin/​time xargs -P 1000 -I '​{}'​ bash -c "echo Hello File '​{}'​ > /​media/​MyGlusterRAID1/​File.'​{}'"​ 
 +</​code>​ 
 + 
 +<​code>​ 
 +ls /​media/​MyGlusterRAID1/​File.* | xargs -P 1000 -I '​{}'​ md5sum '​{}'​ | sort | awk '{ print $1 }' > /​tmp/​Gluster.md5 
 +ssh root@peer1 "ls /​MyGlusterRAID1/​File.* | xargs -P 1000 -I '​{}'​ md5sum '​{}'"​ | sort | awk '{ print $1 }' > /​tmp/​GlusterPeer1.md5 
 +ssh root@peer3 "ls /​MyGlusterRAID1/​File.* | xargs -P 1000 -I '​{}'​ md5sum '​{}'"​ | sort | awk '{ print $1 }' > /​tmp/​GlusterPeer3.md5 
 +</​code>​ 
 + 
 +<​code>​ 
 +md5sum /​tmp/​Gluster.md5 /​tmp/​GlusterPeer1.md5 /​tmp/​GlusterPeer3.md5  
 +</​code>​ 
 + 
 +<​code>​ 
 +521e443b0dd9b639f7610c0a7e0dd001 ​ /​tmp/​Gluster.md5 
 +521e443b0dd9b639f7610c0a7e0dd001 ​ /​tmp/​GlusterPeer1.md5 
 +521e443b0dd9b639f7610c0a7e0dd001 ​ /​tmp/​GlusterPeer3.md5 
 +</​code>​ 
 + 
 +Essayons avec 10 fichiers de 1MB générés aléatoirement pour dépasser cette limite 
 +<​code>​ 
 +rm /​media/​MyGlusterRAID1/​File.* 
 +seq -w 10 | /​usr/​bin/​time xargs -P 10 -I '​{}'​ bash -c "​base64 /​dev/​urandom | head -c 1048576 > /​media/​MyGlusterRAID1/​File.'​{}'"​ 
 +</​code>​ 
 + 
 +<​code>​ 
 +ls /​media/​MyGlusterRAID1/​File.* | xargs -P 10 -I '​{}'​ md5sum '​{}'​ | sort 
 +ssh root@peer1 "ls /​MyGlusterRAID1/​File.* | xargs -I '​{}'​ md5sum '​{}'"​ | sort 
 +ssh root@peer3 "ls /​MyGlusterRAID1/​File.* | xargs -I '​{}'​ md5sum '​{}'"​ | sort 
 +</​code>​ 
 + 
 +Même pour des fichiers ​de taille plus importante, ​la cohérence ​des données ​est respectée. 
 + 
 + 
 +AJout d'une brique sur le replica : 
 + 
 +Etant donné que nous sommes en mode ''​replica'',​ il est nécessaire ​d'associer ​une brique contenant deux espaces : 
 +<​code>​ 
 +ssh root@peer1 gluster ​volume ​add-brick MyGlusterRAID1 replica 2 peer2:/​MyGlusterRAID1 peer4:/​MyGlusterRAID1 force 
 +</​code>​ 
 + 
 +Le ''​gluster volume info MyGlusterRAID1''​ fournit : 
 +<​code>​ 
 +Volume Name: MyGlusterRAID1 
 +Type: Distributed-Replicate 
 +Volume ID: 7bb3b6dd-a82c-45bd-bb28-5f9545438d84 
 +Status: Started 
 +Snapshot Count: 0 
 +Number of Bricks: 2 x 2 = 4 
 +Transport-type:​ tcp 
 +Bricks: 
 +Brick1: peer1:/​MyGlusterRAID1 
 +Brick2: peer3:/​MyGlusterRAID1 
 +Brick3: peer2:/​MyGlusterRAID1 
 +Brick4: peer4:/​MyGlusterRAID1 
 +Options Reconfigured:​ 
 +transport.address-family:​ inet 
 +performance.readdir-ahead:​ on 
 +nfs.disable:​ on 
 +</​code>​ 
 + 
 +Lançons un ''​rebalance''​ sur le volume ''​ssh root@peer4 gluster volume rebalance MyGlusterRAID1 start''​ 
 +<​code>​ 
 +volume rebalance: MyGlusterRAID1:​ success: Rebalance on MyGlusterRAID1 has been started successfully. Use rebalance status command to check status of the rebalance process. 
 +ID: 12d11627-146d-4057-b1f7-e041f9b1b218 
 +</​code>​ 
 + 
 +<​code>​ 
 +ssh root@peer4 gluster volume rebalance MyGlusterRAID1 status 
 +</​code>​ 
 +<​code>​ 
 +                                    Node Rebalanced-files ​         size       ​scanned ​     failures ​      ​skipped ​              ​status ​ run time in h:m:s 
 +                               ​--------- ​     ----------- ​  ​----------- ​  ​----------- ​  ​----------- ​  ​----------- ​        ​------------ ​    ​-------------- 
 +                               ​localhost ​               0        0Bytes ​            ​0 ​            ​0 ​            ​0 ​           completed ​       0:0:0 
 +                      peer1.gluster.zone ​               4         ​4.0MB ​           10             ​0 ​            ​0 ​           completed ​       0:0:1 
 +                                   ​peer3 ​               0        0Bytes ​            ​0 ​            ​0 ​            ​0 ​           completed ​       0:0:0 
 +                                   ​peer2 ​               0        0Bytes ​            ​0 ​            ​0 ​            ​0 ​           completed ​       0:0:1 
 +volume rebalance: MyGlusterRAID1:​ success 
 +</​code>​
  
 ===== Eléments de sécurité sous GlusterFS ===== ===== Eléments de sécurité sous GlusterFS =====
Ligne 672: Ligne 986:
 ==== Résilience de l'​accès au serveur ==== ==== Résilience de l'​accès au serveur ====
  
-Objectif : étudier et agir sur la disponibilité de l'accès au serveur.+Démontons le volume ​''​MyGlusterRAID1''​ sur le client :
 <​code>​ <​code>​
-mount -t glusterfs -obackup-volfile-servers=peer1:​peer2:​peer3:​peer4,​noatime peer1:/​MyGlusterRAID1 ​/media/MyGlusterRAID1+sudo umount ​/media/GlusterRAID1/​
 </​code>​ </​code>​
 +
 +Simulons une panne en arrêtant le démon ''​glusterd''​ sur **peer1** :
 +<​code>​
 +ssh root@peer1 systemctl stop glusterfs-server.service
 +</​code>​
 +
 +Essayons de remonter le volume ''​MyGlusterRAID1'':​
 +<​code>​
 +sudo mount -t glusterfs peer1:​MyGlusterRAID1 /​media/​MyGlusterRAID1/​
 +</​code>​
 +Ca ne fonctionne pas avec le message :
 +<​code>​
 +Mount failed. Please check the log file for more details.
 +</​code>​
 +
 +En allant regarder dans les logs d'​erreur :
 +<​code>​
 + sudo cat /​var/​log/​glusterfs/​media-MyGlusterRAID1.log | grep ' E '
 +</​code>​
 +
 +<​code>​
 +[2016-12-14 14:​43:​55.901290] E [socket.c:​2309:​socket_connect_finish] 0-glusterfs:​ connection to 10.20.16.1:​24007 failed (Connexion refusée)
 +[2016-12-14 14:​43:​55.901332] E [glusterfsd-mgmt.c:​1902:​mgmt_rpc_notify] 0-glusterfsd-mgmt:​ failed to connect with remote-host:​ peer1 (Noeud final de transport n'est pas connecté)
 +</​code>​
 +
 +Etant donné que notre volume est reparti sur 4 serveurs dont 1 indisponible,​ nous pouvons monter le partage en utilisant l'​option ''​backup-volfile-servers''​ :
 +<​code>​
 +sudo mount -t glusterfs -obackup-volfile-servers=peer1:​peer2:​peer3:​peer4,​noatime peer1:​MyGlusterRAID1 /​media/​MyGlusterRAID1/​
 +</​code>​
 +
 +Le volume se monte et les données sont accessibles.
 +
 +Réactivons quand même le service GlusterFS sur **peer1** :
 +<​code>​
 +ssh root@peer1 systemctl start glusterfs-server.service
 +</​code>​
 +
 +Vérifions que le démon est bien opérationnel par ''​ssh root@peer1 gluster volume info MyGlusterRAID1''​
 +
  
 ==== Contrôle d'​accès par adresse ==== ==== Contrôle d'​accès par adresse ====
  
 Objectif : filtrer l'​accès au volume GlusterFS par adresse IP Objectif : filtrer l'​accès au volume GlusterFS par adresse IP
 +
 +Démontons le volume du client
 +<​code>​
 +sudo umount /​media/​MyGlusterRAID1
 +</​code>​
  
 Détermination de l'IP des machines Détermination de l'IP des machines
  
-Restriction à uniquement les serveurs ​du pool+Les serveurs ​disposent d'une adresse de **10.20.16.1** à **10.20.16.4**. ​
  
-ssh root@peer1 gluster volume set distonet ​auth.allow 10.20.16.0+Restriction à uniquement les serveurs du pool avec l'​attribut ''​auth.allow''​ définit à toutes les IP des serveurs de **peer1** à **peer4**. 
 +<​code>​ 
 +ssh root@peer1 gluster volume set MyGlusterRAID1 ​auth.allow 10.20.16.1,​10.20.16.2,​10.20.16.3,​10.20.16.4 
 +</​code>​
  
 +<​code>​
 gluster volume info gluster volume info
 +</​code>​
 +
 +<​code>​
 +Volume Name: MyGlusterRAID1
 +Type: Distributed-Replicate
 +Volume ID: 7bb3b6dd-a82c-45bd-bb28-5f9545438d84
 +Status: Started
 +Snapshot Count: 0
 +Number of Bricks: 2 x 2 = 4
 +Transport-type:​ tcp
 +Bricks:
 +Brick1: peer1:/​MyGlusterRAID1
 +Brick2: peer3:/​MyGlusterRAID1
 +Brick3: peer2:/​MyGlusterRAID1
 +Brick4: peer4:/​MyGlusterRAID1
 +Options Reconfigured:​
 +auth.allow: 10.20.16.1,​10.20.16.2,​10.20.16.3,​10.20.16.4
 +nfs.disable:​ on
 +performance.readdir-ahead:​ on
 +transport.address-family:​ inet
 +</​code>​
 +
 +Lançons la commande de montage sur le client
 +<​code>​
 +sudo mount -t glusterfs peer1:​MyGlusterRAID1 /​media/​MyGlusterRAID1/​
 +</​code>​
 +
 +La commande s'​exécute mais rien ne se monte : ''​df | grep MyGlusterRAID1''​ permet de s'en assurer...
 +
 +Si nous rajoutons l'IP du client **10.20.16.254**,​ avec la commande :
 +<​code>​
 +ssh root@peer1 gluster volume set MyGlusterRAID1 auth.allow 10.20.16.1,​10.20.16.2,​10.20.16.3,​10.20.16.4,​10.20.16.254
 +</​code>​
 +Nous pouvons monter le volume ''​MyGlusterRAID1''​.
 +
 +Pour réinitialiser une valeur, nous utilisons : la commande ''​reset''​ sur l'​attribut,​ ici ''​auth.allow''​
 +<​code>​
 +ssh root@peer1 gluster volume reset MyGlusterRAID1 auth.allow
 +</​code>​
 +
 +
 +Démontage du volume du client par ''​sudo umount /​media/​MyGlusterRAID1''​
  
 ==== Chiffrement de la communication ==== ==== Chiffrement de la communication ====
  
 Objectif : assurer une confidentialité forte sur l'​accès et le transit ​ Objectif : assurer une confidentialité forte sur l'​accès et le transit ​
 +
 +Démontage de 
  
 Création de la clé OpenSSL, des certificats serveurs et client Création de la clé OpenSSL, des certificats serveurs et client
 <​code>​ <​code>​
 openssl genrsa -out glusterfs.key 1024 openssl genrsa -out glusterfs.key 1024
-openssl req -new -x509 -days 3650 -key glusterfs.key -subj /​CN=gluster-client -out glusterfs.pem +openssl req -new -x509 -days 3650 -key glusterfs.key -subj /​CN=gluster-client -out gluster-client.pem 
-seq 4 | xargs -I ' ​ ' openssl req -new -x509 -days 3650 -key glusterfs.key -subj /​CN=peer' ​ ' -out peer' ​ '.pem+seq 4 | xargs -I '{}' openssl req -new -x509 -days 3650 -key glusterfs.key -subj /​CN=peer'​{}' -out peer'{}'.pem
 </​code>​ </​code>​
 <​code>​ <​code>​
-cat glusterfs.pem ​peer* >> glusterfs.ca+cat peer* >> glusterfs.ca
 </​code>​ </​code>​
 <​code>​ <​code>​
-seq 4 | xargs -I ' ​ ' scp glusterfs.key peer' ​ ':/​etc/​ssl +seq 4 | xargs -I '{}' scp glusterfs.key ​root@peer'{}':/​etc/​ssl 
-seq 4 | xargs -I ' ​ ' scp glusterfs.ca peer' ​ ':/​etc/​ssl+seq 4 | xargs -I '{}' scp glusterfs.ca ​root@peer'{}':/​etc/​ssl
 </​code>​ </​code>​
 <​code>​ <​code>​
-ssh root@peer1 gluster volume set MyGlusterLinear ​client.ssl on +ssh root@peer1 gluster volume set MyGlusterRAID1 ​client.ssl on 
-ssh root@peer1 gluster volume set MyGlusterLinear ​server.ssl on +ssh root@peer1 gluster volume set MyGlusterRAID1 ​server.ssl on 
-ssh root@peer1 gluster volume set MyGlusterLinear ​ssl.own-cert /​etc/​ssl/​glusterfs.ca+ssh root@peer1 gluster volume set MyGlusterRAID1 ​ssl.own-cert /​etc/​ssl/​glusterfs.ca
 </​code>​ </​code>​
 +
 <​code>​ <​code>​
-ssh root@peer1 "echo y | gluster volume stop MyGlusterLinear"​ +Volume Name: MyGlusterRAID1 
-ssh root@peer1 gluster volume start MyGlusterLinear+Type: Distributed-Replicate 
 +Volume ID: 7bb3b6dd-a82c-45bd-bb28-5f9545438d84 
 +Status: Started 
 +Snapshot Count: 0 
 +Number of Bricks: 2 x 2 = 4 
 +Transport-type:​ tcp 
 +Bricks: 
 +Brick1: ​peer1:/​MyGlusterRAID1 
 +Brick2: peer3:/​MyGlusterRAID1 
 +Brick3: peer2:/​MyGlusterRAID1 
 +Brick4: peer4:/​MyGlusterRAID1 
 +Options Reconfigured:​ 
 +ssl.own-cert:​ /​etc/​ssl/​glusterfs.ca 
 +server.ssl: on 
 +client.ssl: on 
 +nfs.disable:​ on 
 +performance.readdir-ahead:​ on 
 +transport.address-family:​ inet
 </​code>​ </​code>​
  
 +Création des points de montage & montage sur les serveurs :
 +<​code>​
 +clush -w root@peer[1-4] mkdir /​media/​MyGlusterRAID1
 +clush -w root@peer[1-4] mount -t glusterfs peer1:​MyGlusterRAID1 /​media/​MyGlusterRAID1
 +</​code>​
 +
 +Normalement,​ cela ne fonctionne pas et cela donne les messages suivants :
 +<​code>​
 +root@peer2: Mount failed. Please check the log file for more details.
 +clush: root@peer2: exited with exit code 1
 +root@peer4: Mount failed. Please check the log file for more details.
 +clush: root@peer4: exited with exit code 1
 +root@peer3: Mount failed. Please check the log file for more details.
 +clush: root@peer3: exited with exit code 1
 +root@peer1: Mount failed. Please check the log file for more details.
 +clush: root@peer1: exited with exit code 1
 +</​code>​
 +Il est en effet nécessaire d'​arrêter et redémarrer le volume GlusterFS pour permettre l'​accès au volume chiffré :
 +<​code>​
 +ssh root@peer1 "echo y | gluster volume stop MyGlusterRAID1"​
 +ssh root@peer1 gluster volume start MyGlusterRAID1
 +</​code>​
 +
 +Après cette opération :
 +<​code>​
 +clush -w root@peer[1-4] mount -t glusterfs peer1:​MyGlusterRAID1 /​media/​MyGlusterRAID1
 +clush -w root@peer[1-4] df | grep MyGlusterRAID1
 +</​code>​
 +
 +<​code>​
 +root@peer1: peer1:​MyGlusterRAID1 ​    ​3903488 1730432 ​   1934592 ​ 48% /​media/​MyGlusterRAID1
 +root@peer3: peer1:​MyGlusterRAID1 ​    ​3903488 1730432 ​   1934592 ​ 48% /​media/​MyGlusterRAID1
 +root@peer4: peer1:​MyGlusterRAID1 ​    ​3903488 1730432 ​   1934592 ​ 48% /​media/​MyGlusterRAID1
 +root@peer2: peer1:​MyGlusterRAID1 ​    ​3903488 1730432 ​   1934592 ​ 48% /​media/​MyGlusterRAID1
 +</​code>​
 +
 +Essayons maintenant de monter le volume chiffré sur le client :
 +<​code>​
 +sudo mount -t glusterfs peer1:​MyGlusterRAID1 /​media/​MyGlusterRAID1
 +</​code>​
 +Le message d'​erreur est sans équivoque
 +<​code>​
 +Mount failed. Please check the log file for more details.
 +</​code>​
 +Si vous regardons les logs d'​erreurs,​ nous trouvons :
 +<​code>​
 +[2016-12-14 15:​16:​13.200191] E [dht-helper.c:​1666:​dht_inode_ctx_time_update] (-->/​usr/​lib/​x86_64-linux-gnu/​glusterfs/​3.8.4/​xlator/​cluster/​replicate.so(+0x4b19a) [0x7fa7a4b3c19a] -->/​usr/​lib/​x86_64-linux-gnu/​glusterfs/​3.8.4/​xlator/​cluster/​distribute.so(+0x33d09) [0x7fa7a489cd09] -->/​usr/​lib/​x86_64-linux-gnu/​glusterfs/​3.8.4/​xlator/​cluster/​distribute.so(+0xa464) [0x7fa7a4873464] ) 0-MyGlusterRAID1-dht:​ invalid argument: inode [Argument invalide]
 +</​code>​
 +
 +Ceci est dû au fait que, lorsque nous avons agrégé les certificats (commande ''​cat peer*.pem >> glusterfs.ca'',​ nous avons omis celui du client ''​gluster-client.pem''​.
 +
 +Effectuons les opérations suivantes :
 +<​code>​
 +# Demontage des volumes montes
 +clush -w root@peer[1-4] umount /​media/​MyGlusterRAID1
 +# Arret du volume MyGlusterRAID1
 +ssh root@peer1 "echo y | gluster volume stop MyGlusterRAID1"​
 +# Creation du nouvel agregat de certificats
 +cat peer*pem gluster-client.pem >> glusterfs.ca
 +# Diffusion de l'​agregat de certificats
 +seq 4 | xargs -I '​{}'​ scp glusterfs.ca root@peer'​{}':/​etc/​ssl
 +# Copie locale de la clé dans le bon dossier
 +sudo cp glusterfs.key /etc/ssl
 +# Copie locale de l'​agregat de certificat
 +sudo cp glusterfs.ca /etc/ssl
 +# Demarrage du volume MyGlusterRAID1
 +ssh root@peer1 gluster volume start MyGlusterRAID1
 +</​code>​
 +
 +Nous pouvons (enfin) monter le volume de manière chiffrée :
 +<​code>​
 +sudo mount -t glusterfs peer1:​MyGlusterRAID1 /​media/​MyGlusterRAID1
 +</​code>​
 +Et vérifier son accès :
 +<​code>​
 +md5sum /​media/​MyGlusterRAID1/​File.*
 +</​code>​
 +
 +<​code>​
 +e0cebe0d913746ff4b506a4da55f986c ​ /​media/​MyGlusterRAID1/​File.01
 +e49e69ae967bc7bc0ffad0aa8e713300 ​ /​media/​MyGlusterRAID1/​File.02
 +6e34c25900be11e3ed58ddee62f3d241 ​ /​media/​MyGlusterRAID1/​File.03
 +de5256d745e9edcd0b006303fd7a9f7f ​ /​media/​MyGlusterRAID1/​File.04
 +fa748e331d8c0fd6fd87f7b7f9299cc3 ​ /​media/​MyGlusterRAID1/​File.05
 +407a43d7a3fa120faff14357c2724503 ​ /​media/​MyGlusterRAID1/​File.06
 +cb5432658b53aa208fcd9289bffb7106 ​ /​media/​MyGlusterRAID1/​File.07
 +93949c9c1b1f685a2feff0572afff008 ​ /​media/​MyGlusterRAID1/​File.08
 +eefcff95428ca6d18fdaf0562a43b33e ​ /​media/​MyGlusterRAID1/​File.09
 +0130dc26e947eb016197bad4a8f6d0ee ​ /​media/​MyGlusterRAID1/​File.10
 +</​code>​
 ===== Fonctionnalités avancées ==== ===== Fonctionnalités avancées ====
  
Ligne 721: Ligne 1235:
  
 <​code>​ <​code>​
-clush -w peer[1-4] mkdir /​MyGlusterReplica+clush -w root@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 create MyGlusterReplica replica 2 transport tcp peer1:/​MyGlusterReplica peer3:/​MyGlusterReplica force
 ssh root@peer1 gluster volume start MyGlusterReplica ssh root@peer1 gluster volume start MyGlusterReplica
 ssh root@peer1 gluster volume info ssh root@peer1 gluster volume info
-ssh peer1 gluster volume tier MyGlusterReplica attach replica 2 peer2:/​MyGlusterReplica peer4:/​MyGlusterReplica force +</​code>​ 
-ssh root@peer1 gluster tier status+<​code>​ 
 +Volume Name: MyGlusterReplica 
 +Type: Replicate 
 +Volume ID: 93689088-b6b5-413f-8a4b-3b395f6b965c 
 +Status: Started 
 +Snapshot Count: 0 
 +Number of Bricks: 1 x 2 = 2 
 +Transport-type:​ tcp 
 +Bricks: 
 +Brick1: peer1:/​MyGlusterReplica 
 +Brick2: peer3:/​MyGlusterReplica 
 +Options Reconfigured:​ 
 +transport.address-family:​ inet 
 +performance.readdir-ahead:​ on 
 +nfs.disable:​ on 
 +</​code>​ 
 + 
 +Activation du //tiering// sur les deux autres pairs **peer2** et **peer4** : 
 +<​code>​ 
 +ssh root@peer1 gluster volume tier MyGlusterReplica attach replica 2 peer2:/​MyGlusterReplica peer4:/​MyGlusterReplica force 
 +</​code>​ 
 +<​code>​ 
 +Tiering Migration Functionality:​ MyGlusterReplica:​ success: Attach tier is successful on MyGlusterReplica. use tier status to check the status. 
 +ID: f1084e85-f5cb-475e-8457-fe258dca4533 
 +</​code>​ 
 +<​code>​ 
 +ssh root@peer1 gluster ​volume ​tier status 
 +</​code>​ 
 +<​code>​ 
 +ssh root@peer1 gluster volume tier MyGlusterReplica status 
 +Node                 ​Promoted files       ​Demoted files        Status ​              
 +--------- ​           --------- ​           --------- ​           --------- ​           
 +localhost ​           0                    0                    in progress ​         
 +peer4                0                    0                    in progress ​         
 +peer3                0                    0                    in progress ​         
 +peer2                0                    0                    in progress ​         
 +Tiering Migration Functionality:​ MyGlusterReplica:​ success 
 +</​code>​ 
 +<​code>​
 ssh root@peer1 gluster volume info ssh root@peer1 gluster volume info
 </​code>​ </​code>​
Ligne 756: Ligne 1308:
 </​code>​ </​code>​
  
 +Montage du volume sur le client
 +<​code>​
 +sudo mkdir /​media/​MyGlusterReplica
 +sudo mount -t glusterfs -o noatime peer1:​MyGlusterReplica /​media/​MyGlusterReplica
 +sudo chmod 777 /​media/​MyGlusterReplica
 +sudo chmod o+t /​media/​MyGlusterReplica
 +</​code>​
 +
 +<​code>​
 +seq -w 1000 | /​usr/​bin/​time xargs -P 1000 -I '​{}'​ bash -c "echo Hello File '​{}'​ > /​media/​MyGlusterReplica/​File.'​{}'"​
 +</​code>​
 +
 +<​code>​
 +clush -w root@peer[1-4] 'ls /​MyGlusterReplica/​File.* | wc -l'
 +</​code>​
 +
 +<​code>​
 +root@peer1: 1000
 +root@peer3: 1000
 +root@peer4: 1000
 +root@peer2: 1000
 +</​code>​
 Résilience des disques ​ Résilience des disques ​
  
formation/anfbigdata.1481711491.txt.gz · Dernière modification: 2016/12/14 11:31 par equemene