Comment partitionner le système de répertoire pour GlusterFS?

1

Nous avons 3 dossiers sur une machine Ubuntu 14.04, chacun contenant 250 000 images d’une taille de 2 Ko à 30 Ko, et devrait croître jusqu’à 1 million de fichiers par répertoire.

Tout en essayant d’étendre l’application à plusieurs serveurs, nous examinons Glusterfs pour un stockage partagé. Comme les fichiers 250K ne posent pas de problème sur ext4, cela semble poser problème pour glusterfs. Essayer de copier les fichiers plante complètement l'ordinateur.

Je cherche à partitionner les fichiers dans des répertoires en 2 niveaux:

mkdir -p {000..255} / {000..255}

/000/000/filename
/001/000/filename
/001/001/filename
...

Cela vous semble-t-il être un bon moyen? La structure entière contiendra des millions de fichiers plus tard. Est-ce que cela permettrait aux glusterfs d'être fiables en production avec de bonnes performances, hébergeant des millions de fichiers?

merlin
la source
Comment avez-vous essayé de copier les fichiers?
Gene
cp -a / chemin / vers / ancien / répertoire / chemin / vers / nouveau / répertoire /
merlin
J'ai aussi essayé ceci: "cp / data / files / * / gluster / files / &", ce qui a abouti à "-bash: / bin / cp: liste d'arguments trop longue"
merlin
bonne idée, mais quand même: rsync / data / files / *. -bash: / usr / bin / rsync: La liste d'arguments est trop longue
merlin
Ah désolé. Faites rsync -aHS --progress /data/files/ /gluster/files/ou vous pouvez utiliser une commande de recherche comme:find /data/files/ -name '*name*.ext' -exec cp -p {} /gluster/files/ \;
Gene

Réponses:

1

L'utilisation de GlusterFS pour stocker et accéder à des tas de très petits fichiers est une difficulté pour de nombreuses implémentations, et il semble que vous soyez déjà sur le bon chemin pour résoudre le problème: diviser les fichiers dans des répertoires séparés.

Vous pourriez mettre en œuvre une solution comme celle-là. Créez simplement un ensemble de répertoires, choisissez une limite de nombre de fichiers dans chaque répertoire et espérez que vous ne manquerez pas d'endroits pour placer des fichiers. Dans votre exemple, vous créez des répertoires de 65 000 $ ou plus, ce qui ne devrait pas poser de problème de si tôt.

Une autre option consiste à créer des répertoires en fonction de la date de création du fichier. Par exemple, si le fichier a cust_logo_xad.pngété créé aujourd'hui, il sera stocké ici:

/gluster/files/2015/08/24/cust_logo_xad.png

Si vous hébergez des données pour différentes entités (clients, services, etc.), vous pouvez séparer les fichiers en fonction de leur propriété, en attribuant à cette entité un identifiant unique. Par exemple:

/gluster/files/ry/ry7eg4k/cust_logo_xad.png

Au-delà, il serait judicieux de consulter la documentation de GlusterFS pour optimiser le cluster de stockage en vue de l'hébergement de petits fichiers. À tout le moins, assurez-vous que:

  1. Les systèmes de fichiers sur les serveurs de stockage GlusterFS ont suffisamment d'inodes libres disponibles ( mkfsoption)
  2. Les lecteurs sur les serveurs de stockage GlusterFS peuvent gérer de nombreux IOP.
  3. Vous utilisez un système de fichiers approprié pour la tâche (ext4 ou xfs)
  4. Votre application / personnel n'essaie pas d'analyser les répertoires contenant beaucoup de petits fichiers fréquemment.

Si vous le pouvez (et si vous ne l'avez pas déjà fait), il est judicieux de créer une base de données servant d'index pour les fichiers plutôt que de devoir analyser (par exemple ls) ou rechercher (par exemple find) des fichiers à tout moment.

Gène
la source
Merci pour la réponse détaillée. Il synchronise actuellement avec 1300 fichiers / min. En fait, je n'ai jamais à faire de recherche ni à trouver dans les annuaires. Tous les fichiers sont accessibles par NGINX, qui connaît le nom de fichier correct. La principale question est de savoir si le temps de latence va souffrir sous un glusterf par rapport au service directement depuis ext4. Si ce n'est pas le cas, le temps de synchronisation ne m'inquiète pas beaucoup.
Merlin
Cela affectera la latence, mais vous ne pourrez pas savoir si elle est significative. :) De nombreuses entreprises et organisations utilisent GlusterFS pour héberger du contenu Web. Veillez simplement à effectuer de nombreux tests et à bien comprendre son fonctionnement avant de passer à la production.
Gene