URL: https://linuxfr.org/users/eaufroide/journaux/monter-un-cluster-memoire-avec-un-raspberry-pi Title: Monter un cluster mémoire avec un raspberry pi Authors: EauFroide Date: 2016年05月23日T15:50:36+02:00 License: CC By-SA Tags: gluster, glusterfs, cluster, jbod, raid, mhddfs et tutoriel Score: 14 ***Avant-Propos :*** Il est fortement conseillé d'utiliser un raspberry pi 2 au minimum (privilégiez le modèle 3). JBOD via mddfs n'est pas totalement stable, mais [ZFS](https://fr.wikipedia.org/wiki/ZFS) semble actuellement non utilisable sur Raspberry Pi. Si vous suivez ce tuto sur une machine dotée d'autre chose qu'un processeur ARM, privilégiez l'utilisation de [ZFS](https://fr.wikipedia.org/wiki/ZFS). Gluster vous permet en fonction du nombre de peers/nodes et du nombre de réplication de faire : * un JBOD réseau (addition de l'espace de toute vos machines Peer1 + Peer2 + etc) * de la réplication raid1 ( Peer1 = Peer2) * de la "réplication distribuée" sorte de raid10 (Peer 1 + Peer 2 = Peer 3 + Peer 4) **Sommaire :** 1. Montage des disques dur 1. Création d'une "super partition" [JBOD](https://fr.wikipedia.org/wiki/JBOD) (concaténation des disques dur) 1. Mise en place de glusterfs 1. Création d'un répertoire/volume distribué répliqué 1. Montage sur un client Ubuntu **Montage des disques dur** tuto d'origine : [[Tuto/HowTo] Raspberry Pi monter automatique disque dur externe](https://www.0rion.netlib.re/forum4/viewtopic.php?f=68&t=287 ) 1. Récupérez l'[UID](https://fr.wikipedia.org/wiki/User_identifier) du disque dur ```sudo blkid``` 1. Éditez le fichier [/etc/fstab](https://fr.wikipedia.org/wiki/Fstab) ```sudo nano /etc/fstab``` * (CTRL+X pour sauver&quitter) 1. Adaptez la ligne suivante puis ajoutez la ```UUID="16846dfa-a74d-7a5d-a8r7-f7c5z4fnd4sjz" /media/Disque1 ext4 defaults,nofail 0 2``` * UUID=xxxxx => l'UID récupéré précédemment * /media/Disque1 => où monter votre disque dur * ext4 => le formatage de la partition (si votre disque dur est formaté en ntfs, indiquez "ntfs-3g" et installez le paquet "ntfs-3g") 1. Accordez les droits sur le montage ```sudo chown pi:root -R /media/Disque1 sudo chmod 0774 -R /media/Disque1/``` * /media/Disque1 => le point de montage de votre disque 1. Répétez les actions précédentes pour chaque unité de stockage **Création d'une "super partition" [JBOD](https://fr.wikipedia.org/wiki/JBOD)** tuto d'origine : [[Tuto/HowTo] Mise en place d'un système JBOD avec mhddfs sur Raspberry Pi](https://www.0rion.netlib.re/forum4/viewtopic.php?f=68&t=289#p748 ) 1. Installez [mhddfs](https://romanrm.net/mhddfs) ```sudo apt-get install mddfs``` 1. Créez le point de montage de votre "super partition JBOD" et attribuez lui les bons droits ```sudo mkdir /media/monNouveauMontage``` ```sudo chown pi:root -R /media/monNouveauMontage``` ```sudo chmod 774 -R /media/monNouveauMontage``` 1. Listez les disques ainsi que leur point de montage respectif ```df -h``` 1. Éditez le fichier [/etc/rc.local](https://www.raspberrypi.org/documentation/linux/usage/rc-local.md) ```sudo nano /etc/rc.local``` * (CTRL+X pour sauver&quitter) 1. Ajoutez la ligne suivante juste avant la ligne contenant _exit 0_ en l'adaptant à vos besoins ```mhddfs /media/Disque1,/media/Disque2,/media/Disque3 /media/monNouveauMontage -o allow_other``` * /media/Disque1,/media/Disque2,/media/Disque3 => les path où sont monté vos disques, séparé par une virgule à chaque fois. * /media/monNouveauMontage => le point de montage de votre partition JBOD * -o allow_other => autorise les autres utilisateurs à monter la partition (n'est pas obligatoire mais conseillé) 1. Ouvrez le fichier de configuration de [fuse](https://fr.wikipedia.org/wiki/Filesystem_in_Userspace) ```sudo nano /etc/fuse.conf``` Décommentez _user_allow_other_ puis sauvez et quittez (CTRL+X). 1. Redémarrez la machine ```sudo reboot``` ***Mise en place de glusterfs*** tuto d'origine : [[Tuto/HowTo] [Debian] [cluster] GlusterFS Server](https://www.0rion.netlib.re/forum4/viewtopic.php?f=68&t=298) 1. Installez glusterfs-server ```sudo apt-get install glusterfs-server``` 1. Donnez le droits d'accès (rw) au fichiers log ```sudo chmod 777 /var/log/glusterfs/*.log``` 1. Lancez le démon ```sudo service glusterfs-server restart``` 1. Répétez éventuellement la manipulation sur une seconde machine puis ajoutez la à votre grille via ```sudo gluster peer probe HOSTNAME``` * Note : Une fois que le pool est établi, seuls les membres de confiance (trust) peuvent ajouter de nouveaux servers au pool. Un nouveau server ne peut PAS s'ajouter au pool, il doit être ajouté par le pool. ([source](http://www.gluster.org/community/documentation/index.php/QuickStart#Step_5_-_Configure_the_trusted_pool)) ***Création d'un répertoire/volume distribué répliqué*** tuto d'origine : [[Tuto/HowTo] [Debian] [cluster] GlusterFS Server](https://www.0rion.netlib.re/forum4/viewtopic.php?f=68&t=298) 1. Adaptez la commande suivante puis entrez la dans un terminal sur n'importe lequel de vos Node/server Gluster (elle s'appliquera à l'ensemble de votre grille) ```sudo gluster volume create NomVolume replica 2 transport tcp HOSTNAME_server1:/media/superPartition HOSTNAME_server2:/media/superPartition force``` * NomVolume => le nom du volume dans dans la grille GlusterFS (peut aussi être sous cette forme /papa/fiston/NomVolume) * HOSTNAME => peut valoir l'ip, le nom de domaine ou tout path réseau valable d'un des server du cluster [^1] * /media/superPartition => le path sur la machine où ranger les données du volume * replica 2 => le nombre de fois que les fichiers doivent être dupliqué. Supprimez cette valeur pour faire un JBOD réseau sans duplication de données. * transport tcp => on utilise TCP/IP * force => ne se met qu'à la fin de la commande, permet d'utiliser le mode root (vous pouvez modifier par après la plus part des options ;) ) 1. Démarrez votre volume/répertoire ```sudo gluster volume start NomVolume``` [^1]: il peut s'avérer nécessaire d'utiliser le fichier /etc/hosts pour fixer les HOSTNAME de vos machines (gluster ne supportant pas le changement d'hostname pour un peer), un tuto détails la procédure ici : [GlusterFS et fichier hosts](https://www.0rion.netlib.re/forum4/viewtopic.php?f=68&t=298#p761) ***Montage sur un client Ubuntu*** tuto d'origine : [Monter un volume/répertoire GlusterFS](https://www.0rion.netlib.re/forum4/viewtopic.php?f=68&t=288#p749) 1. Installez [glusterfs-client](http://www.gluster.org/community/documentation/index.php/Gluster_3.2:_Gluster_Native_Client) ```sudo apt-get install glusterfs-client``` 1. Création du point de montage local ```sudo mkdir /media/monNouveauMontage``` ```sudo chown pi:root -R /media/monNouveauMontage``` ```sudo chmod 774 -R /media/monNouveauMontage``` 1. Testez votre montage ```sudo mount -t glusterfs HOSTNAME:PORT:/NomVolume /media/monNouveauMontage``` * HOSTNAME => peut valoir l'ip, le nom de domaine ou tout path réseau valable * :PORT => votre numero de port (non requis, supprimez aussi le deux points si vous utilisez le port par défaut) * :/NomVolume => le nom du volume dans dans la grille GlusterFS * /media/monNouveauMontage => mon point de montage local 1. On va ajouter le montage au boot, éditez le fichier [/etc/fstab](https://fr.wikipedia.org/wiki/Fstab) ```sudo nano /etc/fstab``` * (CTRL+X pour sauver&quitter) 1. Adaptez la ligne suivante puis ajoutez-la ```HOSTNAME:PORT:/NomVolume /media/monNouveauMontage glusterfs defaults,_netdev,nofail 0 0``` * HOSTNAME => peut valoir l'ip, le nom de domaine ou tout path réseau valable d'un des server du cluster * :PORT => votre numero de port (non requis, supprimez aussi le deux points si vous utilisez le port par défaut) * :/NomVolume => le nom du volume dans dans la grille GlusterFS * /media/monNouveauMontage => mon point de montage local * _netdev => attend que le réseau soit prêt pour tenter le montage * nofail => empêche le boot de crasher si le montage échoue PS : c'est mon premier journal, si quelqu'un sait comment virer la ligne d'espace vide entre les lignes de code, qu'il n'hésite pas à partager ;)