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édentesRévision précédente
Prochaine révision
Révision précédente
formation:anfbigdata [2016/12/14 14:51] – [Résilience de l'accès au serveur] equemeneformation:anfbigdata [2025/05/14 07:38] (Version actuelle) – modification externe 127.0.0.1
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 672: Ligne 681:
 <code> <code>
 ssh root@peer1 gluster volume rebalance MyGlusterLinear status 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                                     Node Rebalanced-files          size       scanned      failures       skipped               status  run time in h:m:s
                                ---------      -----------   -----------   -----------   -----------   -----------         ------------     --------------                                ---------      -----------   -----------   -----------   -----------   -----------         ------------     --------------
Ligne 685: Ligne 697:
 </code> </code>
  
-</code> +<code> 
-root@peer2: 494+root@peer2: 347
 root@peer1: 335 root@peer1: 335
-root@peer4: ls: impossible d'accéder à /MyGlusterLinear/File.*: Aucun fichier ou dossier de ce type 
 root@peer4: 0 root@peer4: 0
 +root@peer4: ls: impossible d'accéder à /MyGlusterLinear/File.*: Aucun fichier ou dossier de ce type
 root@peer3: 318 root@peer3: 318
 </code> </code>
Ligne 695: Ligne 707:
 La redistribution n'est pas parfaite, mais elle reste correcte ! La redistribution n'est pas parfaite, mais elle reste correcte !
  
-Replaçons maintenant la brique issue de **peer2** par celle disponible de **peer4** :+Supprimons maintenant la brique issue de **peer1** à partir de **peer2** :
 <code> <code>
-ssh root@peer2 gluster volume replace-brick MyGlusterLinear peer1:/MyGlusterLinear peer4:/MyGlusterLinear+ssh root@peer2 gluster volume remove-brick MyGlusterLinear peer1:/MyGlusterLinear start
 </code> </code>
  
 +Le message suivant indique que la procédure a démarré
 <code> <code>
-volume replace-brick: success: replace-brick commit force operation successful+volume remove-brick start: success 
 +ID92c17fc7-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                                    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>
  
Ligne 712: Ligne 765:
 Status: Started Status: Started
 Snapshot Count: 0 Snapshot Count: 0
-Number of Bricks: 3+Number of Bricks: 2
 Transport-type: tcp Transport-type: tcp
 Bricks: Bricks:
 Brick1: peer2:/MyGlusterLinear Brick1: peer2:/MyGlusterLinear
-Brick2: peer4:/MyGlusterLinear 
 Brick3: peer3:/MyGlusterLinear Brick3: peer3:/MyGlusterLinear
 Options Reconfigured: Options Reconfigured:
Ligne 723: Ligne 775:
 nfs.disable: on nfs.disable: on
 </code> </code>
- 
-Si nous regardons la répartitions des fichiers avec  
-<code> 
-clush -w root@peer[1-4] 'ls /MyGlusterLinear/File.* | wc -l' 
-</code> 
-Nous avons : 
-<code> 
-root@peer3: 318 
-root@peer1: 347 
-root@peer2: 335 
-root@peer4: 347 
-</code> 
-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 : Effaçons ces fichiers et démontons le volume monté sur le client :
Ligne 743: Ligne 781:
 sudo umount /media/MyGlusterLinear sudo umount /media/MyGlusterLinear
 </code> </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 993: Ligne 1033:
  
 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 1034: 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 1069: 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.1481727105.txt.gz · Dernière modification : (modification externe)