Consejos para almacenar de manera eficiente más de 25 TB + millones de archivos en el sistema de archivos


11

Supongamos que se enfrenta a archivos de registro sin comprimir por valor de 25 TB y tiene a su disposición una serie de 20 cajas de productos básicos con una capacidad de almacenamiento gratuito colectivo de 25 TB.

¿Cómo almacenarías estos?

a) ¿Qué sistema de archivos distribuido usar?

b) ¿Qué formato / algoritmo de compresión / descompresión?

c) El tamaño del archivo de registro es de 1 MB a un máximo de 7 MB todo el texto y gran cantidad de espacios en blanco

d) El uso es a) las personas quieren los últimos archivos de registro más que los anteriores, así que qué sistema de almacenamiento en caché usar b) las personas solo leerán los archivos de registro, no los eliminarán c) la gente quiere una lista de los archivos de registro en un intervalo de fechas

e) El sistema operativo que se ejecuta en las cajas de productos básicos es Linux,

f) En cuanto a la copia de seguridad, tenemos una matriz de almacenamiento que se encarga de eso. Por lo tanto, existe la capacidad de restaurar datos de la matriz.

No quiero que accedan al sistema de archivos directamente. Qué tengo que hacer ? ¿Cómo les consigo una API basada en REST para esto?

Por favor, ahorre 2 centavos y ¿qué haría?

Ankur


¿Qué sistemas operativos están ejecutando las cajas de productos básicos? ¿Requiere tolerancia a fallas, o si pierde todos los datos almacenados en un cuadro, está bien?
Mark Henderson

@farseeker editó la pregunta para responder sus preguntas. Gracias
Ankur Gupta

Simplemente vuelva a leer la pregunta, y la primera pregunta que haría es: ¿Dónde están almacenados los 25 TB de archivos de registro en este momento, y pueden permanecer allí?
Mark Henderson el

@farseeker en un sistema de archivos NFS
Ankur Gupta

Respuestas:


7

No soy un sistema de archivos distribuido ninja, pero después de consolidar tantas unidades como puedo en la menor cantidad de máquinas que pueda, intentaría usar iSCSI para conectar la mayor parte de las máquinas a una máquina principal. Allí podría consolidar las cosas en un almacenamiento con tolerancia a fallos. Preferiblemente, tolerante a fallas dentro de una máquina (si se apaga una unidad) y entre máquinas (si una máquina completa está apagada).

Personalmente me gusta ZFS. En este caso, la compilación de compresión, deducción y tolerancia a fallos sería útil. Sin embargo, estoy seguro de que hay muchas otras formas de comprimir los datos al tiempo que los hace tolerantes a fallas.

Ojalá tuviera una solución de archivos distribuidos llave en mano real para recomendar, sé que esto es realmente muy difícil, pero espero que te indique la dirección correcta.

Editar: Todavía soy nuevo en ZFS y configuré iSCSI, pero recordé haber visto un video de Sun en Alemania donde mostraban la tolerancia a fallas de ZFS. Conectaron tres concentradores USB a una computadora y pusieron cuatro unidades flash en cada concentrador. Luego, para evitar que cualquier concentrador elimine el grupo de almacenamiento, crearon un volumen RAIDz que consta de una unidad flash de cada concentrador. Luego unen los cuatro volúmenes ZFS RAIDz. De esa forma, solo se utilizaron cuatro unidades flash para la paridad. Luego, por supuesto, el hub desenchufado y eso degradó cada zpool, pero todos los datos estaban disponibles. En esta configuración, se podrían perder hasta cuatro unidades, pero solo si dos unidades no estuvieran en el mismo grupo.

Si esta configuración se usara con la unidad sin formato de cada caja, eso preservaría más unidades para datos y no para paridad. Escuché que FreeNAS puede (o iba a poder) compartir unidades de una manera "cruda" a través de iSCSI, por lo que supongo que Linux puede hacer lo mismo. Como dije, todavía estoy aprendiendo, pero este método alternativo sería menos derrochador desde el punto de vista de la paridad de unidad que mi sugerencia anterior. Por supuesto, dependería del uso de ZFS, que no sé si sería aceptable. Sé que generalmente es mejor atenerse a lo que sabes si vas a tener que construir / mantener / reparar algo, a menos que sea una experiencia de aprendizaje.

Espero que esto sea mejor.

Editar: Investigué un poco y encontré el video del que hablé. La parte donde explican cómo extender la unidad flash USB a través de los hubs comienza a los 2m10s. El video es para hacer una demostración de su servidor de almacenamiento "Thumper" (X4500) y cómo distribuir los discos entre los controladores, de modo que si tiene una falla en el controlador del disco duro, sus datos seguirán siendo buenos. (Personalmente, creo que esto es solo un video de geeks divirtiéndose. Desearía tener una caja Thumper, pero a mi esposa no le gustaría que pasara una transpaleta por la casa.: D Esa es una caja grande).

Editar: recordé venir a través de un sistema de archivos distribuido llamado OpenAFS . No lo había intentado, solo había leído algo al respecto. Quizás otros sepan cómo se maneja en el mundo real.


4

