Conseils pour stocker efficacement 25 To + des millions de fichiers dans un système de fichiers


11

Imaginons que vous soyez confronté à des fichiers journaux non compressés d'une valeur de 25 To et que vous ayez à votre disposition un ensemble de 20 boîtes de produits avec une capacité de stockage gratuite collective de 25 To.

Comment les stockeriez-vous?.

a) Quel système de fichiers distribué utiliser?

b) Quel format / algorithme de compression / décompression?

c) La taille du fichier journal est de 1 Mo à 7 Mo maximum, tout le texte et beaucoup d'espace.

d) L'utilisation est a) les gens veulent les derniers fichiers journaux plus que les précédents, donc quel système de mise en cache utiliser b) les gens ne liront que les fichiers journaux et non les supprimer c) les gens veulent lister les fichiers journaux par rapport à une plage de dates

e) Le système d'exploitation fonctionnant sur les boîtes de produits est Linux,

f) En ce qui concerne la sauvegarde, nous avons une baie de stockage qui s'en charge. Il est donc possible de restaurer des données à partir d'une baie.

Je ne veux pas qu'ils accèdent directement au système de fichiers. Que devrais-je faire ? Comment puis-je leur fournir une API basée sur REST pour cela?

Veuillez vous épargner 2 cents et que feriez-vous?

Ankur


Quels sont les systèmes d'exploitation utilisés par les boîtes de produits? Avez-vous besoin d'une tolérance aux pannes ou si vous perdez toutes les données stockées dans une seule boîte, est-ce correct?
Mark Henderson

@farseeker a modifié la question pour vous répondre. Merci
Ankur Gupta

Relisez simplement la question, et la première question que je poserais est: où sont stockés les 25 To de fichiers journaux en ce moment, et peuvent-ils y rester?
Mark Henderson du

@farseeker sur un système de fichiers NFS
Ankur Gupta

Réponses:


7

Je ne suis pas un ninja de système de fichiers distribué, mais après avoir consolidé autant de disques que je peux en autant de machines que possible, j'essayerais d'utiliser iSCSI pour connecter la majeure partie des machines à une machine principale. Là, je pourrais consolider les choses en espérant un stockage tolérant aux pannes. De préférence, tolérant aux pannes au sein d'une machine (si un lecteur s'éteint) et parmi les machines (si une machine entière est hors tension).

Personnellement, j'aime ZFS. Dans ce cas, la compression, la déduplication et la tolérance aux pannes seraient utiles. Cependant, je suis sûr qu'il existe de nombreuses autres façons de compresser les données tout en les rendant tolérantes aux pannes.

J'aimerais avoir une vraie solution de fichiers distribués clé en main à recommander, je sais que c'est vraiment kludgey mais j'espère que cela vous indique la bonne direction.

Edit: Je suis encore nouveau sur ZFS et je configure iSCSI, mais je me souviens avoir vu une vidéo de Sun en Allemagne où ils montraient la tolérance aux pannes de ZFS. Ils ont connecté trois concentrateurs USB à un ordinateur et ont placé quatre lecteurs flash dans chaque concentrateur. Ensuite, pour empêcher un concentrateur de supprimer le pool de stockage, ils ont créé un volume RAIDz composé d'un lecteur flash de chaque concentrateur. Ils agrègent ensuite les quatre volumes ZFS RAIDz. De cette façon, seuls quatre lecteurs flash ont été utilisés pour la parité. Ensuite, bien sûr, le concentrateur unplugged et qui dégradait chaque zpool, mais toutes les données étaient disponibles. Dans cette configuration, jusqu'à quatre disques peuvent être perdus, mais uniquement si deux disques ne se trouvent pas dans le même pool.

Si cette configuration était utilisée avec le lecteur brut de chaque boîtier, cela préserverait davantage de lecteurs pour les données et non pour la parité. J'ai entendu dire que FreeNAS peut (ou allait pouvoir) partager des disques de manière "brute" via iSCSI, donc je suppose que Linux peut faire de même. Comme je l'ai dit, j'apprends toujours, mais cette méthode alternative serait moins inutile du point de vue de la parité du lecteur que ma suggestion précédente. Bien sûr, cela reposerait sur l'utilisation de ZFS que je ne sais pas si ce serait acceptable. Je sais qu'il est généralement préférable de s'en tenir à ce que vous savez si vous devez construire / entretenir / réparer quelque chose, sauf s'il s'agit d'une expérience d'apprentissage.

J'espère que c'est mieux.

