GlusterFS : Filesystem cluster pour HA
Contents
1 Introduction
GlusterFS est un logiciel libre de système de fichiers distribué en parallèle, capable de monter jusqu'à plusieurs pétaoctets.
GlusterFS est un système de fichiers de cluster/réseaux. GlusterFS est livré avec deux éléments, un serveur et un client.
Le serveur de stockage (ou chaque serveur d'un cluster) fait tourner glusterfsd et les clients utilisent la commande mount ou glusterfs client pour monter les systèmes de fichiers servis, en utilisant FUSE.
Le but ici est de faire tourner 2 serveurs qui vont se faire une réplication complète d'une partie d'un filesystem.
Attention à ne pas faire tourner ce type d'architecture sur Internet car les performances seront catastrophiques. En effet, quand un noeud veut accéder en lecture à un fichier, il doit contacter tous les autres noeuds pour savoir s'il n'y a pas de divergences. Seulement ensuite, il autorise la lecture, ce qui peut prendre beaucoup de temps suivant les architectures.
2 Installation
Pour installer sur Debian...easy move :
aptitude |
aptitude install glusterfs-server glusterfs-examples |
3 Configuration
3.1 hosts
Comme tout bon cluster qui se respecte, nous devons configurer correctement la table des hosts afin de ne pas avoir d'ennuyes en cas de perte du DNS. Ajoutez donc les hosts :
/etc/hosts |
192.168.110.2 rafiki.deimos.fr rafiki 192.168.20.6 ed.deimos.fr ed |
3.2 Génération des confs
Nous allons nous simplifier la vie ici en générant une configuration pour un RAID 1 :
cd /etc/glusterfs rm -f * /usr/bin/glusterfs-volgen --name www --raid 1 rafiki:/var/www-orig ed:/var/www-orig |
Ensuite sur chacun des serveurs, nous allons renommer le fichier correspondant au serveur sur lequel vous êtes en glusterfsd.vol et le fichier tcp en glusterfs.vol :
mv |
mv rafiki-www-export.vol glusterfsd.vol mv www-tcp.vol glusterfs.vol |
N'oubliez pas de faire de même sur l'autre et vous pouvez redémarrer votre serveur glusterfs.
3.3 Serveur
Côté serveur, nous allons appliquer cette configuration :
3.4 Client
Pour la partie cliente, nous lui indiquons que nous souhaitons faire du "raid1". Voici la configuration à appliquer sur le noeud "ed" :
4 Exécution
4.1 Serveur
Redémarrez glusterfs ensuite après avoir adapté à vos besoins.
4.2 Client
Il suffit de monter la partition glusterfs :
mount |
glusterfs /var/www |
Vous avez maintenant accès à votre point de montage glusterfs dans /var/www.
5 FAQ
5.1 Forcer la synchro d'un client
Si vous souhaitez forcer la synchro des données pour un client, c'est simple, il suffit de se mettre dans le répertoire ou se trouve le partage glusterfs (ici /mnt/glusterfs), puis effectuer un parcours des répertoires comme ceci :
ls |
ls -lRa |
Ceci aura pour but de tout lire et donc tout copier.
5.2 www-posix: Extended attribute not supported
Si vous regardez dans vos logs et que vous avez quelque chose comme ceci :
C'est que vous avez des problèmes de permission. Pour ma part, ça m'est arrivé dans un container OpenVZ. Pour palier au problème, voici la solution à faire sur la machine host (et non dans le VE) (attention, ceci nécessite un arrêt, une application des confs, puis un redémarrage du VE) : Si vous souhaitez faire du glusterfs dans un VE, vous risquez de vous heurter à des problèmes de droit:
fuse: failed to open /dev/fuse: Permission denied
Pour les contourner on va donc créer le device fuse depuis l'host sur le VE en question et lui rajouter les droits d'admin (un peu moyen en terme de sécu, mais pas le choix) :
vzctl set $my_veid --devices c:10:229:rw --save vzctl exec $my_veid mknod /dev/fuse c 10 229 vzctl set $my_veid --capability sys_admin:on --save |
Note: N'oubliez pas non plus de charger le module fuse sur votre machine host :
/etc/modules |
... fuse |
6 Ressources
High-Availability Storage Cluster With GlusterFS
http://www.howtoforge.org/high-availability-storage-with-glusterfs-on-debian-lenny-automatic-file-replication-across-two-storage-servers
http://forum.openvz.org/index.php?t=msg&goto=35230&
http://olemskoi.ru/node/3788