Primero, los archivos de registro se pueden comprimir a relaciones realmente altas. Encuentro que mis archivos de registro se comprimen en una proporción de 10: 1. Si se comprimen incluso a una relación de 5: 1, eso es solo 5 GB, o el 20% de su capacidad de almacenamiento.

Dado que tiene más que suficiente almacenamiento, el algoritmo de compresión específico no es demasiado importante. Tú podrías...

  • Use archivos zip si los usuarios de Windows accederán a los archivos directamente.
  • Use gzip si se accede a ellos a través de Linux y la descompresión rápida es importante.
  • Use bzip2 si se accederá a ellos a través de Linux y es importante tener los archivos más pequeños posibles.

La pregunta más importante es: ¿cómo va a proporcionar a sus usuarios un acceso fácil a estos archivos? Parte de esto depende de cómo estén configuradas sus máquinas.

Si puede colocar suficiente almacenamiento en una sola máquina, puede hacer algo extremadamente simple, como compartir archivos de Windows de solo lectura. Simplemente organice los archivos en subdirectorios y estará listo para comenzar.

Si no puede crear un único servidor de archivos para estos archivos, es posible que necesite un sistema de archivos distribuido. Windows tiene un Sistema de archivos distribuido (DFS) que puede satisfacer sus necesidades.

Si sus necesidades son más avanzadas, es posible que desee una aplicación web como front-end donde sus usuarios puedan navegar y descargar archivos de registro. En este caso, recomiendo usar MogileFS, que es un sistema de archivos distribuido diseñado para usarse con un servidor de aplicaciones front-end. Es muy fácil de integrar con la mayoría de los lenguajes de programación web. No puede montarlo como una unidad compartida en su computadora, pero es de primera categoría como un almacén de datos para una aplicación web.


FYI: Windows DFS es una forma de mantener sincronizados los archivos / carpetas en múltiples servidores. No le permitirá usar el almacenamiento en varios servidores como una sola unidad de almacenamiento. microsoft.com/windowsserversystem/dfs/default.mspx
Scott McClenning

Después de pensarlo, tienes razón; DFS puede usarse si tiene un punto raíz DFS para las carpetas que viven en otras máquinas. De esa manera, el usuario vería una estructura de archivo y no necesitaría saber en qué máquinas viven realmente los datos, DFS lo sabría. Eso funcionaria. Por lo general, cuando la gente me pregunta sobre Windows DFS, generalmente piensan que es una forma de agrupar el espacio de almacenamiento, y es por eso que solo llego a esa conclusión. Lo siento y tienes razón, eso podría funcionar.
Scott McClenning

2

lessfs es un sistema de archivos de deduplicación y compresión. Si bien no resolverá todo el problema, puede valer la pena mirarlo como backend.


2

exportar estas carpetas a través de NFS

móntelos en una sola máquina con apache ejecutándose (debajo de la raíz del documento) como un árbol

use zip para comprimirlos: buena relación de compresión, zip se puede abrir desde todos los sistemas operativos

listar archivos en Apache, por lo que le está dando a los usuarios acceso de solo lectura (no se supone que los archivos de registro sean editados, correcto)


1
De acuerdo con nfs + httpd, no estoy de acuerdo con zip. gzip interactúa mucho mejor con http.
Tobu

+1 para el comentario de gzip de @Tobu: con la configuración correcta, Apache puede servir archivos gzip'ed en un navegador web que los descomprimirá y mostrará de forma transparente. Los usuarios ni siquiera necesitan saber sobre la compresión.
Christopher Cashell

0

¿Alguna vez pensaste en comprimir los archivos de registro? Luego, haga algo en la interfaz para descomprimirlos antes de entregarlos al usuario final. Tal vez una especie de script CGI.


0

@Ankur y @Porch. Estoy totalmente de acuerdo con la necesidad de comprimir estos registros.

@jet Creo que el esquema más simple es mejor, por lo tanto, httpd para el usuario final es casi ideal. Y el backend podría ser cualquiera.

Mi opinión: dividir los registros en 2 grupos: carpetas 'antiguas' y 'nuevas'.

Fusionarlos en la raíz del documento de httpd. Utilice una compresión fuerte para archivos antiguos (archivos xz o 7z, populares para todos los sistemas operativos) con diccionario grande y tamaños de bloque, incluso pueden ser archivos sólidos.

Use fs de compresión para los nuevos: lessfs (rw, métodos de deduplicación + compresión ligera), fusecompress 0.9.x (rw, métodos de compresión ligeros a fuertes), btrfs / zfs, squashfs (ro, métodos de compresión ligeros a fuertes, algunos dedup, use para registros recién rotados).

Incluso puede escribir registros de forma transparente en fs comprimido (fusecompress, lessfs, btrfs / zfs). Proporcione acceso R / o por httpd a los registros que se están escribiendo. Serán transparentes para los usuarios y transparentemente descomprimidos para ellos.

Advertencias sobre fusecompress: 1) use solo 0.9.x - es estable. Clonar desde aquí https://github.com/hexxellor/fusecompress

Las versiones posteriores no admiten bien lzma o pierden datos.

2) utiliza solo 1 núcleo de CPU para comprimir un archivo, por lo que puede ser lento.

Vuelva a comprimir cada registro en la carpeta 'nueva', anterior a algún tiempo (varios meses) y vaya a 'antigua'.

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.