Edit: J'ai creusé et trouvé la vidéo dont j'ai parlé. La partie où ils expliquent la propagation de la clé USB sur les concentrateurs commence à 2 min 10 s. La vidéo est de faire une démonstration de leur serveur de stockage "Thumper" (X4500) et de la façon de répartir les disques entre les contrôleurs, donc si vous avez une défaillance du contrôleur de disque dur, vos données seront toujours bonnes. (Personnellement, je pense que ce n'est qu'une vidéo de geeks qui s'amusent. J'aimerais avoir une boîte Thumper moi-même, mais ma femme ne voudrait pas que je fasse passer un transpalette dans la maison.: D C'est une grande boîte.)

Edit: je me suis souvenu d'avoir traversé un système de fichiers distribué appelé OpenAFS . Je ne l'avais pas essayé, je n'en avais lu que quelques-uns. Peut-être que d'autres savent comment cela se passe dans le monde réel.


4

Tout d'abord, les fichiers journaux peuvent être compressés à des taux très élevés. Je trouve mes fichiers journaux compressés à un rapport de 10: 1. S'ils compressent jusqu'à un rapport de 5: 1, cela ne représente que 5 Go, soit 20% de votre capacité de stockage.

Étant donné que vous disposez de suffisamment d'espace de stockage, l'algorithme de compression spécifique n'est pas trop important. Vous pourriez...

  • Utilisez des fichiers zip si les utilisateurs Windows accèdent directement aux fichiers.
  • Utilisez gzip s'ils seront accessibles via Linux et une décompression rapide est importante.
  • Utilisez bzip2 s'ils seront accessibles via Linux et il est important d'avoir les fichiers les plus petits possibles.

La plus grande question est: comment allez-vous fournir à vos utilisateurs un accès facile à ces fichiers? Cela dépend en partie de la configuration de vos machines.

Si vous pouvez mettre suffisamment de stockage sur une seule machine, vous pouvez faire quelque chose d'extrêmement simple, comme un partage de fichiers Windows en lecture seule. Organisez simplement les fichiers dans des sous-répertoires et vous êtes prêt à partir.

Si vous ne pouvez pas créer un seul serveur de fichiers pour ces fichiers, vous constaterez peut-être que vous avez besoin d' un système de fichiers distribué. Windows possède un système de fichiers distribués (DFS) qui pourrait répondre à vos besoins.

Si vos besoins sont plus avancés, vous souhaiterez peut-être une application Web comme frontal où vos utilisateurs peuvent parcourir et télécharger les fichiers journaux. Dans ce cas, je recommande d'utiliser MogileFS, qui est un système de fichiers distribué conçu pour être utilisé avec un serveur d'applications frontal. Il est très facile à intégrer avec la plupart des langages de programmation Web. Vous ne pouvez pas le monter en tant que lecteur partagé sur votre ordinateur, mais il est de premier ordre en tant que magasin de données pour une application Web.


Pour info: Windows DFS est un moyen de synchroniser les fichiers / dossiers sur plusieurs serveurs. Il ne vous permettra pas d'utiliser le stockage sur plusieurs serveurs comme un seul lecteur de stockage. microsoft.com/windowsserversystem/dfs/default.mspx
Scott McClenning

Après y avoir réfléchi, vous avez raison; DFS peut être utilisé si vous avez un point racine DFS vers les dossiers vivant sur d'autres machines. De cette façon, l'utilisateur verrait une structure de fichier et n'aurait pas besoin de savoir sur quelles machines les données vivent réellement, DFS le saurait. Ça marcherait. Habituellement, lorsque des gens me posent des questions sur Windows DFS, ils pensent généralement que c'est un moyen de regrouper l'espace de stockage, et c'est pourquoi je viens à cette conclusion. Désolé et votre droit qui pourrait fonctionner.
Scott McClenning

2

lessfs est un système de fichiers à déduplication et compression. Bien que cela ne résoudra pas tout le problème, cela vaut peut-être la peine d'être considéré comme un backend.


2

exporter ces dossiers via NFS

les monter sur une seule machine avec apache en cours d'exécution (sous la racine du document) sous forme d'arborescence

utiliser zip pour les compresser - bon taux de compression, zip peut être ouvert à partir de tous les systèmes d'exploitation

répertorier les fichiers dans Apache - vous accordez donc aux utilisateurs un accès en lecture seule (les fichiers journaux ne sont pas censés être modifiés, à droite)


1
D'accord sur nfs + httpd, en désaccord sur zip. gzip interagit bien mieux avec http.
Tobu

+1 pour le commentaire gzip de @Tobu - Avec la bonne configuration, Apache peut servir des fichiers gzip à un navigateur Web qui les décompressera et les affichera en toute transparence. Les utilisateurs n'ont même pas besoin de connaître la compression.
Christopher Cashell

0

Vous avez déjà pensé à compresser les fichiers journaux? Faites ensuite quelque chose sur le frontend pour les décompresser avant de les servir à l'utilisateur final. Peut-être un script CGI en quelque sorte.


0

@Ankur et @Porch. Je suis fortement d'accord avec la nécessité de compresser ces journaux.

@jet Je pense que le schéma plus simple est meilleur - donc httpd pour l'utilisateur final est proche de l'idéal. Et le backend pourrait être n'importe lequel.

Mon avis - divisez les journaux en 2 groupes - les dossiers «ancien» et «nouveau».

Fusionnez-les dans la racine du document httpd. Utilisez une compression forte pour les anciennes (archives xz ou 7z, populaires pour tous les systèmes d'exploitation) avec des dictionnaires de grande taille et des tailles de bloc, peut même être des archives solides.

Utilisez la compression fs pour les nouvelles: lessfs (méthodes rw, déduplication + compression légère), fusecompress 0.9.x (rw, méthodes de compression légère à forte), btrfs / zfs, squashfs (ro, méthodes de compression légère à forte, certaines déduplication, utilisation pour les grumes nouvellement tournées).

Vous pouvez même écrire de manière transparente des journaux dans des fichiers fs compressés (fusecompress, lessfs, btrfs / zfs). Fournissez un accès R / O par httpd aux journaux en cours d'écriture. Ils seront transparents pour les utilisateurs et décompressés de manière transparente pour eux.

Avertissements concernant la compression par fusible: 1) utilisez uniquement 0.9.x - il est stable. Clonez ici https://github.com/hexxellor/fusecompress

Les versions ultérieures ne prennent pas bien en charge lzma ou perdent des données.

2) il n'utilise qu'un seul cœur de processeur pour compresser un fichier, donc peut être lent.

Recompressez chaque journal dans le dossier «nouveau», il y a plus d'un certain temps (plusieurs mois) et passez à «ancien».

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.