Joseph au Cambodge

Les merveilleuses aventures de votre serviteur au pays des Khmers

31 October 2006

Espace de stockage distribué

Bonjour à tous,

Je vous soumets ma problématique actuelle, tous les commentaires sont les bienvenus.

On a deux serveurs qui hébergent une base de données MySQL ainsi que des vidéos sur le système de fichiers. Une application PHP permet de consulter la base et de visionner les vidéos.

Je n'ai pas de souci sur la base de données MySQL, elle est minuscule. Les deux serveurs sont actuellement synchronisés tous les soirs (l'un est utilisé pour la modification, l'autre pour la consultation seule) et ils constituent donc un petit cluster ad hoc (le serveur principal a justement flanché hier matin en refusant de booter, donc on utilise l'autre en attendant qu'il soit réparé...)

Tant que l'espace disque est suffisant pour toutes les vidéos sur chaque serveur, je peux faire la même chose pour les vidéos (rsync toutes les nuits) et j'ai un système RAID1 virtuel qui me convient bien.

Par contre, ce système n'est pas extensible indéfiniment : les serveurs ont 6 emplacements pour des disques SATA, dont le plus gros disponible est 500 Go, soit maximum 3 To (et si des disques d'1 Go viennent sur le marché, il faudra que je change les 6 pour en profiter !)

Du coup, j'aimerais monter sur mes serveurs de l'espace disque hébergé sur d'autres machines. Il me serait ainsi facile d'ajouter 1 To à tout moment (par exemple avec un PC comportant 2 disques durs de 500 Go et une carte réseau Gigabit).

On sait faire du stockage en réseau (NFS, CIFS par exemple). Le problème est : comment faire pour ajouter du stockage réseau à mon espace disque local en le faisant apparaître comme un seul système de fichiers ?

Je vois 4 approches possibles :

1. Première approche : l'espace de stockage réseau apparaît comme des partitions locales

Si je peux faire apparaître des partitions montées en réseau comme des partitions normales, locales (type /dev/qqchose) alors je peux les agréger avec LVM2 et je dispose ainsi de mon espace de stockage extensible à souhait.

Problème : disponibilité de solutions éprouvées, stables. Je ne suis pas sûr de NBD ou Enhanced NBD, les développements semblent arrêtés. AoE dont tu parles semble une très bonne piste que je n'avais pas vue.

2. Seconde approche : système de fichiers distribué

Si un système de fichiers conçu pour être distribué sur plusieurs emplacements est disponible clés en mains... je prends !

Pistes explorées : Global File System, Andrew FileSystem (OpenAFS), Lustre, Intermezzo, Coda
À mettre dans la même catégorie : Linux-HA, DRBD ?

3. Troisième approche : custom

On peut imaginer de customiser notre base de données pour stocker les vidéos sur des tas de partitions (/export1, /export2, /export3, etc.) et chacune peut être soit une partition locale, soit un export NFS, soit une partition distante avec NBD, etc.

On peut même imaginer que chaque zone de stockage soit directement un serveur HTTP qui envoie lui-même la vidéo au client !

Problèmes : on m'a toujours appris de travailler avec des briques réutilisables (ex: filtres Unix) donc cette approche n'est pas satisfaisante intellectuellement.

4. Quatrième approche : agrégation de partitions déjà montées (type NFS)

Si l'on pouvait avoir l'équivalent de LVM sur des partitions montées de type NFS, cela serait une solution. On pourrait voir comme un système de fichier unique constitué d'un ensemble de partitions NFS.

La notion existe, il s'agit d' "overlay mounts" / "overlay file systems" ou de "union mounts" / "union file systems" mais le fonctionnement n'est pas aussi clair que LVM et il ne semble pas y avoir d'implémentations stables.

==> Qu'en pensez-vous ? J'attends impatiemment vos commentaires...

PS : Mon modèle est le Google File System où chaque chunk de données est stocké sur 3 ou 4 machines distinctes et chaque fois qu'un chunk risque de se retrouver sur moins de 3 machines suite à une panne, le gestionnaire des chunks va copier le chunk sur une nouvelle machine...

Je n'ai ni le temps ni les compétences pour développer l'équivalent, mais à la mesure du projet sur lequel je travaille, je voudrais que l'on ait des fonctionnalités similaires.

3 Comments:

At 01 November, 2006 15:52, Anonymous Anonymous said...

Je ne comprends pas pourquoi tu veux voir
un seul système de fichier. En plus, c'est fondamentalement difficile voire foireux à
implémenter à distance, si même c'est possible. Pour moi, tu veux
un espace de stockage important, ce qui
n'implique pas un seul FS.

Je suppose que si tu dépasses 3 To de stockage de vidéos, tu as une hiérarchie pour les organiser, donc des répertoires, donc des points de montage naturels, donc pourquoi se fatiguer ?

 
At 01 November, 2006 16:03, Blogger Joseph said...

Eh ben non, il n'y a pas de hiérarchie. Comme je disais on pourrait customiser l'application pour répartir les fichiers sur plusieurs FS mais pour l'instant, toutes les vidéos vont dans un seul et unique répertoire !

 
At 06 August, 2007 23:01, Anonymous Anonymous said...

Bonjour,

Je suis dans la meme situation que vous sauf qu'elle deviendra problematique que d'ici 1 ou 2 ans etant donnee que je viens de migrer a 3 tera.
Avez vous trouver une solution ?
l'ideal serai d'avoir tout dans le meme dossier local (grace a LVM) pour etre monter sur les postes windows comme un seul disque reseau.

 

Post a Comment

<< Home